ParentClassを拡張するクラス(ChildClass)があります。アンマーシャリングすると、setPropFromElementList()から、渡した値がリストに存在していても、リストに存在しないという例外が発生します。この問題は、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は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>