2012-02-09 35 views
3

我能成功地编组JAXB对象,而且它有一个列表对象,然后我提出一个新的对象像下面为什么JAXB不编组我自己的子类

public class Sub extends SuperJAXBClass{ 

@Override 
public List getList1(){ 
//override here 
return ...; 
} 
} 

然后,像下面的代码: SuperJAXBClass sjc = new Sub(); 马歇尔(SJC)

然后我发现在List1在子没有被成功编组。 任何人都知道为什么会发生这种情况? 如何解决它?

+0

你是如何创建JAXBConext的?以下信息可能有助于:http://blog.bdoughan.com/search/label/Inheritance – 2012-02-09 23:04:17

+0

JAXBContext.newInstance(SuperJAXBClass.class); – user999377 2012-02-10 15:10:35

回答

3

你可以做以下之一:

选项#1 - @XmlSeeAlso注释

JAXB(JSR-222)实现不能使用Java反射来确定所有可能suclasses。作为一个工作,你身边可以注释与@XmlSeeAlso注释提供JAXB到子类的引用超类。

@XmlSeeAlso({Sub.class}) 
public class SuperJAXBClass { 
} 

选项#2 - 通过在子类时创建的JAXBContext

如果在创建JAXBContext时则JAXB实现将知道它包括的子类。当一个子类传递给超类的元数据时也会被创建。

JAXBContext.newInstance(Sub.class); 
+0

调试后,我发现子类有一个getList1方法得到控制而它有一个隐藏的getList1方法,我认为它的超类的方法。这可能就是为什么每次JAXB编组子类时,返回的隐藏getList1方法都是空的,所以它不能被编组。 – user999377 2012-02-24 19:33:06

相关问题