2016-06-21 10 views
0

ich arbeite in einem Projekt. A haben eine Java Bean mit einigen Eigenschaften. Ich markieren jedes Attribut mit dem Tag @XmlElement, wie folgt aus:XML in Java, wie man eine @ XmlElement Atribute Java Bean Null als leeren Wert in XML zeigt (Lösung gefunden)

@XmlElement(name="id", nillable = true) 
private String test; 

Ich habe dies „nillable“, es zeigt mir den Tag, auch wenn null wahr ist, aber es zeigt mir eine Nachricht in XML, wenn null ist

<id xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> 

Aber wenn es null ist ich will nur einen leeren Wert mit den Tags zeigen, wie diese

<id></id> 

Und ich weiß nicht, wie dies zu tun. Ich habe gesucht, aber ich habe nicht gefunden wie, deshalb frage ich.

Und mehr 1 Thing, kann ich XML erzeugen, das ohne Attribute ist? Weil ich im My XML ich habe alot leere Tags, mit nichts im Inneren, nur die Tags und ich möchte nicht aus attributes machen, wenn ich dies nicht nur verwenden, um das Tag zu zeigen

Vielen Dank!

Die Importe und einige Config, die ich

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name="test") 

--------- ---------- Lösung

Hallo, Jungs, ich eine Verwendung gefunden Lösung. Ich möchte teilen, wenn jemand in demselben Problem stecken geblieben ist. Ou deklarieren Sie die Eigenschaft der Klasse als leer, etwa String personName = "";

Sie brauchen die Getter und Setter nicht zu erstellen, wenn Sie diesen Wert nicht ändern und das Tag nur in XML, aber leer anzeigen möchten.

Hinweis: Für diese Arbeit müssen Sie den @ XmlAccessorType (XmlAccessType.FIELD) in Ihrer Klasse verwenden. Danke an alle. Tschüss

+0

Haben Sie versucht, die 'required = true' in '@XmlElement' Annotation hinzuzufügen? –

Antwort

1

Es gibt zwei Möglichkeiten, einen null Wert in XML darzustellen.

Eine Option ist die beschriebene xsi:nil. Es fügt nur ein leeres Tag für Ihr Attribut hinzu und kommentiert es mit als NULL-Wert. Dieses Formular wird von JAXB generiert, wenn Sie Ihre Attribute mit nillable = true annotieren.

Beachten Sie, dass ein leeres Tag nicht dasselbe ist wie ein Tag mit einer leeren Zeichenfolge - aber dazu später mehr.

Eine andere Option soll dieses Attribut überhaupt nicht darstellen. Es wird nur kein Tag für das Attribut im XML geben. JAXB verwendet diesen Ansatz standardmäßig, wenn Sie Ihren Java-Code nicht mit nillable = true annotieren, aber die Attribute weiterhin null Werte haben.

Und das ist es.

Nun zu dem, was Sie erreichen möchten.Rendering <id></id> bedeutet im Grunde, dass Sie ein id Attribut haben, das eine leere Zeichenfolge enthält. Obwohl Sie wahrscheinlich eine Sprache finden könnten, wenn diese dem Wert null entspricht (zum Beispiel PL/SQL von Oracle), entspricht das natürlich nicht dem Wert null in Java.

Wenn darüber hinaus die id als long oder int (oder einem Nicht-String-Typ) in Java Bean modelliert wird, wird der Parser scheitern solche XML zurück in die Bean-Instanz deserialisieren.