martes, 8 de abril de 2008

Axis2: Echo web service

Creacion del Servicio

Para desarrollar el servicio de Echo, es necesario crear una clase java que sea el punto de entrada y que se pueda registrar y publicar en la apilacion web de Axis2. El codigo fuente correspondiente al servicio es el siguiente:
package test.echo.service;

public class EchoService {

public String echo(String value) {
return value;
}
}
Cada servicio requiere tambien una minima configuracion como la que se presenta a continuacion, que permite a Axis2 conocer los detalles necesarios sobre el servicio:


La configuracion presentada debe estar definida en un archivo xml cuyo nombre debe ser services.xml.

Empaquetado del servicio

Para poder desplegar el servicio en Tomcat a traves de la aplicacion web de Axis2, es necesario respetar una estructura predefinida. La clase java para el servicio debera estar ubicada en la estructura de directorio definido por la estructura de paquete, mientras que tambien es necesario incluir en archivo services.xml.

Publicacion del servicio

Aparecera entonces listado entre los servicios publicados a traves de la aplicacion web de Axis2 en Tomcat:


Al hacer click en el servicio "Echo", el wsdl correspondiente al servicio sera mostrado por el navegador:


Creacion del client para consumir el Servicio

Para crear un cliente que puede consumir el servicio Echo, se emplea la utilidad de Axis2 que permite generar codigo a partir de un wsdl, llamada wsdl2java.
Acceda el directorio AXIS_HOME/bin y ejecute desde alli esta utilidad, especificando algunos parametros, como se muestra a continuacion:
wsdl2java -uri http://localhost:8080/axis2/services/Echo?wsdl -p
test.echo.client -o C:\axis2-1.3\samples\userguide
Los parametros especificados tienen el siguiente singnificado:
uri: La URL donde el wsdl a partir del cual se generara el codigo se encuentra.
p: La estrutura de paquete que se desea para el codigo generado.
o: La ubicacion en el sistema de archivos donde seran generadas las clases.

El codigo generado consiste en las siguientes dos clases java:
  • EchoStub.java
  • EchoCallbackHandler.java


Estas clases contiene demasiadas lineas de codigo, dificil de entender y casi imposible de modificar. Es importante tener claro de utilizar las utilidades para generacion de codigo permite obtener una solucion rapida, pero no siempre efectiva.

Ahora es necesario crear el punto de entrada para la ejecucion del cliente del servicio. A continuacion se muestra un ejemplo:
package test.echo.client;

import java.rmi.RemoteException;

import org.apache.axis2.AxisFault;

public class EchoClient {

public void run() {
try {
EchoStub es = new EchoStub();

EchoStub.Echo request = new EchoStub.Echo();
request.setParam0("Hello, Echo!");

EchoStub.EchoResponse response = es.echo(request);

System.out.println(response.get_return());

} catch (AxisFault e) {
e.printStackTrace();

} catch (RemoteException re) {
re.printStackTrace();
}
}

public static void main(String[] args) throws Exception {
EchoClient ec = new EchoClient();
ec.run();
}
}
Al ejecutar el cliente, la salida que se vera por consola es: "Hello, Echo!"

Vinculos:

1 comentario:

Fernando dijo...

hola
estoy tratando de hacer un cliete con Axis2 en un aplicación desktop con el netbeans que consume un servicio web que espera la entrada de un objeto definido por mi, no se como pasarle este objeto.