Instalando Axis2

May 14, 2007

Axis2 es el nuevo motor de webservices de Apache. Su arquitectura ha sido diseñada desde cero, teniendo en cuenta las lecciones aprendidas con Axis1. Cabe destacar su mejor rendimiento, pero sobretodo su sistema de módulos que permite, de forma sencilla, añadir nuevas funcionalidades y soportar futuras especificaciones sobre webservices.

Axis2 puede utilizar SOAP 1.1, SOAP 1.2 y REST. Además soporta las especificaciones WS-Security, WS-ReliableMessaging, WS-Addressing, WS-Coordination y WS-Atomic Transaction.

Con esto, queda presentado Axis2. Para más información puedes consultar su página web.

Preliminares
Si quieres seguir este tutorial antes debes instalar:

  • JDK 1.4 o superior, con la variable de entorno JAVA_HOME fijada.
  • ANT 1.6.5 o superior. Para ejecutar los samples y generar una distribucion war a partir de la standard. No olvides añadir la carpeta bin al path y fijar la variable ANT_HOME.
  • Tomcat 5.X o superior. En realidad servirá cualquier contenedor de servlets.

Descargar
Lo primero es bajarse el Axis2. En la página donde descargar Axis2 se pueden encontrar los siguientes tipos de distribución:

  • Standard Binary Distribution. Es la versión completa de Axis2. Puede ejecutarse, a diferencia de Axis1, como un servidor independiente o generar una aplicación web para desplegar en un contenedor de servlets. Contiene además las herramientas wsdl2java, java2wsdl y los samples.
  • Source Distribution. Contiene el código fuente y puede generarse una versión ejecutable con Maven.
  • WAR (Web Archive) Distribution. Esta es una versión lista para ser desplegada como una aplicación web en un contenedor de servlets.
  • Documents Distribution. Es un zip con toda la documentación.

Descargamos la primera opción, Standard Binary Distribution, y se descomprime en una ruta a nuestra elección.
A continuación se debe crear la variable de entorno AXIS2_HOME para que apunte a la ruta donde se ha descomprimido Axis2, pej: /opt/axis2

NOTA: En el momento de realizar este tutorial la última versión de Axis2 es la 1.2, durante el resto del tutorial se supondrá que se está trabajando con esta versión.

Estructura
Echemos un vistazo al Axis2 que acabamos de instalar y encontraremos la siguiente estructura de carpetas:

  • bin: contiene scripts para ejecutar Axis2 como un servidor standalone y ejecutar las herramientas wsdl2java y java2wsdl.
  • conf: incluye el fichero de configuración axis2.xml.
  • lib: las librerias que usa Axis2.
  • repository: contiene los servicios (webservices) y módulos disponibles.
  • samples: códigos de ejemplo.
  • webapp: contiene la aplicación web de administración de Axis2. Se incluye sólo para la generación de una distribución war de Axis2.

Modo standalone
Axis2 puede ejecutarse de 2 modos, como aplicación web desplegada en un contenedor de servlets o como servidor standalone gracias a un mini servidor web que trae integrado.

El modo standalone es una novedad respecto a Axis1 y muy útil para el desarrollador en entornos limitados. Usa el script axis2server de la carpeta bin para arrancar el servidor de Axis2. Abre la página http://localhost:8080/axis2/services para comprobar que Axis2 se ha iniciado correctamente. Podras ver el único webservice desplegado, llamado Version, y obtener su WSDL (ver figura 1).

Por defecto, el servidor standalone de Axis2 usa el puerto tcp 8080. Si quieres, puedes cambiarlo en el fichero de configuración axis2.xml de la carpeta conf.

<transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer">
    <parameter name="port">6060</parameter>
     […]
</transportReceiver>

Si usas JDK6 y tienes problemas, debes copiar el stax-api.jar de la carpeta lib de Axis2 a la carpeta lib/endorsed del JRE o common/endorsed del Tomcat si vas a usar Axis2 en Tomcat.

