Statische JAX-WS-Web-Service-Clients implementieren
Sie können statische Web-Service-Clients auf der Basis der Spezifikation "Web Services for Java™ Platform, Enterprise Edition (Java EE)" und des Programmiermodells "Java API for XML-Based Web Services (JAX-WS)" entwickeln.
Vorbereitende Schritte

Informationen zu diesem Vorgang
- Web-Service-Clients auf der Basis des JAX-WS-Programmiermodells entwickeln
Web-Service-Clients, die auf JAX-WS-Web-Services zugreifen und diese aufrufen können, werden auf der Basis der Spezifikation "Web Services for Java Platform, Enterprise Edition (Java EE)" entwickelt. Der Anwendungsserver unterstützt EJB-Clients, Java EE-Anwendungsclients, JSP-Dateien (JavaServer Pages) und Servlets, die auf dem Programmiermodell JAX-WS basieren. Web-Service-Clients, die auf der Spezifikation JAX-RPC basieren, können JAX-WS-basierte Web-Services aufrufen, wenn die WSDL-Datei (Web Services Description Language) mit Web Services-Interoperability (WS-I) Basic Profile kompiliert wird.
Das Programmiermodell JAX-WS unterstützt die Anwendungsprogrammierschnittstelle für Dispatch-Clients und die Anwendungsprogrammierschnittstelle für dynamische Proxy-Clients. Die Anwendungsprogrammierschnittstelle für Dispatch-Clients ist ein Programmiermodell für dynamische Clients, während Programmiermodell für statische Clients für JAX-WS der dynamische Proxy-Client ist. Die Dispatch- und Dynamic-Proxy-Clients ermöglichen den synchronen und asynchronen Aufruf von JAX-WS-Web-Services.
Der Dynamic-Proxy-Client ruft einen Web-Service auf, der auf einer bereitgestellten Serviceendpunktschnittstelle basiert. Die dynamischen JAX-WS-Proxy-Instanzen nutzen die dynamische Proxy-Funktion in der Basisversion von Java SE Runtime Environment (JRE) 6. Wenn Sie einen statischen Client entwickeln, müssen Sie mit einer WSDL-Datei beginnen.
Die Dispatch-Client-API javax.xml.ws.Dispatch dagegen ist ein am XML-Messaging orientierter Client, der für erfahrene XML-Entwickler bestimmt ist, die die Verwendung von XML-Konstrukten bevorzugen. Die Dispatch-API kann Daten im Modus PAYLOAD oder im Modus MESSAGE senden. Wenn Sie den Modus PAYLOAD verwenden, ist der Dispatch-Client nur für die Bereitstellung des Inhalts der Elements soap:Body verantwortlich, und JAX-WS fügt die Nutzdaten in ein Element soap:Envelope ein. Wenn Sie den Modus MESSAGE verwenden, ist der Dispatch-Client für die Bereitstellung der gesamten SOAP-Rahmenanweisung (Envelope) verantwortlich. Wenn Sie einen dynamischen Client entwickeln, benötigen Sie keine WSDL-Datei.
Wenn Sie Web-Services auf der Basis des Programmiermodells JAX-WS entwickeln möchten, müssen Sie das Clientmodell bestimmen, das den Anforderungen Ihrer Web-Service-Anwendung am Besten entspricht. Wenn der Web-Service-Client den Service auf der Basis von Serviceendpunktschnittstellen über einen dynamischen Proxy aufrufen soll, verwenden Sie die Anwendungsprogrammierschnittstelle für dynamische Proxys, um einen statischen Web-Service-Client zu entwickeln. Nach der Erstellung der Proxys kann die Clientanwendung wie bei einer Standardimplementierung der Serviceendpunktschnittstellen Methoden in diesen Proxys aufrufen. Wenn Sie jedoch direkt mit XML anstatt mit einer Java-Abstraktion arbeiten und die Nachrichtenstruktur oder der Nachrichtennutzlaststruktur verwenden möchten, verwenden Sie die Dispatch-API, um einen dynamischen Web-Service-Client zu entwickeln. Lesen Sie die Informationen zur Implementierung dynamischer JAX-WS-Web-Service-Clients, um zu erfahren, wie dynamische Web-Service-Clients entwickelt werden.
Führen Sie diese Task aus, um einen statischen Web-Service-Client aus einer WSDL-Datei zu entwickeln.
Wenn Sie Web-Services asynchron über einen statischen oder dynamischen JAX-WS-Client aufrufen möchten, müssen Sie festlegen, ob das Callback- oder das Abfragemodell implementiert werden soll. Weitere Informationen zum Implementieren des asynchronen Callback- oder Abfragemodells für Web-Service-Clients finden Sie in der Beschreibung zum asynchronen Aufruf von JAX-WS-Web-Services. Das Programmiermodell JAX-WS für den Service und den Client verwendet Annotationen, um die Informationen, die in der JAX-RPC-Clientbindung angegeben wurden, in anbieterunabhängiger Weise darzustellen.
- Verwaltete und nicht verwaltete JAX-WS-Web-Service-Clients
Der Anwendungsserver unterstützt verwaltete und nicht verwaltete Web-Service-Clients, wenn das Programmiermodell JAX-WS verwendet wird:
- Verwaltete Clients
Web-Services für Java EE-Clients werden durch Java Specification Requirements (JSR) 109 definiert und sind verwaltete Clients, weil sie in einem Java EE-Container ausgeführt werden. Diese Clients werden als EAR-Dateien gepackt und enthalten Komponenten, die als Serviceanforderer agieren. Bei diesen Komponenten handelt es sich um eine Java EE-Clientanwendung, eine Webkomponente, z. B. ein Servlet oder eine JSP-Datei (JavaServer Pages), oder eine Session-EJB. Verwaltete Web-Service-Clients verwenden die JSR-109-APIs und Implementierungsinformationen, um einen Web-Service zu suchen und aufzurufen.
Für die verwalteten Clients können Sie Java Naming and Directory Interface (JNDI) für die Servicesuche verwenden, oder Sie können Annotationen für die Injektion von Instanzen eines JAX-WS-Service oder -Ports verwenden. Lesen Sie die Informationen zur Konfiguration von WS-Security mit Benutzernamenstoken, WS-Security mit digitaler Signatur und WS-Security mit LTPA (Lightweight Third-Party Authentication). Der folgende Code ist ein Beispiel für eine JSR-109-konforme Kontextsuche:
InitialContext ctx = new InitialContext(); FredsBankService service =(FredsBankService)ctx.lookup("java:comp/env/service/FredsBankService"); FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();
Sie können die Annotation "@WebServiceRef" oder "@Resource" verwenden, um verwaltete Clients zu deklarieren. Außerdem wird bei Verwendung dieser Annotationen der von der Annotation angegebene Typ an den JNDI-Namespace gebunden. Wird eine dieser Annotationen in einem Feld oder in einer Methode verwendet, bewirkt dies außerdem die Injektion einer JAX-WS-Service- oder -Portinstanz. Sie können diese Annotationen verwenden, anstatt service-ref-Einträge im Clientimplementierungsdeskriptor zu deklarieren. Sie können aber auch weiterhin den Clientimplementierungsdeskriptor verwenden, um verwaltete JAX-WS-Clients ähnlich wie verwaltete JAX-RPC-Clients zu deklarieren. Sie können den Implementierungsdeskriptor auch verwenden, um die in den Annotationen "@WebServiceRef" und "@Resource" angegebenen Informationen zu überschreiben und zu erweitern. #Verwenden Sie die Annotation "@WebServiceRef", um die Bindung bzw. Injektion einer JAX-WS-Service- oder -Portinstanz vorzunehmen. Die Annotation "@Resource" kann nur für die Bindung und Injektion einer JAX-WS-Serviceinstanz verwendet werden. Die Verwendung dieser Annotationen zum Deklarieren verwalteter JAX-WS-Clients wird nur in bestimmten Klassentypen unterstützt. Zu diesen Klassentypen gehören JAX-WS-Endpunktimplementierungsklassen, JAX-WS-Handlerklassen, Enterprise-Bean-Klassen und Servletklassen.
Im folgenden Beispiel wird die Annotation "@WebServiceRef" verwendet, um eine Instanz von FredsBank abzurufen:
Das Feld fredsBank muss nicht mehr initialisiert werden, da es sich jetzt in der Klasse befindet. Sie können dieses Feld direkt verwenden:@WebServiceRef(name=”service/FredsBankPort”, value=FredsBankService.class) FredsBank fredsBank;
long balance = fredsBank.getBalance();
Sie können die Annotation "@WebServiceRef" auch verwenden, um Instanzen von JAX-WS-Serviceklassen abzurufen. Beispiel:@WebServiceRef(name=”service/FredsBankService”) FredsBankService service;
Das Feld service muss nicht mehr initialisiert werden, da es sich jetzt in der Klasse befindet. Sie können dieses Feld direkt verwenden:FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();
Neben der Annotation "@WebServiceRef" kann auch die Annotation "@Resource" verwendet werden, um eine Instanz von JAX-WS-Serviceklassen abzurufen. Beispiel:@Resource(name=”service/FredsBankService”, type=FredsBankService.class) FredsBankService service;
Wie bei der Annotation "@WebServiceRef" können Sie das Feld service jetzt ohne Instanziierung verwenden. Beispiel:FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();
Sie können die Annotation "@Resource" oder "@WebServiceRef" in einer Klasse verwenden. In diesem Fall muss JNDI für die Suche des JAX-WS-Service bzw. -Ports verwendet werden. Beispiel:@WebServiceRef(name=”service/FredsBankService”, type=FredsBankService”) public class J2EEClientExample { … … public static void main(String[] args) { … … InitialContext ctx = new InitialContext(); FredsBankService service =(FredsBankService)ctx.lookup("java:comp/env/service/FredsBankService"); FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance(); } … }
Weitere Informationen zur Verwendung der Annotationen "@WebServiceRef" und "@Resource" finden Sie in den Spezifikationen von JSR-109, JSR-224, JSR-250 und Java Platform Enterprise Edition 5 (Java EE 5).
Wie bereits erwähnt, müssen Sie bei der Verwendung der Annotationen oder JNDI für das Abrufen von JAX-WS-Service- oder -Portinstanzen die zurückgegebenen Objekte nicht instanziieren. Wenn Sie die Objekte instanziieren, erhalten Sie eine nicht verwaltete Clientinstanz. Im folgenden Beispiel wird eine falsche Verwendung gezeigt:@WebServiceRef(name=”service/FredsBankService”) FredsBankService service; service = new FredsBankService(); // Client ist nicht verwaltet.
Für verwaltete JAX-WS-Clients, die mit der Annotation "@WebServiceRef" oder "@Resource" deklariert werden, und für Clients, die mit service-ref-Einträgen im Clientimplementierungsdeskriptor deklariert werden, können Sie in der Administrationskonsole den vom Client verwendeten Endpunkt-URL angeben. Dieser angegebene URL überschreibt den Endpunkt-URL im WSDL-Dokument, das vom Client verwendet wird. Weitere Informationen zum Angaben dieses Endpunkt-URL finden Sie in der Dokumentation zum Konfigurieren von Web-Service-Clientbindungen.
- Nicht verwaltete Clients
Clients des Typs Java Platform, Standard Edition (Java SE 6), die die JAX-WS-Laufzeitumgebung verwenden, um Web-Services aufzurufen, und nicht in einem Java EE-Container ausgeführt werden, werden als nicht verwaltete Clients bezeichnet. Ein nicht verwalteter Web-Service-Client ist ein eigenständiger Java-Client, der eine WSDL-Datei direkt überprüfen kann und die Aufrufe an den Web-Service über JAX-WS-Anwendungsprogrammierschnittstellen formuliert. Diese Clients werden als JAR-Dateien gepackt, die keine Implementierungsinformationen enthalten.
- Verwaltete Clients
Ab WebSphere Application Server Version 7.0 werden Java EE 5-Anwendungsmodule (Webanwendungsmodule der Version 2.5 oder höher oder EJB-Module der Version 3.0 oder höher) nach Annotationen durchsucht, um JAX-WS-Services und -Clients zu identifizieren. Anwendungsmodule vor Java EE 5 (Webanwendungsmodule der Version 2.4 oder früher oder EJB-Module der Version 2.1 oder früher) werden aus Leistungsgründen standardmäßig nicht nach JAX-WS-Annotationen durchsucht. In Feature Pack for Web Services Version 6.1 werden die Webanwendungsmodule einer Version vor Java EE 5 standardmäßig gescannt, um die JAX-WS-Services zu identifizieren und die Webanwendungsmodule und EJB-Module einer Version vor Java EE 5 während der Anwendungsinstallation nach Service-Clients zu scannen. Da Module vor Java EE 5 ab WebSphere Application Server Version 7.0 während der Anwendungsinstallation bzw. des Serverstarts standardmäßig nicht nach Annotationen durchsucht werden, müssen Sie zur Gewährleistung der Abwärtskompatibilität mit dem Feature-Pack früherer Releases entweder die Eigenschaft "UseWSFEP61ScanPolicy" in der Manifest-Datei "META-INF/MANIFEST.MF" einer WAR-Datei (Webarchiv) oder eines EJB-Moduls konfigurieren oder die angepasste JVM-Eigenschaft (Java Virtual Machine) "com.ibm.websphere.webservices.UseWSFEP61ScanPolicy" auf den Servern definieren, damit die Module während der Anwendungsinstallation bzw. des Serverstarts durchsucht werden. Wenn Sie mehr über das Durchsuchen von Modulen nach Annotationen erfahren möchten, lesen Sie die Informationen zu JAX-WS-Annotationen.
Vorgehensweise
Ergebnisse
Sie haben eine Web-Service-Clientanwendung erstellt und getestet.
Nächste Schritte
Wenn Sie einen Web-Service-Anwendungsclient entwickelt haben und der Client statisch gebunden ist, verwendet die Implementierung den Serviceendpunkt, der in der WSDL-Datei angegeben ist, die Sie während der Entwicklung verwendet haben. Während oder nach der Installation der Web-Service-Anwendung können Sie den Serviceendpunkt ändern. Für verwaltete Clients kann der Endpunkt über die Administrationskonsole oder mit dem Scripting-Tool wsadmin geändert werden. Für nicht verwaltete JAX-WS-Web-Service-Clients können Sie den Endpunkt über die Clientanwendung ändern.
Sie können Ihre Web-Services weiter anpassen, indem Sie Erweiterungen für Ihren Web-Service-Client implementieren. Einige Beispiele für solche Erweiterungen sind das Senden und Empfangen von Werten in SOAP-Headern oder das Senden und Empfangen von HTTP- oder JMS-Transportheadern. Weitere Informationen zu diesen Erweiterungen finden Sie in der Dokumentation zur Implementierung von Erweiterungen in Web-Service-Clients.