JAXB无法识别类型继承

时间:2011-10-24 15:55:30

标签: java xml inheritance jaxb

我有一个JAXB生成的类,其集合的抽象类型为COBJECT。

COBJECT有多个后代,这些后代也有抽象的后代。 类层次结构的片段如下:

COBJECT (abstract)
|
|---CDEFINEDOBJECT
    |
    |--CDOMAINTYPE (abstract)
       |
       |---CCODEPHRASE 

当我将CCODEPHRASE的对象添加到类型为COBJECT的集合时,例如

protected List<COBJECT> children;

JAXB尝试创建一个抽象类型的COBJECT,但它失败了。我试图添加

@XmlElementRefs({
        @XmlElementRef(type = ARCHETYPEINTERNALREF.class),
        @XmlElementRef(type = CONSTRAINTREF.class),
        @XmlElementRef(type = CDEFINEDOBJECT.class),
        @XmlElementRef(type = ARCHETYPESLOT.class),
        @XmlElementRef(type = CCODEPHRASE.class)        
    })
protected List<COBJECT> children;

在children字段之前,但我得到“Type或其任何子类未知”的异常响应。

XML输入包含XSI:TYPE = ...属性。如何让JAXB处理这个继承结构?

1 个答案:

答案 0 :(得分:9)

您需要确保JAXBContext知道父类和所有子类型。这可以通过在创建JAXBContext时全部传入来完成。

JAXBContext.createContext.newInstance(Parent.class, Child1.class, Child2.class);

或者你可以提出@XmlSeeAlso注释。这允许您指定所有子类,以便在创建JAXBContext时只需要包含根:

@XmlSeeAlso({Child1.class, Child2.class}) {
public class Parent {
}

有关JAXB和继承的更多信息