我有一个扩展 ParentClass 的类(ChildClass)。解组时,我从 setPropFromElementList() 中得到一个异常,即我传入的值在列表中不存在,即使它确实存在于列表中。我相信问题是由 JAXB 在设置子元素之前尝试设置父属性引起的。
我看到各种博客文章和问题,建议将父类设为 Transient,然后在子类上使用 propOrder(也包括父类中的元素)。这对我没有帮助 - 我收到了 IllegalAnnotationException。
有任何想法吗?(示例代码如下——它不是我使用的确切代码,所以我不能 100% 确定它会编译。但是,它确实显示了我在真实代码中所做的事情。)
父类.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);
ChildClass.java 扩展了 ParentClass
@XmlType(propOrder={ "list", "propFromElementList" })
private String[] list;
@XmlElement
public String[] getList() {
return this.list;
}
public void setList(final String... list) {
this.list = list;
}
@Override
protected void checkThatValueIsInList(String value) {
//search for String and throw RuntimeException if not found
}
XML
<child propFromElementList="A">
<list>A B C D</list>
</child>