У меня есть класс (ChildClass), который расширяет ParentClass. Когда unmarshalling, я получаю исключение из 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 расширяет ParentClass
@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
@chama - Я обновил свой ответ. –