Mittwoch, 10. Dezember 2008

JAX-WS mit Axis2

Die JAX-WS Spezifikation ist mittlerweile der Standard für die Web Services Entwicklungen mit Java geworden.
Dazu beigetragen haben die JAX-WS Referenzimplementierung und Apache CXF, welches ebenfalls JAX-WS in der Version 2.1 unterstützt. Seit kurzem bietet auch das Axis 2 Projekt Unterstützung für JAX-WS. Um zu entscheiden, ob wir für ein Projekt Axis2 mit JAX-WS einsetzen können, haben wir der JAX-WS Umsetzung von Axis2 in der Version 1.4.1 auf den Zahn gefühlt. Für den Einstieg befindet sich auf der Axis2 Homepage ein JAX-WS Guide, der JAX-WS und JAXB sowie die Entwicklung von Services beschreibt. Die Axis2 Distribution enthält auch einige Beispiele zu JAX-WS. Allerdings beschränken sich die Beispiele auf einfache Operationen, die nur primitive Datentypen und Strings für die Parameter verwenden. Die Komplexität der Beispiele entspricht daher der Signatur der echo Operation:

public String echo (String msg)

Wird in der Signatur ein komplexer Typ in Form eines Beans verwendet so lässt sich der Service bauen und installieren. Bei der Ausführung wirft Axis allerdings eine Exception, die einen darüber informiert, das Axis2 keinen JAXB Kontext anlegen konnte. Der Bug ist bekannt und steht im Bugtracking System JiRA. Dort findet sich auch ein Patch, der sich allerdings nicht mit der Axis2 1.4.1 Version kombinieren lässt. Es besteht also Hoffnung, dass es bald eine Axis2 1.4.2 Version geben wird, die mit komplexen Typen als Parameter funktioniert.
In Axis2 fehlen Werkzeuge, um aus Code oder WSDL „portable Artefakte“ zu erzeugen. Portable Artefakte sind Java Klassen und Beans, die JAX-WS, JWS und JAXB Annotationen enthalten. Diese Klassen werden von der Runtime für das Serialisieren und Deserialisieren von Nachrichten benötigt. Wer mit Axis2 JAX-WS einsetzen möchte muss daher auf Tools einer anderen Implementierung zugreifen. Man kann beispielsweise die Tools wsgen und wsimport der JAX-WS Referenzimplementierung verwenden. In Java 6 ist diese bereits enthalten, d. h. wer Axis2 in Verbindung mit den Java 6 SDK einsetzt, benötigt nichts weiter. Es stellt sich allerdings die Frage, warum man nicht gleich alles mit JAX-WS Referenzimplementierung macht, wenn man diese auch für Axis2 zumindest zur Compile-Zeit benötigt. Zumal die Referenzimplementierung auch mit komplexen Datentypen zurecht kommt und JAX-WS 2.1 unterstützt. Axis2 unterstützt in der Version 1.4.1 nur einen Bruchteil von JAX-WS 2.0 und JAXB 2.0. Auf der Webseite wird die JAXB Umsetzung von Axis2 als experimentell bezeichnet. Die JAX-WS Umsetzung in Axis2 ist in der Version 1.4.1 daher leider nur für sehr einfache Web Services mit Einschränkungen einsetzbar.
Es besteht allerdings Hoffnung, das Axis2 in einer kommenden Version eine brauchbare JAX-WS bieten wird. Dann steht den Entwicklern eine weitere interessante Alternative für die Entwicklung von Web Services mit Java Standards zur Verfügung.

Keine Kommentare:

Kommentar veröffentlichen