Sie sind auf Seite 1von 3

JAXB und das Generieren von Webservices in Java

25. Oktober 2011 Jonas Freiknecht www.jofre.de

1 Einleitung
Hufig trifft man beim Einsatz von Technologien auf den Punkt wo sich Features als Blockaden zu erkennen geben da sie nicht mit den Fhigkeiten und Eigenheiten der anderen Technologien harmonieren. So kann es auch zwischen JAXB (Java Architecture for XML Binding) und JAX-WS oder JAX-RPC Webservices zu Komplikationen kommen. JAXB bietet einen einfachen Weg um ber (Un-)Marshalling XML-Dateien an Javaklassen zu binden. So knnen wir beim Marshalling aus einer Javaklasse ein XSD-Schema generieren lassen und beim Unmarshalling aus einem XSD-Schema eine Javaklasse. Ebenso knnen wir dann aus XML-Dateien Instanzen dieser neuen Klassen erzeugen. JAXB bietet also somit eine gute Schnittstelle zwischen Java und XML. Es ist seit Java EE 5 in selbiger Spezifikation enthalten. JAX-WS und JAX-RPC sind zwei gngige Webservicestandards. Diese werden hufig aus existierenden Javaklassen per Klick in einer IDE generiert und bieten dann ber eine WSDL-Datei (Webservice Description Language) eine Schnittstelle um Methoden dieser Klasse von auen aufzurufen.

2 Die Herausforderung
Wenn man nun eine Javaklasse schreibt und diese mit JAXB-Annotationen versieht um daraus leicht XML-Dateien erzeugen zu knnen, ergibt sich folgendes Problem. Generiert man nmlich einen Webservice aus dieser Klasse, so wird dieser nicht mit den herkmmlichen Datentypen wie String, Integer und Boolean versehen sondern mit JAXBElementen wie in Abbildung 1 zu sehen.

Abbildung 1: JAXBElemente in den generierten Klassen Diese Elemente lassen sich nur umstndlich benutzen wenn man dann aus der WSDL-Datei einen Webservice-Client generieren und nutzen mchte.

3 Die Lsung - Das JAXB-Binding File


Die Lsung ist ein sogenanntes JAXB-Binding File das wir beim Generieren unseres Webservices bergeben. Dazu setzen wir im Dialog zum Generieren des Services das Hkchen wie es in Abbildung 2 zu sehen ist.

Abbildung 2: Generieren des Webservices mit Binding-File Wir geben dann im folgenden Dialog eine Datei an die folgenden Inhalt aufweist:

<jxb:bindings version="2.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <jxb:globalBindings typesafeEnumMemberName="generateError" generateElementProperty="false" /> </jxb:bindings>

Abbildung 3: Angeben des Binding-Files Wenn wir nun unseren Webservice generieren sieht die sich ergebende Klasse so aus:

Abbildung 4: Generierter Webservice ohne JAXBElement Wir haben durch unser Binding-File die JAXBElemente eleminiert und knnen und auf den uns bekannten Datentypen arbeiten.