java - XStream:不能同时反序列化属性和隐式集合
问题描述
我正在使用 xstream 反序列化这个 xml
<ERA>
<SINGLE_VALUE_REMAP>
<SUBJECT_GROUP></SUBJECT_GROUP>
<VALUE_REMAP VALUE="IRRILEVANTE_RISCHIO">
<ORIGINAL_VALUE>005</ORIGINAL_VALUE>
</VALUE_REMAP>
<VALUE_REMAP VALUE="BASSO_RISCHIO">
<ORIGINAL_VALUE>003</ORIGINAL_VALUE>
</VALUE_REMAP>
<VALUE_REMAP VALUE="MEDIO_RISCHIO">
<ORIGINAL_VALUE>010</ORIGINAL_VALUE>
</VALUE_REMAP>
<VALUE_REMAP VALUE="ALTO_RISCHIO">
<ORIGINAL_VALUE>004</ORIGINAL_VALUE>
</VALUE_REMAP>
<VALUE_REMAP VALUE="ALTISSIMO_RISCHIO">
<ORIGINAL_VALUE>002</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 集合为空:
奇怪的是,如果我删除转换器,则可以正确检索 originalValue 集合,但 VALUE_REMAP 的属性为空。
解决方案
推荐阅读
- html - 订阅本地图书馆的服务
- javascript - 如何使用 XmlHttpRequest 发送 FormData 并映射到 viewmodel 属性
- javascript - 在 javascript 中设置暂停/恢复定时器
- javascript - 具有更改图像功能的 if/else 语句不适用于多个图像
- matlab - 在批处理文件中运行旧版本的 MATLAB
- java - 跳过文件的一部分
- c# - 如何修复 Join(" ") 不会在连接的字符串中添加空格
- javascript - Javascript 变量保存以前的值
- python - Python (3.7) CSV 按字段值排序/求和
- corda - Corda:事务构建器会在 Corda 4.0 中自动添加引用状态吗?