Jakarta XML Web Services
Jakarta XML Web Services | |
---|---|
Basisdaten
| |
Betriebssystem | Cross-platform |
Kategorie | Application framework |
Die Jakarta XML Web Services (JAX-WS; früher Java API for XML Web Services) ist eine Jakarta EE-API zum Erstellen von Webservices. JAX-WS wurde in der Java Platform Enterprise Edition 5 eingeführt und ist ab der Version 1.6 auch Teil der Jakarta EE.[1]
JAX-WS baut auf JAX-RPC auf, ist Teil von Web Services Interoperability Technology und somit auch Teil des Project Metro. Wie andere Jakarta-EE-APIs benutzt auch JAX-WS Annotationen, um die Entwicklung und das Deployment von Webservice-Clients und Service-Endpunkten zu vereinfachen.
Funktionsweise von JAX-WS
Client und Endpunkt kommunizieren über SOAP-Nachrichten. JAX-WS benutzt SAAJ, um SOAP-Nachrichten zu erzeugen. JAX-WS ist protokoll- und transportunabhängig. Standardmäßig wird allerdings SOAP 1.1 und HTTP verwendet.
Um die Daten richtig verarbeiten zu können, müssen die XML-Datentypen in Java-konforme Datentypen umgewandelt werden. Das wird von JAX-WS an JAXB (Jakarta XML Binding) delegiert. So kann die XML-Verarbeitung im Wesentlichen dem Programmierer verborgen bleiben.
Erstellen von Webservice-Endpunkten und -Clients
Serverseite
Es gibt zwei verschiedene Wege, Service-Endpunkte aufzubauen: Code First (Bottom Up) über POJOs und Contract First (Top Down) über WSDL.
Start mit POJOs (Bottom Up)
Im Gegensatz zur vorhergehenden Entwicklungsweise (JAX-RPC), bei der zum Erstellen eines Webservice-Endpunktes eine Schnittstelle definiert und eine Klasse geschrieben wird, welche die Schnittstelle implementiert, können bei JAX-WS einfach nur POJOs, die bereits in einer Anwendung vorliegen, verwendet werden. Um dies zu ermöglichen, werden diese durch Java-Annotations zu einem Webservice erweitert. Auch die Deployment-Deskriptoren werden durch die Annotations überflüssig.
Start mit WSDL (Top Down)
Klassen werden aus der WSDL-Beschreibung des Serviceinterfaces generiert und vom Nutzer ergänzt.
Clientseite
Auf der Clientseite muss ein lokales Proxy-Objekt erzeugt werden, welches ebenfalls die Schnittstelle des Webservices implementiert (generiert aus WSDL). Bei JAX-WS holt sich der Client seinen Proxy nicht aus einer Factory. Er konstruiert ein ServiceObjekt mit dem new-Operator, ruft die getServicePort-Methode auf, um ein Proxy zu bekommen, und führt seine Methodenaufrufe auf dem Proxy-Objekt aus, als wäre der Webservice lokal verfügbar. Die JAX-WS-Laufzeitumgebung schickt die Aufrufe von dem Proxy-Objekt an den Webservice weiter, welcher dann die Operationen durchführt und das Ergebnis an den Client zurückschickt.
Unterstützte WS-*-Standards
Die folgenden WS-*-Standards sind in der Referenzimplementierung von JAX-WS umgesetzt:[2][3]
- WS-Addressing
- WS-AtomicTransaction
- WS-Coordination
- WS-MetadataExchange
- WS-Reliable Messaging
- WS-Policy
- WS-PolicyAttachment
- WS-SecureConversation
- WS-SecurityPolicy
- WS-Security
- WS-Trust
- WS-MakeConnection
Zurzeit wird nur WSDL 1.1 unterstützt, nicht WSDL 2.0.
Implementierungen
- Metro Project in GlassFish
- Apache CXF
- Apache Axis2
- JBossWS in WildFly
- IBM WebSphere Jax-Ws in WebSphere
- Oracle Weblogic
Weblinks
- Offizielle Webseite
- Java Specification Request 224: Java API for XML-Based Web Services (JAX-WS) 2.0
- Sun Web Services (englisch)
- JAX-WS Tutorial von Oracle
- JAX-WS Tutorial von mkyong