Beispiel: Handlerklassen für Web-Service-Implementierungsdeskriptoren konfigurieren
Dieses Szenario zeigt, wie einer Beispielanwendung mit dem Namen WebServicesSamples.ear einfache Handlerklassen für Client und Server hinzugefügt werden. Die Handlerklassen zeigen Nachrichten an, wenn eine zu bearbeitende Anforderung oder Antwort empfangen wird.
Das folgende Beispiel zeigt den Code für die Client-Handlerklasse:
package samples;
public class ClientHandler implements javax.xml.rpc.handler.Handler {
public ClientHandler() { }
public boolean handleRequest(javax.xml.rpc.handler.MessageContext context) {
System.out.println("ClientHandler: In handleRequest");
return true; }
public boolean handleResponse(javax.xml.rpc.handler.MessageContext context) {
System.out.println("ClientHandler: In handleResponse");
return true; }
public boolean handleFault(javax.xml.rpc.handler.MessageContext context) {
System.out.println("ClientHandler: In handleFault");
return true; }
public void init(javax.xml.rpc.handler.HandlerInfo config) { }
public void destroy() { }
public javax.xml.namespace.QName[] getHeaders() {
return null; }
}
Das folgende Beispiel zeigt den Code für die Server-Handler-Klasse:
package sample;
public class ServerHandler implements javax.xml.rpc.handler.Handler {
public ServerHandler() { }
public boolean handleRequest(javax.xml.rpc.handler.MessageContext context) {
System.out.println("ServerHandler: In handleRequest");
return true; }
public boolean handleResponse(javax.xml.rpc.handler.MessageContext context) {
System.out.println("ServerHandler: In handleResponse");
return true; }
public boolean handleFault(javax.xml.rpc.handler.MessageContext context) {
System.out.println("ServerHandler: In handleFault");
return true; }
public void init(javax.xml.rpc.handler.HandlerInfo config) { }
public void destroy() { }
public javax.xml.namespace.QName[] getHeaders() {
return null; }
}
- Kompilieren Sie diese Handlerklassen mit dem folgenden Befehl:
%JAVA_HOME%\bin\java -extdirs %WAS_EXT_DIRS% ClientHandler.java ServerHandler.java
$JAVA_HOME/bin/java -extdirs $WAS_EXT_DIRS ClientHandler.java ServerHandler.java
- Öffnen Sie ein Assembliertool, und importieren Sie die zwei EAR-Beispieldateien:
...\installableApps\WebServicesSamples.ear
.../installableApps/WebServicesSamples.ear
...\installableApps\ApplicationClients.ear
.../installableApps/ApplicationClients.ear
- Importieren Sie die kompilierten Handlerklassen in die Projekte für die Beispielmodule:
- Importieren Sie sample.ClientHandler in das Verzeichnis appClientModule des Projekts AddressBookClient.
- Importieren Sie sample.ServerHandler in das Verzeichnis ejbModule des Projekts AddressBookW2JE.
- Clientimplementierungsdeskriptor
für die Handlerklassen konfigurieren.
Dieser Artikel beschreibt, wie Sie den Clientimplementierungsdeskriptor für eigene Handlerklassen konfigurieren.
- Implementierungsdeskriptor webservices.xml
für Handlerklassen konfigurieren.
Dieser Artikel beschreibt, wie Sie den Implementierungsdeskriptor webservices.xml für eigene Handlerklassen konfigurieren.
- Speichern Sie Ihre Änderungen und exportieren Sie die EAR-Dateien.
- Deinstallieren Sie die Anwendung WebServicesSamples.ear in Ihrem Server, wenn diese bereits installiert ist.
- Installieren Sie die neue Anwendung WebServicesSamples.ear.
- Starten Sie den Server.
- Führen Sie den Client aus:
launchClient ApplicationClients.ear -CCjar=AddressBookClient.jar
Wenn der Client ausgeführt wird, gleicht die Konsolausgabe dem folgenden Beispiel. Die Nachrichten der Handler sind in Fettschrift hervorgehoben.
IBM WebSphere Application Server J2EE Application Client Tool Copyright IBM Corp., 1997-2003 WSCL0012I: Die Befehlszeilenparameter werden verarbeitet. WSCL0013I: Die Umgebung des J2EE-Anwendungsclients wird initialisiert. WSCL0035I: Die Initialisierung der Umgebung des J2EE-Anwendungsclients ist abgeschlossen. WSCL0014I: Der Anwendungsclient com.ibm.websphere.samples.webservices.addr.AddressBookClient wird aufgerufen. >> Querying address for 'Purdue Boilermaker' using port AddressBookW2JE ClientHandler: In handleRequest ClientHandler: In handleResponse >> Response is: 1 University Drive West Lafayette, IN 47907 Phone: (765) 555-4900 >> Querying address for 'Purdue Boilermaker' using port AddressBookJ2WE ClientHandler: In handleRequest ClientHandler: In handleResponse >> Response is: 2 University Drive West Lafayette, IN 47907 Phone: (765) 555-4900 >> Querying address for 'Purdue Boilermaker' using port AddressBookJ2WB ClientHandler: In handleRequest ClientHandler: In handleResponse >> Response is: 3 University Drive West Lafayette, IN 47907 Phone: (765) 555-4900 >> Querying address for 'Purdue Boilermaker' using port AddressBookW2JB ClientHandler: In handleRequest ClientHandler: In handleResponse >> Response is: 4 University Drive West Lafayette, IN 47907 Phone: (765) 555-4900
Beim Client wird die Handlerklasse für jede Servicereferenz und nicht für jeden Port konfiguriert. Das Beispiel AddressBook hat vier Ports, aber nur eine Servicereferenz. Deshalb bearbeitet der ClientHandler Anforderungen und Antworten an allen Ports.
Wenn Sie das Serverprotokoll untersuchen, werden Sie Daten wie die folgenden finden:
[9/24/03 16:39:22:661 CDT] 4deec1c6 WebGroup I SRVE0180I:
[HTTP router for AddressBookW2JE.jar] [/AddressBookW2JE] [Servlet.LOG]:
AddressBook: init
[9/24/03 16:39:23:161 CDT] 4deec1c6 SystemOut O ServerHandler: In handleRequest
[9/24/03 16:39:23:211 CDT] 4deec1c6 SystemOut O ServerHandler: In handleResponse
Ergebnisse
Die Implementierungsdeskriptoren für Handlerklassen sind konfiguriert. Implementierungsdeskriptoren sind erforderlich, damit WebSphere Application Server die eingehenden Web-Service-Anforderungen bearbeiten kann.
Nächste Schritte
Implementieren Sie die EAR-Datei, die für Web-Services konfiguriert und aktiviert wurde. Anschließend können Sie die Anwendung testen, um sicherzustellen, dass Sie in der Umgebung von WebSphere Application Server ausgeführt werden kann.