Despliegue en caliente de webservices
Una de las novedades más importantes de Axis2 es la posibilidad de desplegar en caliente webservices. Para ello basta con copiar el webservice al repositorio, carpeta services. Adios al AdminClient de Axis1!

El modelo de despliegue de Axis2, similar al nuevo modelo J2EE, define un formato para empaquetar los webservices. Un fichero .aar (en realidad es un jar) que contendrá los ficheros class, jar y recursos del webservice más un fichero de configuración dentro de la carpeta META-INF llamado services.xml.

¿Vemos un ejemplo?

  1. Abre una consola y colocate en la carpeta samples/pojo de Axis2.
  2. Ejecuta: ant. Si no funciona correctamente revisa que el path contiene la carpeta bin de ant y revisa también las variables de entorno JAVA_HOME, AXIS2_HOME y ANT_HOME.
  3. Se habrá creado una carpeta build y dentro el fichero AddressBookService.aar. En realidad es un jar, así que puedes abrirlo con un simple descompresor. Dentro están las clases del webservice y el fichero de configuración services.xml que define el nombre, ámbito, receptores de mensajes y el nombre de la clase principal del servicio. Es muy sencillo, lo veremos en detalle cuando veamos cómo desarrollar webservices.
  4. <service name="AddressBookService" scope="application">
        <description>
           POJO: AddressBook Service
        </description>
        <messageReceivers>
           <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"   class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
           <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"   class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
        </messageReceivers>
        <parameter name="ServiceClass" locked="false">sample.addressbook.service.AddressBookService</parameter>
    </service>

  5. Copia el fichero AddressBookService.aar a la carpeta repository/services de Axis2 y ya está!
  6. Abre de nuevo http://localhost:8080/axis2/services en un navegador y verás como el servicio AddressBookService se ha desplegado sin tener que reiniciar el servidor (ver figura 2).

Este nuevo modelo de despliegue permite también la actualización en caliente de un webservice (aunque por defecto está desactivada). Las características de despliegue y actualización en caliente pueden configurarse en el fichero axis2.xml.

<axisconfig name="AxisJava2.0">
    <parameter name="hotdeployment">true</parameter>
    <parameter name="hotupdate">false</parameter>
    […]
</axisconfig>

Modo aplicación web
Aunque el modo standalone es muy útil, lo normal es distribuir Axis2 como una aplicación web para usar toda la potencia y funcionalidad de nuestro contenedor de servlets favorito.

Veamos cómo generar un Axis2 war:

  1. Abre una consola y colocate en la carpeta webapp de Axis2.
  2. Ejecuta: ant.
  3. Se habrá generado el fichero axis2.war dentro de una nueva carpeta dist en Axis2. Esta distribución contiene el fichero de configuración axis2.xml (carpeta conf) y los webservices (services) y módulos (modules) del repositorio de Axis2 en el momento de ser generada.

Por supuesto, siempre está la opción de bajarte la distribución WAR directamente.

La distribución web de Axis2 contiene una aplicación de administración. Vamos a verla. Copia el axis2.war generado a la carpeta webapps del Tomcat. Arranca el Tomcat y abre http://<host>:<port>/axis2 en un navegador (ver figura 3).

Puedes listar los servicios disponibles, validar el estado y administrar Axis2. El usuario es admin/axis2 (puede modificarse en axis2.xml). Con él puedes gestionar los servicios y módulos existentes, además de subir nuevos servicios que serán desplegados automáticamente gracias al despliegue en caliente de Axis2.

Hay que tener en cuenta que las modificaciones que hagamos se perderan con el reinicio del Tomcat o del Axis2. Para que los cambios en la configuración perduren deben hacerse directamente en el fichero axis2.xml. Por eso, si se va a estar "tocando" la configuración o los servicios lo mejor será descomprimir el axis2.war en webapps/axis2 y borrar el axis2.war de webapps.

Hasta aquí, esto es todo. Sé que me dejo muchas cosas, como módulos, desarrollo de servicios, clientes, handlers, seguridad, etc. Lo veremos poco a poco, el siguiente tema será cómo desarrollar un webservice desde WSDL.