gpt4 book ai didi

java - JAXB 无法识别类型继承

转载 作者:数据小太阳 更新时间:2023-10-29 02:16:39 25 4
gpt4 key购买 nike

我有一个 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 or any of its subclasses are not known”异常响应。

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

最佳答案

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

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

或者您可以利用 @XmlSeeAlso 注释。这使您可以指定所有子类,以便在创建 JAXBContext 时只需要包含根:

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

有关 JAXB 和继承的更多信息

关于java - JAXB 无法识别类型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7878405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com