JAXB Marshalling zmienną listę elementów o tej samej nazwie
Zgodnie z tytułem, mam plik XML, którego muszę odmówić:
<?xml version="1.0"?>
<root>
<wrap>
<Element>something1</Element>
<Element>something2</Element>
<Element>something3</Element>
</wrap>
</root>
„wrap” jest po prostu opakowaniem, ale liczba „elementów” jest różna.
Mam dwie klasy ułatwiające obiekty dla JAXB:
klasa wrap:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "root")
public class Wrap {
@XmlElementWrapper(name = "wrap")
@XmlElement(name = "Element")
private List<Element> elementList = new ArrayList<>();
public Wrap() {}
public Wrap(List<Element> list) {
this.elementList = list;
}
public void addElement(Element element) {
this.elementList.add(element);
}
public List<Element> getWrap() {
return this.elementList;
}
public void setWrap(List<Element> wrap) {
this.elementList = wrap;
}
}
klasa elementu:
@XmlRootElement(name = "Element")
public class Element {
private String Element;
public Element() {}
public Element(String element) {
this.Element = element;
}
public String getElement() {
return Element;
}
public void setElement(String element) {
this.Element = element;
}
}
Próba unieważnienia XML kończy się bez błędu, jednak wartości elementów nie są przechowywane z obiektami elementów. Zamiast tego toString zwraca wartość null dla każdego z obiektów.
Wypełniłem obiekty danymi i zebrałem je do pliku (pokazanego poniżej). Ten format jest oczywiście niepoprawny i powinien pasować do powyższego kodu XML.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<wrap>
<Element>
<element>entry1</element>
</Element>
<Element>
<element>entry2</element>
</Element>
<Element>
<element>entry3</element>
</Element>
</wrap>
</root>
Sprawdziłem to od jakiegoś czasu z założeniami, że moje adnotacje są nieprawidłowe, ale być może jest to coś innego ...