Web Services con Axis2. Configuración y ejemplo

Web Services con Axis2. Configuración y ejemplo

  1. Web Services con Axis2. Configuración y ejemplo
    1. Introducción
    2. Requisitos
    3. Configuración del software
    4. Ejemplo de un Web Service con Axis2
    5. Conclusión

Introducción

Este es un tutorial básico que introduce a los servicios web en Java, y muestra cómo configurar el equipo con las herramientas necesarias para poder crear luego un web service de ejemplo.

Utilizaremos Axis2 para publicar el servicio web, y Eclipse como herramienta para facilitarnos el proceso, no obstante el código es simple y podría hacerse todo por línea de comandos. Puedes mirar la sección Tutoriales Recomendados, al final de esta página, para profundizar y seguir aprendiendo sobre el tema (o un buen libro, ¡por supuesto!).

Requisitos

Utilizaremos el siguiente software:

Con lo anterior aseguro un correcto funcionamiento, pero si quieres utilizar otras versiones, adelante.

Configuración del software

Lo explicaré para las rutas del software que manejo en mi ordenador (obviamente sólo son orientativas, adáptalas en tu caso a tu sistema operativo y estructura de directorios).

1.- Sun Java JDK 5.0 update 16

Realizaremos la instalación y estableceremos en nuestro sistema la variable JAVA_HOME. En mi equipo en concreto es:

2.- Apache Tomcat 6.0.18

Simplemente descomprimimos el Tomcat en una carpeta, y establecemos la variable CATALINA_HOME a la ruta absoluta del directorio descomprimido. En mi caso es:

3.- Apache Axis2 1.4.1

Descomprimimos la versión zip de la distribución WAR, y el fichero axis2.war lo vamos a copiar en

Asimismo descomprimimos la distribución binaria en una carpeta, y establecemos la variable AXIS2_HOME a la ruta absoluta del directorio descomprimido:

Y añadimos a la variable PATH del sistema la ruta:

Para comprobar que el servidor y el motor de axis se han instalado correctamente, arrancamos el servidor ejecutando CATALINA_HOME\bin\startup.bat (ojito con los cortafuegos instalados, dar acceso a puertos y programas de este tutorial), y aparecerá una consola con las siguientes trazas:

Despliegue de Axis2 en Tomcat

Todo ha ido bien. Podemos comprobarlo accediendo a la URL http://localhost:8080/axis2:

Pagina de bienvenida de Axis2
Página de bienvenida de Axis2

4.- Eclipse Ganymede

Lo descomprimimos en una carpeta, por ejemplo

Y establecemos como workspace la ruta (si no existe, crearla antes): C:\TutorialWS\ejercicio

Ejemplo de un Web Service con Axis2

Vamos a hacer un servicio web servidor de echo (vaya, ¡que original!) al que le invoquemos con nuestro nombre y nos responda. Haremos también el programa cliente que haga la petición.

Recordemos brevemente que si disponemos del descriptor WSDL (Web Service Description Language), podemos crear el esqueleto del web service servidor (proveedor) y/o su cliente. Así, los programadores podemos desperocuparnos del manejo de los componentes, procesos y protocolos de comunicación (HTTP, FTP, SMTP, JMS, SOAP, XML…) y centrarnos en implementar la funcionalidad.

Esquema de cliente y web service servidor generados a partir del descriptor WSDL
Esquema de cliente y proveedor generados a partir del descriptor WSDL

Pueden darse otras combinaciones:

  • Que el servidor ya exista y sólo queramos crear un cliente para dialogar. Generalmente nos darán el WSDL para decirnos cómo ‘hablar’ con el servidor.
  • Que no tengamos nada pero sepamos la funcionalidad que hará el web service. A partir de una interfaz en la que definamos las operaciones, podemos generar el WSDL, y de ahí, el procedimiento antes explicado tanto para el cliente, servidor o ambos.

La primera de ellas va a ser la aproximación para crear nuestro ejemplo. Comencemos:

1.- Crear el web service servidor

Creamos un nuevo proyecto Java en Eclipse (File | New | Java | Java Project) llamado ServidorEchoWS. Nos aseguramos de que estamos trabajando con Java 5 para evitar problemas si tenemos alguna otra JRE en el sistema:

  • Window | Preferences | Java | Installed JREs, y que esté seleccionado jre_1.5_0.16
  • Window | Preferences | Java | Compiler, Compiler compliance level: 1.5

Ahora creamos un paquete com.autentia.ws.servidor y ahí una clase llamada Echo:

A nivel raíz del protecto creamos una carpeta META-INF y en su interior un fichero llamado services.xml, que será el descriptor del web service:

