gpt4 book ai didi

泛型和 Xstream

转载 作者:行者123 更新时间:2023-12-01 02:37:47 26 4
gpt4 key购买 nike

我在反序列化 Xml 时遇到 java 泛型和 xstream 的问题。

这是主要的DTO

@XStreamAlias("OBJECTX")
public class ObjectX<T> {

@XStreamAlias("DATA")
private T t;

... getter and setter ...

}

这是主 DTO 中的数据对象

@XStreamAlias("DATA")
public class FolderXml {

@XStreamAlias("DIGITION_NAME")
private String digitionName;

@XStreamAlias("FOLDER_ID")
private int folderId;

...getters and setters...

}

这是要反序列化的 Xml 示例

<?xml version="1.0" encoding="UTF-8"?>
<OBJECTX>
<DATA>
<DIGITION_NAME>TVC_ACT2</DIGITION_NAME>
<FOLDER_ID>1234</FOLDER_ID>
</DATA>
</OBJECTX>

这是实际的代码

StaxDriver staxDriver = new StaxDriver(new NoNameCoder());
XStream xstream = new XStream(staxDriver);
xstream.processAnnotations(ObjectX.class);
xstream.alias("DATA", FolderXml.class);
ObjectX<FolderXml> obj= (ObjectX<FolderXml>) xstream.fromXML(xml);

异常(exception)情况是

com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field java.lang.Object.DIGITION_NAME
---- Debugging information ----
field : DIGITION_NAME
class : java.lang.Object
required-type : java.lang.Object
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path : /OBJECTX/DATA/DIGITION_NAME
line number : 4
class[1] : cat.ccma.digition.digitionservicecontroller.objects.base.ObjectX
version : null
-------------------------------

最佳答案

修改您的代码以添加泛型的默认实现。

    StaxDriver staxDriver = new StaxDriver(new NoNameCoder());
XStream xstream = new XStream(staxDriver);
xstream.processAnnotations(ObjectX.class);
xstream.processAnnotations(FolderXml.class);
xstream.alias("DATA", FolderXml.class);
xstream.addDefaultImplementation(FolderXml.class,ObjectX.class.getDeclaredField("t").getType());
ObjectX<FolderXml> obj= (ObjectX<FolderXml>) xstream.fromXML(xml);

关于泛型和 Xstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com