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