May 27 2013

Creación de un servicio web: Axis2 y Eclipse

Categoría: DAD,DAD II,GeneralMiguel Angel @ 20:00

 

Logotipo de Apache Axis 2

Logotipo de Apache Axis 2

En esta entrada voy a explicar los pasos a seguir para crear un servicio web con Apache Axis2 y un cliente que lo utilice. La idea es implementar el típico HolaMundo pero a través de un servicio web. El cliente invocará el método que está en el servidor, el cual le devolverá el tan famoso «Hola Mundo!!».

 

 

 

 

Lo primero de todo es descargarse la versión de Axis2 adecuada (recomiendo los binarios). Esta es la página del proyecto.

enlacesDescarga

Una vez que lo hemos descargado e instalado (en mi caso descomprimir) abrimos eclipse y configuramos Axis2. En Window->Preferences->Web Services->Axis2 Preferences ponemos la ruta hasta la instalación de Axis2, en mi caso C:\Archivos de programa\Axis\axis2-1.6.2

configuracion

y en la misma ventana de preferencias seleccionamos «Server and Runtime» y en el campo «Web Service Runtime» seleccionamos el valor «Apache Axis2».

configuracion2

A continuación creamos un proyecto web (Dynamic Web Project), un paquete (edu.ucam.webservices) y una clase, HolaMundo, que hará de servicio. Dicha clase tendrá el método a invocar y cuyo código es:

public String diHola(){
 System.out.println("Voy a decir hola");
 return "Hola Mundo!!";
 }

El siguiente paso es crear y registrar el servicio. Para ello sobre la clase recién creada pulsamos botón derecho New -> Other -> Web Service

newServicioWeb

La primera pantalla debe quedar como la imagen anterior. Lo correcto sería selecciona «Top down» es decir crear la descripción del servicio (WSDL) y a partir de ella la clase, pero para facilitar el desarrollo lo hacemos al revés «Bottom up» (primero la clase y luego la descripción).

newServicioWeb2

Seguimos todos los pasos del wizard. En uno de ellos nos pedirá arrancar el servidor (si no lo está).

A continuación abrimos un navegador y vamos a la dirección «http://localhost:8080/ServicioWebHolaMundo/axis2-web/» (sólo hay que cambiar la parte subrayada por el contexto que tengáis en vuestra aplicación)

Os aparece una página de inicio de Axis2 con un enlace que pone Services. Al navegar hacia el, aparece el listado de servicios web desplegados, debe aparecer HolaMundo. La ruta de ese enlace se corresponde con el wsdl del servicio web creado (lo copiamos en el porta papeles).

El penúltimo paso es generar el cliente (stub) del servicio web. El fichero que se genera contiene todos los elementos (clases) necesarios para invocar el servicio web desde la aplicación cliente; hace las veces de proxy. Botón derecho sobre la clase New -> Other -> Web Service Client.

En «Service definition» ponemos la url hacia el wsdl que hemos copiado del paso anterior: http://localhost:8080/ServicioWebHolaMundo/services/HolaMundo?wsdl

newClienteServicioWeb

 

Sólo queda crear una clase cliente con el método main y el siguiente código para invocar el servicio web:

public static void main(String[] args) {
 try {
    //Se crea un objeto del proxy hacia el servicio web
    HolaMundoStub holaMundo = new HolaMundoStub();

    //Este objeto representa al parámetro.
    DiHola diHola = new DiHola();

    //Se invoca el método del servicio web y se obtiene la respuesta.
    DiHolaResponse respuesta = holaMundo.diHola(diHola);

    //Se muestra la respuesta.
    System.out.println(respuesta.get_return());
 } catch (AxisFault e) {
    e.printStackTrace(); 
 } catch (RemoteException e) {
    e.printStackTrace();
 }
 }

En ningún momento se crea un objeto de la clase HolaMundo, se instancia la clase que hace de proxy hacia el servicio web HolaMundoStub. Además se utilizan las clases que representan el método a invocar (DiHola) y la respuesta al mismo (DiHolaResponse).

2 Respuestas a “Creación de un servicio web: Axis2 y Eclipse”

  1. Daniel dice:

    tiene error de código la clase q se crea como servicio, ademas como haces para que te aparezca en server runtime Tomcat server 6.
    espero tu respuesta porfa

  2. Miguel Angel dice:

    ¿Qué error es?

Dejar una respuesta