Teil 2: Axis2 und JAX-WS

Happy JAX-WS-ing!

Marc Teufel und Dapeng Wang

JAX-WS liegt als Nachfolger von JAX-RPC bereits in der Version 2.1 vor und sieht ein standardisiertes API zur Entwicklung von Web Service-Anwendungen vor. Neben der offiziellen JAX-WS-Implementierung von Sun existieren noch Umsetzungen für JBoss, Apache CXF und Apache Axis2. Im vorliegenden zweiten Teil der Axis2-Serie wird dargestellt, wie JAX-WS in Axis2 integriert ist und wie man damit entwickelt.

Axis2-Serie:

Teil 1: Bleibt alles anders?

Teil 2: Happy JAX-WS-ing!

Teil 3: Axis2 und Spring

Nachdem man erkannt hat, dass die Entwicklung von Web Services weit mehr als einfaches Remote Procedure Call (RPC) ist, war die Umbenennung des vormals „JAX-RPC“ genannten Standards in JAX-WS nur die logische Konsequenz. Aber bei einer einfachen Umbenennung ist es nicht geblieben, denn in einer ganzen Reihe von Punkten hat man den JAX-RPC-Nachfolger entschlackt und an vielen Stellen die Entwicklung von Web Services deutlich vereinfacht. Weder müssen jetzt noch Interfaces implementiert werden, noch sind irgendwelche Datei-Deskriptoren zur Konfiguration von Web Services notwendig.

Alles dreht sich ums POJO

Das POJO steht jetzt im Mittelpunkt der JAX-WS-Bemühungen. Es muss für die Konfiguration nur noch mit einer mehr oder weniger großen Prise Annotationen gewürzt werden und das war es dann. Bei JAX-RPC war noch ein eigenes API vorhanden, das sich um das Databinding, also das Marshalling von XML nach Java und umgekehrt kümmerte (früher sprach man auch von Serialisierung und Deserialisierung). JAX-WS delegiert diese Aufgabe nun vollständig an JAXB (Java API for XML Data Binding). JAX-WS und JAXB sind fester Bestandteil von Java EE 5 und der Java SE 6. Die neue JAX-WS-API unterstützt natürlich die wichtigsten Standards: SOAP 1.1 und 1.2, WSDL 1.1, Basic Profile 1.0 und 1.1, MTOM (Web Services mit Anhängen). Außerdem stellt JAX-WS eine solide Grundlage für die zahlreichen Web Service-Eweiterungen (Stichwort WS*) dar. So kam bei der aktuellen JAX-WS Version 2.1 neben einem API für asynchrone Web Services unter anderem auch die Unterstützung von WS-Adressing hinzu.

JAX-WS unterstützt sowohl den „Contract-First“- als auch den „Code First“-Ansatz bei der Web Service-Entwicklung. Dass sämtliche Web Service-spezifischen Metadaten nun als Annotationen im Java-Source hinterlegt werden, statt als XML in einem externen Deployment-Deskriptor (wie services.xml), ist ein klarer Vorteil für das „Code First“-Verfahren. Grund hierfür ist, dass viele Annotationen nach dem „Convention over Configuration“-Prinzip auch weggelassen werden können.

JAX-WS mit Axis2

Zum Zeitpunkt der Entwicklung von Axis2 befand sich der Standardisierungprozess von Java Web Services allgemein in einem undefinierten, unklaren Zustand. Die Schwächen von JAX-RPC waren zwar bekannt, aber JAX-WS noch nicht geboren. Deshalb hat man Axis2 zunächst komplett unabhängig von beiden Standards entwickelt. Die Unterstützung des JAX-WS-Standards stand erst nach der Axis2 Version 1.3 auf der Anforderungsliste, genau ab dem Zeitpunkt, an dem eine stabile Version des JAX-WS-Standards vorlag. Man konnte JAX-WS also gar nicht „from scratch“ zur Verfügung stellen, sondern hatte die Aufgabe, die Architektur von Anfang an so zu gestalten, dass eine spätere Integration von JAX-WS einfach möglich war. Die Hauptaufgabe der Integration besteht darin, die client- und serverseitigen APIs und SPIs von JAX-WS auf die bestehenden APIs in Axis2 abzubilden. Axis2 in seiner aktuellen Fassung 1.4.1 unterstützt JAX-WS in der Version 2.0 (nicht 2.1) weitgehend. Da JAX-WS für das Databinding JAXB voraussetzt, muss Axis2 dieses Databinding selbstverständlich ebenfalls unterstützen und genau an dieser Stelle klemmt es bei Axis2 derzeit noch. Man hat JAXB 2.0 (auch hier noch kein 2.1) zwar weitgehend integriert, die JAXB-Unterstützung von Axis2 liegt jedoch immer noch in einem sogenannten „experimental“-Status vor. Die Versionen 2.1 von JAX-WS und JAXB peilen die Axis2-Entwickler aber schon für das anstehende 1.5-er Release an. Im Folgenden wird Schritt für Schritt erklärt, wie man einen Web Service mit JAX-WS und Axis2 gemäß dem „Code First“-Ansatz entwickeln kann.

Geschrieben von
Marc Teufel und Dapeng Wang
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.