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!
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%