Diese Frage wurde in verschiedenen Formen gestellt - aber ich denke, dass es noch Raum gibt, dies weiter zu katalogisieren.Jaxb generierte Klasse verwendet JAXBElement anstelle des angegebenen Typs
Ich habe eine XSD mit zwei Elementdefinitionen
<xs:complexType name="elementA">
<xs:sequence>
<xs:element name="date" type="xs:string" minOccurs="0"/>
<xs:element name="lastXdigits" type="xs:string" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Dies erzeugt:
protected String date;
@XmlElementRef(name = "lastXdigits", namespace = "http://xxxxxxx", type = JAXBElement.class)
protected JAXBElement<String> lastXDigits;
Ändern der XSD:
<xs:element name="lastXdigits" type="xs:string" nillable="true" minOccurs="1"/>
ergibt:
protected String date;
@XmlElement(name = "lastXdigits", required = true, nillable = true)
protected String lastXDigits;
und mit:
<xs:element name="lastXdigits" type="xs:string" minOccurs="0"/>
Ergebnisse in:
protected String date;
@XmlElement(name = "lastXdigits")
protected String lastXDigits;
Das scheint mir sehr merkwürdig. Warum wird lastXDigits im ersten Fall als JAXBElement-Typ generiert und warum reicht ein String-Typ nicht in allen Fällen aus? Warum sollte Jaxb diese beiden Elemente auch anders behandeln, wenn ihre Definition neben dem Namen identisch ist?
Ich benutze eine jaxb-xjc ant Aufgabe von jaxb 2.0.5.
Sieht dies verdächtig aus oder gibt es eine gute Begründung für diese Unterschiede?
Ich denke, das ist relevant, wenn Sie an der Unterscheidung zwischen keinem Element und dem Wert des Elements interessiert sind, aber ich denke, in den meisten Fällen kümmert sich niemand wirklich darum und die zusätzliche Ebene der Umleitung ist nur ein Ärgernis . – Ellis
Ja, aber ich denke, dass es in einigen Fällen eine gültige Unterscheidung sein kann. –