I have an issue serializing and unserializing ReportTO using jaxb. The problem is at the ReportletConf list: public List<ReportletConf> getReportletConfs() { return reportletConfs; }
As ReportletConf is an interface JAXB can not handle it. So we get an IllegalAnnotationException or similar and JAXB does not even initialize. So I introduced the annotation below. This allowed the serialization to run. @XmlElement(type=AbstractReportletConf.class) The problem now is that the result of the serialization is not complete and can not be deserialized into the actual classes. This is how it looks (in an example I did with simplified classes: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><report><reportletConfs><name>test</name><description>desc</description></reportletConfs></report> As you can see there is not enough information to detect the real class. So I tried to change the signature to use the abstract class and not use the annotation: public List<AbstractReportletConf> getReportletConfs() This works: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><report><reportletConfs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="staticReportletConf"><name>test</name><description>desc</description></reportletConfs></report> >From the xsi:type jaxb knows the class to instantiate. So there are the following questions: - Is there a better way to achieve correct serialization of interfaces ? - Would it be ok if I change ReportletTO to use the abstract class? - I would like to avoid the xsi:type and instead have elements for each class extending AbstractReportletConf. Is that possible? Best regards Christian -- Christian Schneider http://www.liquid-reality.de Open Source Architect http://www.talend.com