JAXB: Wie kann ich XML ohne Namespaces entpacken?

8

Ich habe eine XML-Datei:

%Vor%

Und ich möchte es zu einem Objekt der Klasse unterhalb von

entpacken %Vor%

Wie kann ich das tun? Wenn ich Namespaces nicht spezifiziere (siehe unten), funktioniert es nicht.

%Vor%     
Andrey 25.08.2011, 02:37
quelle

3 Antworten

7

Ein einfacherer Weg wäre die Verwendung von unmarshalByDeclaredType , da Sie bereits den Typ kennen, den Sie entpacken möchten.

Mit

%Vor%

Sie müssen keine Namespace-Deklaration in der XML-Datei haben, da Sie das JAXBElement mit dem bereits festgelegten Namespace übergeben.

Dies ist auch vollkommen legal, da Sie nicht auf einen Namespace in einer XML-Instanz verweisen müssen, siehe Ссылка - und viele Kunden produzieren XML auf diese Weise.

Endlich hat es funktioniert. Beachten Sie, dass Sie alle benutzerdefinierten Namespaces im Schema entfernen müssen. Hier ist der Beispielcode:

Das Schema:

%Vor%

XML:

%Vor%

JAXB-Code:

%Vor%     
Gregor 03.01.2012 19:05
quelle
5

AKTUALISIEREN

Sie können dies erreichen, indem Sie eine Zwischenebene einfügen, die zwischen type und xsi:type übersetzt wird. Im Folgenden finden Sie ein Beispiel für die Verwendung von StAX StreamReaderDelegate für die JAXB-Unmarshal-Operation:

%Vor%

xsi:type ist ein Schemamechanismus zur Angabe des realen Typs eines Elements (ähnlich wie in Java). Wenn Sie den Namespace entfernen, ändern Sie die Semantik des Dokuments.

In EclipseLink JAXB (MOXy) können Sie Ihren eigenen Vererbungsindikator für Domänenobjekte mit% co_de angeben % und @XmlDescriminatorNode . Derzeit bieten wir diese Art der Anpassung für Datentypeigenschaften nicht an:

Blaise Doughan 26.08.2011 14:59
quelle
2

Basierend auf Blaises Kommentaren (danke Blaise!) und meinen Nachforschungen. Hier ist die Lösung für mein Problem. Stimmst du dem Blaise zu, oder hast du einen besseren Weg?

%Vor%     
Andrey 29.08.2011 22:15
quelle

Tags und Links