Дженерики и Xstream

У меня проблема с java generics и xstream при десериализации Xml.

Это основной DTO

@XStreamAlias("OBJECTX")
public class ObjectX<t> {
 @XStreamAlias("DATA")
 private T t;
 ... getter and setter ...
}
</t>

Это объект Data внутри основного 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);
</folderxml></folderxml>

Исключение составляет

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
-------------------------------
1 ответ

Измените свой код, чтобы добавить стандартную реализацию для Generics.

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);
</folderxml></folderxml>

licensed under cc by-sa 3.0 with attribution.