Wie gebe ich die Adapter an, die JAXB zum Marshalling / Unmarshalling von Daten verwendet?

8

Gibt es eine Möglichkeit, den Adapter anzugeben, den JAXB zum Marshalling / Unmarshalling von Objekten in meinem XML-Schema verwendet?

Wenn ich beispielsweise Folgendes als Ganzzahl analysieren möchte:

%Vor%

Ich kann Folgendes in meinem Schema verwenden:

%Vor%

Wenn ich das Schema über das XJC-Tool ausführe, sollte der String "0x1234" mit Integer.decode () als Integer mit dem Wert 0x1234 oder 4660 in Dezimal dekodiert werden. Die Adapterklasse, die generiert wird, spiegelt dies korrekt wider:

%Vor%

Wenn ich jedoch den Wert zu einem XML-Element (das ein String-Literal ist) zurückmelden möchte, führt die Adapter-Klasse Folgendes aus:

%Vor%

In diesem Fall ist der String-Wert der Ganzzahl 0x1234 (4660 in Dezimal) "4660", was nicht meinem Schema entspricht (weil er kein Präfix "0x" hat).

Wie kann ich dem Adapter mitteilen, dass die Ganzzahl 0x1234 als String-Literal "0x1234" gemarshallt werden soll? Ich würde gerne in der Lage sein, dies innerhalb des Schemas zu tun, so dass ich nur neue Java-Klassen generieren kann, ohne die Ausgabe ändern zu müssen. Ist das möglich?

Bearbeiten: Basierend auf der angenommenen Antwort, hier ist was ich getan habe, um das zu erreichen:

Ich habe eine Methode in einer Klasse com.example.Parse namens hexString () geschrieben:

%Vor%

Dann habe ich mein Schema auf diese Methode zum Drucken gezeigt:

%Vor%     
troyal 10.05.2011, 23:42
quelle

3 Antworten

5

Versuchen Sie es

%Vor%

Ich habe es noch nicht getestet, aber ich erinnere mich daran, etwas sehr ähnliches zu benutzen.

    
Bala R 11.05.2011, 00:10
quelle
7

Sehr ähnliches Problem: "Wie können String-Koordinaten java.awt.Point zugeordnet werden?"

(0) Schema

%Vor%

(1) Erstellen Sie eine Adapterklasse, die XmlAdapter erweitert.

%Vor%

(2) Erstellen Sie eine Bindungsdatei. Der Schlüssel ist hinzuzufügen: jaxb: extensionBindingPrefixes="xjc" xmlns: xjc="http://java.sun.com/xml/ns/jaxb/xjc"

%Vor%

(3) Konfigurieren Sie pom.xml

%Vor%

(4) JAXB erzeugt

%Vor%     
Karol Król 13.07.2013 23:02
quelle
0

Sie möchten einen benutzerdefinierten Adapter. Hier ist ein Beitrag, der sich mit einem benutzerdefinierten booleschen Ergebnis beschäftigt, aber auch auf Ihr Szenario angewendet werden könnte.

Außerdem ist hier die API-Dokumentation für JAXBs XmlAdapter: Ссылка

Hoffe, das hilft!

    
Geoff 11.05.2011 00:13
quelle

Tags und Links