我有以下关系:
Class A abstract;
Class B concrete extends A;
Class C has a one to one relation with B.
让我们说
A a=new B();
如果我编组A,它将通过使用B上显示的xml数据进行编组
<B>
</B>
但如果我们说
C c = new C();
c.setA(new B());.
我得到:
<C>
<A>
</A>
</C>
但是A是抽象的,因此在解组时会抛出异常。我的问题如何在C的编组过程中让jaxb marshell具体而不是抽象类,所以xml文件的结果将是:
<C>
<B>
</B>
<C>
答案 0 :(得分:2)
您必须以这种方式注释C类
public class C{
@XmlElements({
@XmlElement(name="B", type=B.class),
@XmlElement(name="D", type=D.class),
@XmlElement(name="E", type=E.class),
@XmlElement(name="F", type=F.class),
//....
})
private A a;
}
答案 1 :(得分:2)
如果您使用@XmlElementRef
进行注释,则会根据其@XmlRootElement
注释匹配该值。
@XmlElementRef
private A a;