Ejemplo: Configuración de clases handler para descriptores de despliegue de servicios web
En este marco se describe cómo añadir una clase handler cliente y servidor a una aplicación de ejemplo llamada WebServicesSamples.ear. Las clases handler muestran mensajes cuando se proporciona una solicitud o respuesta para manejar.
El código de la clase handler cliente se muestra en el siguiente ejemplo:
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; }
}
El código de la clase handler servidor se muestra en el siguiente ejemplo:
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; }
}
- Compile estas clases utilizando:
%JAVA_HOME%\bin\java -extdirs %WAS_EXT_DIRS% ClientHandler.java ServerHandler.java
$JAVA_HOME/bin/java -extdirs $WAS_EXT_DIRS ClientHandler.java ServerHandler.java
- Abre una herramienta de ensamblaje e importe los dos archivos archivadores de empresa (EAR) de ejemplo:
...\installableApps\WebServicesSamples.ear
.../installableApps/WebServicesSamples.ear
...\installableApps\ApplicationClients.ear
.../installableApps/ApplicationClients.ear
- Importe las clases handler compiladas en los proyectos de los módulos de ejemplo:
- Importe sample.ClientHandler en el directorio appClientModule del proyecto AddressBookClient.
- Importe sample.ServerHandler en el directorio ejbModule del proyecto AddressBookW2JE.
- Configure el
descriptor de despliegue de cliente para clases handler.
En este tema se describe cómo configurar el descriptor de despliegue de cliente para clases handler proporcionadas por el usuario.
- Configure el descriptor de despliegue webservices.xml
para las clases handler.
En esta sección se explica cómo configurar el descriptor de despliegue webservices.xml para clases de manejadores proporcionados por el usuario.
- Guarde los cambios y exporte los archivos EAR.
- Desinstale la aplicación WebServicesSamples.ear del servidor si ya está instalada.
- Instale la nueva aplicación WebServicesSamples.ear.
- Inicie el servidor.
- Ejecute el cliente:
launchClient ApplicationClients.ear -CCjar=AddressBookClient.jar
Cuando se ejecuta el cliente, la salida que aparece en la consola es parecido a lo siguiente. Los mensajes de los manejadores (handlers) se muestran en negrita.
IBM WebSphere Application Server J2EE Application Client Tool Copyright IBM Corp., 1997-2003 WSCL0012I: Procesando argumentos de línea de mandatos. WSCL0013I: Inicializando el J2EE Application Client Environment. WSCL0035I: La inicialización de J2EE Application Client Environment ha finalizado. WSCL0014I: Invocando la clase de cliente de aplicación com.ibm.websphere.samples.webservices.addr.AddressBookClient >> 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
Para el cliente, la clase handler se configura para cada referencia a servicio, no para cada puerto. El ejemplo AddressBook tiene cuatro puertos, pero sólo una referencia a servicio, por consiguiente, ClientHandler maneja solicitudes y respuestas en todos los puertos.
Si se consulta el archivo de registro del servidor, contiene los siguientes datos:
[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
Resultados
Se han configurado los descriptores de despliegue para las clases de manejador. Los descriptores de despliegue son necesarias para que WebSphere Application Server pueda procesar las solicitudes de servicios web de entrada.
Qué hacer a continuación
Despliegue el archivo EAR que se ha configurado y habilitado para servicios web. A continuación, pruebe la aplicación para asegurarse de que funcione dentro del entorno de WebSphere Application Server.