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%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:
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:
Tags und Links xml jaxb unmarshalling