При попытке маршализации этого XML:Неожиданный элемент (uri: "", local: "element"). Ожидаемые элементы <{}link><{}size>
<holder>
<name>a</name>
<elements>
<element>
<name>elem</name>
</element>
</elements>
</holder>
я получаю ошибку unexpected element (uri:"", local:"element"). Expected elements are <{}link>,<{}totalSize>
в ValidationEventHandler
и теге <elements>
(и, следовательно, elements
поля в Holder
классе) игнорируются.
При создании XML
оба link
и totalSize
не выводятся, поскольку они равны нулю.
JAVA МОДЕЛЬ
Иерархия является немного сложным:
(упрощенный ради вопроса)
ElementRoot
абстрактные ElementRoot
имеет соединительный элемент
public abstract class ElementRoot implements Serializable {
protected String link;
@XmlElement(name = "link")
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
}
Упаковочный
абстрактные Упаковочный расширяет ElementRoot и имеет элемент TotalSize
public abstract class Wrapper<T> extends ElementRoot {
protected int totalSize;
protected List<T> collection = new ArrayList<>();
@XmlElement
public int getTotalSize() {
return totalSize;
}
public void setTotalSize(int totalSize) {
this.totalSize = totalSize;
}
public abstract List<T> getCollection();
}
Держатель
Держатель простирается ElementRoot
@XmlRootElement(name = "holder")
@XmlType(propOrder = {"name", "elements"})
public class Holder extends ElementRoot {
private String name;
private Elements elements;
// setters and getters not annotated
}
Элементы
Элементы расширяет обертку и имеет коллекцию Element
import java.util.Collection;
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "elements)
public class Elements extends Wrapper {
@Override
@XmlElement(name="element")
public Collection<Element> getElements() {
return elements;
}
// No setter, to add getElements().add(element)
}
Элемент
элемент простирается ElementRoot
@XmlRootElement(name = "element")
@XmlType(propOrder = {"id", "name"})
public class Element extends ElementRoot {
private Integer id;
private String name;
// setters and getters no annotated
}
СРЕДЫ
Я использую java 7
:
JAXB-api 2.2.7
MOXy 2.5.0
Я добавил некоторые классы моделей на ваш вопрос, основываясь на вашем описании. Как у вас эти аннотации? Также где должен выглядеть элемент 'datastore' в вашем XML-вводе? –
'datastore' осталось от оригинала, я упростил иерархию. Благодаря! – ssedano