mah*_*nya 3 java xml inheritance jaxb
我有一个JAXB生成的类,其集合的抽象类型为COBJECT.
COBJECT有多个后代,这些后代也有抽象的后代.类层次结构的片段如下:
COBJECT (abstract)
|
|---CDEFINEDOBJECT
|
|--CDOMAINTYPE (abstract)
|
|---CCODEPHRASE
Run Code Online (Sandbox Code Playgroud)
当我将CCODEPHRASE的对象添加到类型为COBJECT的集合时,例如
protected List<COBJECT> children;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
在子字段之前,但我得到"类型或其任何子类未知"的异常响应.
XML输入包含XSI:TYPE = ...属性.如何让JAXB处理这个继承结构?
bdo*_*han 10
您需要确保JAXBContext
知道父类和所有子类型.这可以通过在创建JAXBContext时传递全部内容来完成.
JAXBContext.createContext.newInstance(Parent.class, Child1.class, Child2.class);
Run Code Online (Sandbox Code Playgroud)
或者你可以提出一个@XmlSeeAlso
注释.这允许您指定所有子类,以便在创建JAXBContext时只需要包含根:
@XmlSeeAlso({Child1.class, Child2.class}) {
public class Parent {
}
Run Code Online (Sandbox Code Playgroud)
有关JAXB和继承的更多信息