Generics 泛型和Xstream
我在反序列化Xml时遇到java泛型和xstream问题 这是主要的DTOGenerics 泛型和Xstream,generics,serialization,xstream,Generics,Serialization,Xstream,我在反序列化Xml时遇到java泛型和xstream问题 这是主要的DTO @XStreamAlias("OBJECTX") public class ObjectX<T> { @XStreamAlias("DATA") private T t; ... getter and setter ... } 这是要反序列化的Xml示例 <?xml version="1.0" encoding="UTF-8"?> <OBJECTX>
@XStreamAlias("OBJECTX")
public class ObjectX<T> {
@XStreamAlias("DATA")
private T t;
... getter and setter ...
}
这是要反序列化的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.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);
StaxDriver StaxDriver=new StaxDriver(new NoNameCoder());
XStream XStream=新XStream(StatxDriver);
processAnnotations(ObjectX.class);
processAnnotations(FolderXml.class);
别名(“数据”,FolderXml.class);
addDefaultImplementation(FolderXml.class、ObjectX.class.getDeclaredField(“t”).getType());
ObjectX obj=(ObjectX)xstream.fromXML(xml);
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);
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);