Dupliziertes Feld in generiertem XML mit JAXB

8

Das ist mein Szenario. Ich habe eine generische Klasse:

%Vor%

Und eine Kindklasse:

%Vor%

Auf diese Klassen wird hier verwiesen:

%Vor%

Dann wird ein Beziehungsobjekt mit etwas wie:

erstellt %Vor%

Nach dem Marshalling dieses Objekts lautet die Xml-Ausgabe wie folgt:

%Vor%

Also sind die value -Elemente dupliziert !.

Der Grund, warum die Klasse StringTuple List<T> getList() mit List<String> getList() überschreibt, besteht darin, die nervig erzeugten xmlns:xs Attribute in jedem Mitglied der Liste zu vermeiden (die value Elemente im XML Dokument). Aber dann wird jedes Mitglied der Liste zweimal in der Ausgabe angezeigt. Scheinbar liegt das daran, dass sowohl die überschriebene Elternmethode als auch die Kindmethode mit @XmlElement kommentiert sind. Meine Hauptfrage lautet also: Es gibt eine Möglichkeit, überschriebene Methoden zu ignorieren, die mit @XmlElement in Jaxb kommentiert wurden. (Beachten Sie, dass die Overriding-Methode auch mit @XmlElement versehen ist)

Ich habe einen alten Post gefunden, der ein ähnliches Problem meldet: Ссылка , aber Ich habe noch keine Lösung gefunden. Beachten Sie auch, dass das Hinzufügen einer @XmlTransient -Anmerkung zur getList -Methode an der Elternklasse ( Tuple<T> ) dieses Problem lösen könnte, aber andere generiert, da die Elternklasse nicht abstrakt ist und in anderen Kontexten allein verwendet wird.

Einseitige Nebenfrage: Ist es möglich, das Attribut xmlns:xs am Wurzelknoten zu deklarieren, anstatt es - auffällig - in jedem Knoten zu erscheinen, wo es benötigt wird? Ich weiß, dass dies mit der Klasse NamespacePrefixMapper möglich ist, aber da es sich um eine nicht standardisierte interne Klasse SUN handelt, bevorzuge ich eher einen implementierungsunabhängigeren Ansatz.

Vielen Dank im Voraus für eine Rückmeldung!

    
Sergio 21.10.2011, 14:40
quelle

2 Antworten

3

Sie können den folgenden Ansatz verwenden, um die Eigenschaft @XmlTransient für das übergeordnete Element und @XmlElement für das untergeordnete Element zu markieren:

Parent

%Vor%

IntegerChild

%Vor%

StringChild

%Vor%

Demo

%Vor%

Ausgabe

%Vor%     
Blaise Doughan 21.10.2011, 18:02
quelle
2

Dies ist vielleicht ziemlich alt, aber es ist das erste Ergebnis bei der Suche nach "JAXB doppelte Felder"

Stolperte über das gleiche Problem, das hat den Trick für mich gemacht:

%Vor%     
Wolf 13.11.2013 20:48
quelle

Tags und Links