So instanziieren Sie ein leeres Element mit JAXB

8

Ich verwende JAXB, um XML-Nachrichten zu erstellen. Die XML, die ich erstellen muss, ist (der Einfachheit halber):

%Vor%

Mein Code sieht so aus:

%Vor%

Das Problem: Das Element header wird nicht angezeigt (Header ist null ). Wenn der Header auf eine leere Zeichenfolge gesetzt ist, wird Folgendes angezeigt:

%Vor%

Wenn ich den Typ Object anstelle von String verwende, ist das Ergebnis noch schlimmer:

%Vor%

Übrigens: Ich verwende diesen Code um die XML-Zeichenfolge zu erstellen.

Ist es möglich, ein leeres Tag zu bekommen?

    
doekman 27.02.2009, 12:22
quelle

4 Antworten

11

In% sind <header/> und <header></header> identisch. Wenn Sie das erstere wirklich wollen, dann verwenden Sie einen Prettifier. javax.xml.transform.TransformerFactory.newTransformer() wird das wahrscheinlich für Sie erledigen.

    
Tom Hawtin - tackline 27.02.2009, 13:20
quelle
2

Ein leeres Tag für ein String-Objekt ist im Wesentlichen die leere Zeichenfolge.

Wenn Sie Folgendes anrufen, erhalten Sie, was Sie suchen:

%Vor%

Ich sollte auch beachten, dass in XML die folgenden zwei Deklarationen eines Headers identisch sind. Beide haben keine untergeordneten Textknoten. Diese sind im Wesentlichen gleich und werden von allen XML-Parsern gleich behandelt:

%Vor%     
Chris Dail 27.02.2009 15:25
quelle
2

Wie @Tom Hawtin - Tackline sagte

<header/> und <header></header> sind gleich. Parser geben dir "".

Sie müssen nillable in Ihre Header-Annotation einfügen

%Vor%

Ich hoffe, dass dieser Code folgendes XML für null value generieren wird.

%Vor%

druckt

%Vor%     
Jin Kwon 27.06.2012 16:38
quelle
0

Ich wollte dasselbe, effektiv <header/> anstatt <header></header> während des XML-Serialisierungsprozesses.

Da ein Nullwert - und nicht eine leere Zeichenfolge - das korrekte Ergebnis liefert, habe ich meine Setter-Methode so geändert, dass der Wert explizit auf null gesetzt wird:

%Vor%     
Mark D 09.07.2015 00:28
quelle

Tags und Links