2010-03-15 6 views
6

Ich möchte das Marshalling von Daten in JAXB anpassen. Es ist eine Variante davon schon question gefragt. Ich würde denken, ich würde einen XMLAdapter verwenden, wie this answer Fragen spezifiziert.Wie Sie JAXB Marshalling anpassen, wenn Sie JAXB-Beans aus XML generieren

Aber ich kann das nicht genau machen, weil ich andersherum herumfahre und die JAXB-Beans aus einer .XSD erzeuge - ich kann keine Anmerkungen zu den JAXB-Beans hinzufügen, weil sie generierten Code sind.

Ich habe versucht, Marshaller.setAdapter() aufrufen, aber ohne Glück.

  final Marshaller marshaller = getJaxbContext().createMarshaller(); 
      marshaller.setSchema(kniSchema); 
      marshaller.setAdapter(new DateAdapter()); 
      ... 
      private static class DateAdapter extends XmlAdapter<String, XMLGregorianCalendar> { 
      @Override 
      public String marshal(XMLGregorianCalendar v) throws Exception { 
       return "hello"; //Just a test to see if it's working 
      } 
      @Override 
      public XMLGregorianCalendar unmarshal(String v) throws Exception { 
       return null; // Don't care about this for now 
      } 
} 

Ergreift der betreffende Teil meiner erzeugt JAXB Bohne sieht wie folgt aus:

@XmlSchemaType(name = "date") 
    protected XMLGregorianCalendar activeSince; 

Wenn ich das tue, was das Standarddatum/XMLGregorianCalendar Rangier passiert. Es ist, als ob ich nicht alles gemacht hätte.

Jede Hilfe wird geschätzt.

Danke,

Charles

Antwort

2

Der bevorzugte Weg ist, den gebundenen Typ auf dem XJC generierte Java zu ändern, um eine verbindliche Anpassung zu verwenden.

https://jaxb.dev.java.net/guide/Using_different_datatypes.html

JAXB verfügt über eine integrierte Tabelle dass bestimmt, welche Java-Klassen verwendet werden, um darzustellen, was XML Schema Typen in-gebaut, aber diese angepasst werden kann.

Einer der häufigsten Anwendungsfälle für Anpassung ist die XMLGregorianCalendar mit dem freundlicher Kalender oder Datum zu ersetzen. XMLGregorianCalendar ist so konzipiert, mit XML Schema Datum/Zeit-System 100% kompatibel sein, wie unendliche Präzision in Unter Sekunden und Jahre bieten, aber oft die einfache Bedienung von diese vertraut Java-Klassen gewinnen die präzisen Kompatibilität.

Diese Seite wird Ihnen nicht sagen, wie tatsächlich die Anpassung verdrahten, obwohl, so hat hier einen Blick zu sehen, wie das zu tun:

http://jaxb.java.net/tutorial/section_5_6_1-Overriding-the-Datatype.html#Overriding%20the%20Datatype

+0

Danke, das funktioniert. Ich war neu bei JAXB und wusste nicht, dass du die Bindungen so anpassen kannst. –

+0

Die java.net-Website wurde heruntergefahren und daher funktioniert diese URL nicht mehr. Gibt es eine neue URL für dieses Tutorial? –

Verwandte Themen