Java 在使用继承时,是否有办法确保在属性之前设置jaxb元素?

Java 在使用继承时,是否有办法确保在属性之前设置jaxb元素?,java,jaxb,Java,Jaxb,我有一个扩展ParentClass的类(ChildClass)。解组时,我从setPropFromElementList()得到一个异常,即我传入的值不存在于列表中,即使它确实存在于列表中。我认为这个问题是由JAXB试图在设置子元素之前设置父元素的属性引起的 我看到了各种各样的博客文章和问题,建议先让父类暂时化,然后在子类上使用Propoder(包括父类中的元素)。这对我没有帮助-我得到了一个非法的注释例外 有什么想法吗?(下面是示例代码-它不是我使用的确切代码,因此我不能100%确定它是否可以

我有一个扩展ParentClass的类(ChildClass)。解组时,我从setPropFromElementList()得到一个异常,即我传入的值不存在于列表中,即使它确实存在于列表中。我认为这个问题是由JAXB试图在设置子元素之前设置父元素的属性引起的

我看到了各种各样的博客文章和问题,建议先让父类暂时化,然后在子类上使用Propoder(包括父类中的元素)。这对我没有帮助-我得到了一个非法的注释例外

有什么想法吗?(下面是示例代码-它不是我使用的确切代码,因此我不能100%确定它是否可以编译。但是,它确实显示了我在实际代码中所做的。)

ParentClass.java

@XmlTransient //on the entire class - not shown here

private String propFromElementList

@XmlAttribute
String getPropFromElementList() {
    return this.propFromElementList;
}

void setPropFromElementList(String value) {
    checkThatValueIsInList(value);
    this.propFromElementList = value;
}

protected abstract void checkThatValueIsInList(String value);
java扩展了父类

@XmlType(propOrder={“list”,“propFromElementList”})

XML


A、B、C、D

更新

在使用继承时,是否有办法确保在属性之前设置jaxb元素

您无法控制实现填充域模型的顺序。JAXB impl最喜欢填充对象模型,因为它在解组操作期间对XML文档执行深度优先遍历。这意味着属性通常会在任何子元素之前处理,而这些子元素似乎是导致用例中出现问题的原因

您可能想考虑将验证逻辑移动到代码之外> SETPROFFROMLMENTROLISUTION/COD>方法,并将其放在<代码> > ununsHARS< /COD>方法> < /P>


原始答案

@XmlType
上的
proporter
设置仅在编组时使用。您不能在
@XmlType
上的
比例器中包含使用@xmltribute映射的属性。既然你有:

@XmlAttribute
String getPropFromElementList() {
    return this.propFromElementList;
}

然后,
propFromElementList
不能出现在仅适用于非属性节点的
propOrder
中。

那么有没有办法确保在属性之前设置元素?
<child propFromElementList="A">
    <list>A B C D</list>
</child>
@XmlAttribute
String getPropFromElementList() {
    return this.propFromElementList;
}