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