Gegeben das folgende Beispiel xsd snippet:
%Vor% Wenn xjc die Klasse generiert, die das Attribut SEGMENT
bean enthält, wird der folgende Getter automatisch generiert:
Meine Frage ist, wie erhalten Sie das Gleiche für xs:element
Objekte? Mit anderen Worten, mit dem folgenden xsd-Ausschnitt:
Ich möchte wissen, ob ich xjc dazu bringen kann, Folgendes zu generieren:
%Vor%Wie kann das gemacht werden?
JAXB generiert nicht denselben Code für ein Element mit dem Standardwert wie für ein Attribut mit dem Standardwert, da XML-Schema unterscheidet zwischen Element- und Attributstandards :
Standardwerte von Attributen und Elementen werden mit dem Standardattribut deklariert, obwohl dieses Attribut in jedem Fall eine etwas andere Konsequenz hat. Wenn ein Attribut mit einem Standardwert deklariert wird, ist der Wert des Attributs der Wert, der als Wert des Attributs in einem Instanzdokument angezeigt wird. Wenn das Attribut nicht im Instanzdokument angezeigt wird, stellt der Schema-Prozessor dem Attribut einen Wert bereit, der dem des Standardattributs entspricht. Beachten Sie, dass Standardwerte für Attribute nur sinnvoll sind, wenn die Attribute selbst optional sind. Daher ist es ein Fehler, sowohl einen Standardwert als auch einen anderen Wert als den optionalen Wert für die Verwendung anzugeben.
Der Schema-Prozessor behandelt defaulted Elemente leicht unterschiedlich. Wenn ein Element mit einem Standardwert deklariert wird, ist der Wert des Elements der Wert, der als Inhalt des Elements im Instanzdokument angezeigt wird. Wenn das Element ohne Inhalt angezeigt wird, stellt der Schema-Prozessor dem Element einen Wert bereit, der dem des Standardattributs entspricht. Wenn das Element jedoch nicht im Instanzdokument angezeigt wird, stellt der Schema-Prozessor das Element überhaupt nicht bereit. Zusammenfassend können die Unterschiede zwischen Element- und Attributstandardwerten wie folgt angegeben werden: Standardattributwerte gelten, wenn Attribute fehlen, und Standardelementwerte gelten, wenn Elemente leer sind.
Sie können immer mit dem Standardwert für ein fehlendes Attribut rechnen (von hier aus der spezielle Getter), aber es gibt einen Haken mit einem fehlenden Elementwert.
Nichtsdestotrotz weiß der Unmarshaller, wie Sie mit dem Standardwert umgehen, wenn Sie eine Instanz aufheben. Siehe hier für Details:
XJC fügt den Gettercode nicht hinzu oder initialisiert die Felder nicht mit dem Standardwert. Wenn Sie also die "Nullsicherheitsüberprüfung" benötigen, können Sie sie entweder manuell hinzufügen manuell , nachdem der Code generiert wurde XJC oder versuchen, ein Plugin zu verwenden, um es automatisch zu tun:
Tags und Links jaxb