微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XStream:不能同时反序列化属性和隐式集合

如何解决XStream:不能同时反序列化属性和隐式集合

我正在使用 xstream 反序列化这个 xml

<ERA>
    <SINGLE_VALUE_REMAP>
        <SUBJECT_GROUP></SUBJECT_GROUP>

        <VALUE_REMAP VALUE="IRRILEVANTE_RISCHIO">
            <ORIGINAL_VALUE>005</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>008</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>009</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>012</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>013</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>019</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>021</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>028</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>029</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>031</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>032</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>037</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>040</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>041</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>046</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>048</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>049</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>050</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>053</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>054</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>055</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>056</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>061</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>063</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>067</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>068</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>069</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>077</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>078</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>084</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>086</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>092</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>094</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>101</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>105</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>141</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>147</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>168</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>257</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>258</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>259</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>260</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>261</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>266</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>270</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>275</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>276</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>296</ORIGINAL_VALUE>
        </VALUE_REMAP>

        <VALUE_REMAP VALUE="BASSO_RISCHIO">
            <ORIGINAL_VALUE>003</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>006</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>011</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>015</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>016</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>022</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>035</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>058</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>064</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>075</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>085</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>088</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>093</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>097</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>110</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>114</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>124</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>126</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>130</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>153</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>159</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>182</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>188</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>218</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>226</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>248</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>265</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>267</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>268</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>269</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>271</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>272</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>273</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>287</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>294</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>295</ORIGINAL_VALUE>
        </VALUE_REMAP>

        <VALUE_REMAP VALUE="MEdio_RISCHIO">
            <ORIGINAL_VALUE>010</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>017</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>027</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>089</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>100</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>104</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>106</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>123</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>129</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>139</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>146</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>155</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>157</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>164</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>166</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>167</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>175</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>177</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>178</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>180</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>183</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>186</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>190</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>200</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>204</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>213</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>214</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>215</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>219</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>222</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>223</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>227</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>228</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>229</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>230</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>231</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>232</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>233</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>234</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>235</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>236</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>245</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>246</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>247</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>250</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>252</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>255</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>256</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>277</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>280</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>281</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>282</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>283</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>284</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>285</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>286</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>292</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>293</ORIGINAL_VALUE>
        </VALUE_REMAP>

        <VALUE_REMAP VALUE="ALTO_RISCHIO">
            <ORIGINAL_VALUE>004</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>007</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>018</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>023</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>024</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>025</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>026</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>033</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>034</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>044</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>045</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>052</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>057</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>059</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>062</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>066</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>071</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>072</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>076</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>080</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>081</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>090</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>091</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>095</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>102</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>103</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>109</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>113</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>115</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>116</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>117</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>119</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>122</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>125</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>127</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>131</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>133</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>134</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>136</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>137</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>138</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>143</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>144</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>145</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>148</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>149</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>150</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>151</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>154</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>156</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>158</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>161</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>162</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>163</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>169</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>176</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>185</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>187</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>189</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>191</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>192</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>193</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>194</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>195</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>196</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>197</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>198</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>199</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>201</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>202</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>203</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>205</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>206</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>207</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>208</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>209</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>210</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>212</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>216</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>217</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>220</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>221</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>225</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>237</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>238</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>239</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>240</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>241</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>242</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>243</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>244</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>249</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>251</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>253</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>254</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>262</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>263</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>264</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>274</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>278</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>279</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>288</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>289</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>290</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>291</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>297</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>794</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>795</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>796</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>797</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>798</ORIGINAL_VALUE>
        </VALUE_REMAP>

        <VALUE_REMAP VALUE="ALTISSIMO_RISCHIO">
            <ORIGINAL_VALUE>002</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>020</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>036</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>038</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>039</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>042</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>047</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>051</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>065</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>070</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>073</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>074</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>082</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>083</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>087</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>098</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>107</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>112</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>118</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>120</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>121</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>128</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>132</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>135</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>142</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>152</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>160</ORIGINAL_VALUE>
            <ORIGINAL_VALUE>211</ORIGINAL_VALUE>
        </VALUE_REMAP>

        <DEFAULT_VALUE>ERRATO_O_MANCANTE</DEFAULT_VALUE>
    </SINGLE_VALUE_REMAP>
</ERA>

这是我用来描述 xml 的 bean:

private class VALUE_REMAP {
        private List<String> ORIGINAL_VALUE;
        private String VALUE;        
    }

    private class SINGLE_VALUE_REMAP {
        private String SUBJECT_GROUP;
        private String DEFAULT_VALUE;
        private List<VALUE_REMAP> VALUE_REMAP;
    }

    private class ERA {
        private SINGLE_VALUE_REMAP SINGLE_VALUE_REMAP;
    }

这就是我尝试反序列化 xml 的方式

private ERA getera() throws UnsupportedEncodingException,FileNotFoundException,IOException {
        XStream xstream = new XStream();
        xstream.addPermission(NoTypePermission.NONE);
        xstream.addPermission(NullPermission.NULL);
        xstream.addPermission(PrimitiveTypePermission.PRIMITIVES);
        xstream.allowTypeHierarchy(Collection.class);
        xstream.addImplicitCollection(VALUE_REMAP.class,"ORIGINAL_VALUE",String.class);
        xstream.addImplicitCollection(SINGLE_VALUE_REMAP.class,"VALUE_REMAP",VALUE_REMAP.class);
        xstream.allowTypesByWildcard(new String[]{
            "es.aprenet.riasconfigcore.custom.*",});
        xstream.alias("VALUE_REMAP",VALUE_REMAP.class);
        xstream.alias("SINGLE_VALUE_REMAP",SINGLE_VALUE_REMAP.class);
        xstream.alias("ERA",ERA.class);
        xstream.registerConverter(new ToAttributedValueConverter(VALUE_REMAP.class,xstream.getMapper(),xstream.getReflectionProvider(),xstream
                .getConverterLookup(),null));
        
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(possiblePath2.toString()),"UTF-8"));
        StringBuilder buff = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            buff.append(line);
        }
        return (ERA) xstream.fromXML(buff.toString());
    }

反序列化不抛出异常,但是 original_value 集合为空:

enter image description here

奇怪的是,如果我删除转换器,则可以正确检索 originalValue 集合,但 VALUE_REMAP 的属性为空。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。