En este punto, la estructura del proyecto será como muestra la imagen:

Estructura del proyecto del web service proveedor en Eclipse

Vamos a crear el ensamblado de tipo aar (Axis ARrchive, que viene a ser el equivalente al jar de Java). Botón derecho sobre el nombre del proyecto | Export | Java | Jar File, pulsamos Next y en la siguiente pantalla deseleccionamos los “.classpath” y “.project” y como ruta en input JAR File ponemos por ejemplo C:\TutorialWS\EchoService.aar:

Configuracion del ensamblado EchoService.aar
Configuracion del ensamblado EchoService.aar

Pulsamos Finish. A continuación accedemos a la carpeta C.\TutorialWS y copiamos el fichero EchoService.aar en CATALINA_HOME\webapps\axis2\WEB-INF\services. A los pocos segundos, Axis detectará que hay un nuevo recurso que debe ser desplegado, y en la consola de Tomcat aparecerá esta traza:

Despliegue correcto del web service en Axis2
Despliegue correcto del web service en Axis2

Si accedemos a la web http://localhost:8080/axis2/ y pulsamos en Services, veremos que aparece el nuevo servicio en la lista:

Web service EchoService activo
Web service EchoService activo

Ya tenemos el web service proveedor publicado y a la espera de que un cliente lo invoque. Ahora vamos a crearlo.

4.- Implementando el cliente

Como hemos explicado antes, si queremos utilizar un servicio web, tenemos que utilizar un cliente que sepa ‘dialogar’ con aquel. Para saber qué ofrece y cómo comunicarse, nos valdremos de un descriptor del servicio, un fichero XML que cumple la especificación WSDL (la más reciente es la versión 2.0).

Pediremos a Axis que nos dé el WSDL de nuestro servicio EchoService invocando la siguiente dirección http://localhost:8080/axis2/services/EchoService?wsdl. Lo guardamos en un fichero con el nombre echoservice.wsdl (precaución al guardarlo, que no se introduzcan caracteres externos al propio xml).

Debemos abrir y examinar el contenido de echoservice.wsdl y si vemos que en las etiquetas “<soap:address location=” aparece un número de IP en vez de localhost, cambiar a localhost. Por ejemplo:

cambiar por:

Volviendo a Eclipse, creamos un proyecto Java con el nombre ClienteEchoWS e importamos las librerías de Axis2: botón derecho sobre el proyecto ClienteEchoWS | Build Path | Configure Build Path | pestaña Libraries | Add External JARS… , navegamos hasta el AXIS2_HOME\lib, seleccionamos todos los .jar (aunque muchos no serán realmente necesarios), y OK.

Copiamos ahora el fichero echoService.wsdl en la carpeta de nuestro proyecto de eclipse de ClienteEchoWS, que estará en C:\TutorialWS\ejercicio\ClienteEchoWS. Abrimos una consola de línea de comandos y nos situamos en ese mismo directorio. Una vez ahí, ejecutamos el comando:

Obtendremos un resultado como éste:

Ejecucion del comando wsdl2java
Ejecucion del comando wsdl2java

Con ello hemos creado las clases del cliente que resuelven por nosotros la comunicación con el web service. Volvemos a Eclipse, refrescamos el proyecto (boton derecho sobre ClienteEchoWS | Refresh) y veremos que se ha creado el paquete com.autentia.ws.servidor con dos clases: EchoServiceCallbackHandler.java y EchoServiceStub.java. Creamos en el proyecto un paquete com.autentia.ws.cliente y una clase Test.java con el siguiente código:

En este punto, nuestro proyecto en Eclipse deberá tener el aspecto de la imagen:

Proyecto de ClienteEchoWS en Eclipse
Proyecto de ClienteEchoWS en Eclipse

Ejecutamos el cliente pulsando con el botón derecho sobre Test.java | Run As | Java Application. En la vista inferior Console veremos el resultado de la ejecución (el texto en rojo podemos ignorarlo, no estamos usando log4j) :

Resultado de la invocacion al web service
Resultado de la invocación al web service

El web service nos ha respondido correctamente saludándonos :-)

¡Inténtalo ahora tú con el servicio de despedida!

Conclusión

Si este tutorial te ha servido para comenzar y romper el miedo a crear servicios web con Java, te animo a seguir aprendiendo. No olvidemos que la complejidad de las soluciones a desarrollar en proyectos reales requieren utilizar las múltiples capacidades y patrones de los web services en profundidad.

Cada día la arquitectura orientada a servicios (SOA) está más presente en las organizaciones, y dominar los web services se va convirtiendo en una necesidad, como nos muestra la alta demanda de la formación que impartimos en Autentia sobre estas tecnologías.