JAX-WS-Clientprogrammiermodell
Das Programmiermodell für JAX-WS-Web-Service-Clients (Java™ API for XML-Based Web Services) unterstützt die API für Dispatch-Clients und die API für dynamische Proxy-Clients. Die API für Dispatch-Clients ist ein dynamisches Clientprogrammiermodell, während die API für dynamische Proxy-Clients das statische Clientprogrammiermodell für JAX-WS ist. Die Dispatch- und dynamischen Proxy-Clients unterstützen den synchronen und den asynchronen Aufruf von JAX-WS-Web-Services.
- Dispatch-Client: Verwenden Sie diesen Client, wenn Sie auf XML-Nachrichtenebene oder ohne generierte Artefakte auf JAX-WS-Ebene arbeiten möchten.
- Dynamischer Proxy-Client: Verwenden Sie diesen Client, wenn Sie einen Web-Service auf der Basis einer Serviceendpunktschnittstelle aufrufen möchten.
Dispatch-Client
XML-basierte Web-Services verwenden XML-Nachrichten für die Kommunikation zwischen Web-Services und Web-Service-Clients. Die JAX-WS-APIs stellen problemorientierte Methoden bereit, die die Details der Konvertierung von Java-Methodenaufrufen in entsprechende XML-Nachrichten und umgekehrt vereinfachen und verdecken. In einigen Fällen kann es empfehlenswert sein, auf XML-Nachrichtenebene zu arbeiten. Die Unterstützung für den Aufruf von Services auf XML-Nachrichtenebene wird von der API für Dispatch-Clients bereitgestellt. Die API für Dispatch-Clients, javax.xml.ws.Dispatch, ist eine Programmierschnittstelle für dynamische JAX-WS-Clients. Wenn Sie einen Dispatch-Client schreiben möchten, müssen Sie Erfahrung mit den Dispatch-Client-APIs, den unterstützten Objekttypen und den Nachrichtendarstellungen für die zugehörige WSDL-Datei (Web Services Description Language) haben. Der Dispatch-Client kann Daten im Modus MESSAGE oder im Modus PAYLOAD senden. Wenn Sie den Modus javax.xml.ws.Service.Mode.MESSAGE verwenden, ist der Dispatch-Client für die Bereitstellung der gesamten SOAP-Rahmenanweisung (Envelope), einschließlich der Elemente <soap:Envelope>, <soap:Header> und <soap:Body>, verantwortlich. Wenn Sie den Modus javax.xml.ws.Service.Mode.PAYLOAD verwenden, ist der Dispatch-Client nur für die Bereitstellung des Inhalts des Elements <soap:Body> verantwortlich, und JAX-WS fügt die Nutzdaten in das Element <soap:Envelope> ein.
- javax.xml.transform.Source: Verwenden Sie Source-Objekte, um Clients die direkte Verwendung der XML-APIs zu ermöglichen. Sie können Source-Objekte mit SOAP- oder HTTP-Bindungen verwenden.
- JAXB-Objekte: Verwenden Sie JAXB-Objekte, sodass Clients die aus einem XML-Schema generierten JAXB-Objekte zum Erstellen und Bearbeiten von XML mit JAX-WS-Anwendungen verwenden können. JAXB-Objekte können nur für SOAP- oder HTTP-Bindungen verwendet werden.
- javax.xml.soap.SOAPMessage: Verwenden Sie SOAPMessage-Objekte, damit Clients mit SOAP-Nachrichten arbeiten können können. SOAPMessage-Objekte können nur für SOAP-Bindungen verwendet werden.
- javax.activation.DataSource: Verwenden Sie DataSource-Objekte, damit Clients mit MIME-Nachrichten (Multipurpose Internet Mail Extension) arbeiten können. Verwenden Sie DataSource-Objekte nur für HTTP-Bindungen.
Dispatch<Source> dispatch = … create a Dispatch<Source>
Source request = … create a Source object
Source response = dispatch.invoke(request);
Der Wert des Parameters "Dispatch"
bestimmt den Rückgabetyp der Methode invoke().- Synchroner Aufruf von Anforderungen und Antworten mit der Methode invoke
- Asynchroner Aufruf von Anforderungen und Antworten unter Verwendung der Methode invokeAsync mit einem Callback- oder Abfrageobjekt
- Unidirektionaler Aufruf mit invokeOneWay-Methoden
Weitere Informationen zur Verwendung des Dispatch-Clients finden Sie in Kapitel 4, Abschnitt 3 der Spezifikation JAX-WS.
Dynamischer Proxy-Client
Das JAX-WS-Programmiermodell für statische Clients wird als dynamischer Proxy-Client bezeichnet. Der dynamische Proxy-Client ruft einen Web-Service auf der Basis einer anzugebenden Serviceendpunktschnittstelle auf. Der dynamische Proxy-Client gleicht dem Stub-Client im Programmiermodell Java API for XML-based RPC (JAX-RPC). Obwohl der dynamische JAX-WS-Proxy-Client und der JAX-RPC-Stub-Client beide auf der Serviceendpunktschnittstelle basieren, die aus einer WSDL-Datei generiert wird, gibt es einen großen Unterschied zwischen den beiden Clients. Der dynamische Proxy-Client wird dynamisch zur Laufzeit über die Java-5-Funktionalität "Dynamic Proxy" generiert, während der JAX-RPC-basierte Stub-Client eine nicht portierbare Java-Datei ist, die von Tools generiert wird. Anders als die JAX-RPC-Stub-Clients müssen Sie beim dynamischen Proxy-Client vor dem Ausführen des Clients in einem Anwendungsserver für einen anderen Anbieter keinen Stub neu generieren, weil die generierte Schnittstelle die spezifischen Anbieterinformationen nicht benötigt.
Die dynamischen Proxy-Instanzen erweitern die Klasse java.lang.reflect.Proxy und nutzt die Funktion "Dynamic Proxy" des Basisprodukts Java SE Runtime Environment (JRE) Version 6. Die Clientanwendung kann daraufhin eine Schnittstelle für das Erstellen einer Proxy-Instanz bereitstellen, während die Laufzeitumgebung für das dynamische Erstellen eines Java-Objekts verantwortlich ist, das die Serviceendpunktschnittstelle darstellt.
- Synchroner Aufruf von Anforderungen und Antworten mit der Methode invoke
- Asynchroner Aufruf von Anforderungen und Antworten unter Verwendung der Methode invokeAsync mit einem Callback- oder Abfrageobjekt
- Unidirektionaler Aufruf mit invokeOneWay-Methoden
Weitere Informationen zur Verwendung dynamischer Proxy-Clients finden Sie in Kapitel 4 der Spezifikation JAX-WS.