Jaxb编组抽象类而不是唯一

时间:2014-03-26 15:49:30

标签: java jaxb

我有以下关系:

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>

2 个答案:

答案 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;