Blog

Sie befinden sich hier: Blog

JAXB Customizing - XMLGregorianCalendar

Freitag, 10. Juni 2011 @ 09:23 geschrieben von Manfred Heiland

Die Verwendung eines XMLGregorianCalendar bei der Generierung von Webservice Client Klassen ärgerte mich immer wieder. Im SourceCode sieht man immer wieder unschöne Konvertierungen nach java.util.GregorianCalendar oder java.util.Date

Dies habe ich zum Anlaß genommen um mich mit JAXB Customizing zu beschäftigen. Die Client-Klassen wurden mit Maven und dem Apache CXF cxf-codegen-plugin erstellt.

Customizations können folgendermaßen an den JAXB Binding Compiler übergeben werden: xjc -b <file> . Für diese Beschreibung werde ich den Filenamen jaxb-bindings.xml verwenden.

Um den xmlType xsd:dateTime auf eine andere Java Klasse zu mappen, ist im jaxb-bindings.xml folgendes anzugeben.

<jaxb:bindings version="2.0"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">

  <jaxb:globalBindings>
    <jaxb:javaType name="java.util.Calendar" xmlType="xsd:dateTime"
      parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
      printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>  
  </jaxb:globalBindings>

</jaxb:bindings>
 
Nach Neugenerierung der Klassen wird jede Property des xmlTypes xsd:dateTime eine korrespondierende Java Property des Types java.util.Calendar (momentan dann immer GregorianCalendar).
 
Hier ist auch noch ein Ausschnitt der pom.xml
 
<plugin>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-codegen-plugin</artifactId>
  <version>2.4.0</version>
  <executions>
    <execution>
      <id>generate-sources</id>
      <phase>generate-sources</phase>
      <configuration>
        <wsdlOptions>
          <wsdlOption>
            <wsdl>example.wsdl</wsdl>
            <bindingFiles>
              <bindingFile>jaxb-binding.xml</bindingFile>
            </bindingFiles> 
          </wsdlOption>
        </wsdlOptions>
      </configuration>
      <goals>
        <goal>wsdl2java</goal>
      </goals>
    </execution>
  </executions>
</plugin>
 
Über diese Konfiguration für den xjc-Compiler und die eigene Implementierung von parseDateTime und printDateTime ist es auch möglich bspw. JodaTime- Klassen in den generierten Webservice Client Stubs zu verwenden.
 
 

 

zur Übersicht

Willkommen auf dem avono Blog

Hier auf dem avono Blog finden Sie in regelmäßigen Abständen sowohl technische Neuigkeiten aus unserer Partnerproduktwelt als auch nützliche Entwicklertipps.
Und jetzt kommt der obligatorische Disclaimer: Die Ausführungen der Blogeinträge spiegeln nicht die Meinung der avono AG sondern nur die Sicht der einzelnen Autoren wider.

Kategorien


Suche