我有一个父类扩展一个类(ChildClass)。当解读时,我正在从setPropFromElementList(),我传递的价值并不在列表中存在,即使它在列表中确实存在异常。我相信这个问题是由JAXB在设置子元素之前尝试设置父元素的属性引起的。有没有办法确保在使用继承时我的jaxb元素设置在属性之前?
我看到了各种博客帖子和问题,建议使父类Transient,然后对子类(包括父类的元素)使用propOrder。这并没有帮助我 - 我得到了IllegalAnnotationException。
任何想法? (示例代码如下 - 它不是我使用的精确代码,所以我不能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);
ChildClass.java延伸父类
@XmlType(propOrder = { “列表”, “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>
那么有什么方法可以确保元素在属性之前设置? – chama 2013-03-06 20:05:14
@chama - 我已经更新了我的答案。 – 2013-03-06 20:11:13