En esta nueva entrada de nuestros tutoriales sobre Web Services, vamos a ver cómo crear un WS con Axis2 a partir de una clase Java que hemos creado previamente (POJO).
Para desplegar un WS con Axis2 necesitamos las librerías de Axis2, crear el fichero wsdl que define la estructura de los mensajes SOAP que aceptará el WS, y el fichero services.xml que le indicará a Axis2 las clases y métodos que serán accesibles desde el mismo. Las librerías ya las tenemos (suponemos que ya has instalado Axis2 en tu equipo, y si no es así puedes visitar este tutorial en el que explicamos los pasos para realizarlo), el services.xml tendremos que crearlo a mano, y el wsdl lo generaremos a través de un script que trae Axis2. Pero vayamos paso a paso:
Creación de la clase java
Lo primero que tenemos que hacer es generar la clase java que será publicada como WS. El IDE que hemos utilizado para este tutorial es Eclipse con Lomboz, pero podéis utilizar el que más os guste.
Creamos un proyecto java normal (no un proyecto web), y le damos un nombre. Creamos una nueva clase, e implementamos los métodos que queremos que sean accesibles en el WS. En nuestro ejemplo hemos hecho un método que recibiendo un String devuelve la longitud del mismo. Es importante que los métodos que vayan a ser accesibles, estén declarados como públicos. El código de nuestra clase de ejemplo queda así:
package es.pruebas;
public class Cadenas {
public long contarCaracteres(String cadena) {
long longitud = 0;
if (cadena != null) {
longitud = cadena.length();
}
return longitud;
}
}
Creación del wsdl a partir de la clase
Si estamos utilizando Eclipse, existe un plugin que nos será de gran utilidad para esta tarea. Se llama “Code Generator Wizard” y lo podéis descargar desde aquí. Con este plugin nos ahorramos el tener que recurrir a la línea de comandos para ejecutar el script java2wsdl. De todos modos, veremos las dos formas.
Desde la línea de comandos:
Abrimos una consola de comandos. Para que los parámetros que hay que pasarle al script java2wsdl no sean muy largos, os recomendamos que incluyais en el PATH la ruta de instalación de Axis2/bin, y que os situéis en la ruta donde tenemos los binarios del proyecto. Para nuestro ejemplo, nuestro directorio es:
C:\eclipse\workspacePruebas\ejemplo\bin
Podríamos hacerlo al revés, es decir, situarnos en el directorio donde hemos instalado Axis2/bin y cuando lancemos el script especificar la ruta en la que tenemos nuestro fichero .class, pero es más cómodo de la anterior manera.
Si ejecutamos el comando java2wsdl, nos aparecerá un listado con todos los parámetros que acepta.
Ejecutamos el script java2wsdl con los siguientes parámetros:
java2wsdl -o . -of prueba.wsdl -cn es.pruebas.Cadenas
donde:
-o . (Especifica el directorio en el que dejará nuestro wsdl, en nuestro caso, que lo deje en el directorio en el que estamos)
-of prueba.wsdl (Especifica el nombre con el que se va a crear el wsdl)
-cn es.pruebas.Cadenas (Especifica la clase a partir de la cual se va a crear el wsdl. Es necesario poner el paquete en el que se encuentra).
Se pueden especificar más cosas para la creación del wsdl, pero para nuestro ejemplo es suficiente con los parámetros que hemos especificado.
Una vez ejecutado, en el directorio de salida que le hayamos dicho, tendremos el fichero wsdl de nuestro WS.
Utilizando “Code Generator Wizard”
Si estás utilizando Eclipse, te recomendamos que utilices este plugin para generar el wsdl. Una vez descargado descomprímelo en la carpeta plugins dentro del directorio de instalación del Eclipse. Si lo tienes arrancado, deberás reiniciarlo para que lo cargue.
Una vez instalado, y cuando tengamos nuestra clase java ya creada, pinchamos con el botón derecho en la clase, y seleccionamos “Nuevo” y “Otro…”. Si tenemos bien instalado el plugin deberíamos tener una opción como la siguiente:
Lo seleccionamos y pulsamos en “Siguiente”. Ahora nos preguntará si queremos generar las clases java a partir de un wsdl, o si queremos generar el wsdl a partir de una clase. En nuestro caso, seleccionamos la segunda opción:
En la siguiente pantalla seleccionamos la clase a partir de la cuál queremos crear el WS. Primero pinchamos en añadir directorio y ponemos en el que tenemos nuestra clase compilada (en nuestro caso es el directorio /bin). No hay que entrar dentro del directorio del paquete, porque si no no encontrará la clase. Ahora en el campo del nombre de la clase ponemos el nombre que le hayamos dado, incluyendo el paquete en el que se encuentra:
Al pulsar en el botón “Test Class Loading…” nos dirá si hemos realizado este proceso correctamente o no.
En la siguiente pantalla nos preguntará por los namespaces que queremos utilizar en el wsdl. Podemos dejar los valores por defecto:
Por último nos preguntará por el directorio y el nombre con el que queremos guardar el wsdl:
Pulsamos en Finalizar, y con esto ya tenemos el wsdl de nuestro WS en la ruta que hayamos especificado.
Creación del fichero “services.xml”
El último elemento que necesitamos para la creación de nuestro WS, es el fichero services.xml. Mediante este fichero, le decímos a Axis2 que clase es la que atiende las peticiones, que metodos son accesibles, etc. Podéis ver una descripción de los elementos que lo componen aquí. Éste es el contenido del descriptor de servicios de nuestro ejemplo:
true
es.pruebas.Cadenas
- En nuestro caso, tenemos un único servicio, al que hemos llamado Cadenas.
- Con el parámetro
"useOriginalwsdl" le estamos diciendo que utilice el wsdl que hemos creado. - El “
messageReceiver" de nuestro ejemplo es de entrada/salida, ya que el método "contarCaracteres" tiene parámetros de entrada y salida. - Con el parámetro “
ServiceClass" le indicamos la clase que va a ser accesible. - Por último, el tipo de operación indica que la operación es de entrada/salida.
Creación del fichero de despliegue “aar”
Ahora que ya tenemos todos los elementos que necesitamos, vamos a crear el fichero que utilizaremos para desplegar el WS. En Axis2 estos ficheros en vez de tener extensión war o jar, tienen extensión aar.
En nuestro proyecto, debemos organizar las carpetas y ficheros de la siguiente manera:
- META-INF
- services.xml
- cadenas.wsdl
- es
- pruebas
- Cadenas.class
- pruebas
Una vez hecho esto, hay que exportar el proyecto como si se tratara de un “.jar”, pero le cambiamos la extensión por “.aar”. Cuando tengáis generado el fichero probar a abrirlo con el programa Winrar, y comprobar que tenéis la estructura correctamente y con todos los ficheros.
Probar el WS
Una vez llegados a este punto, lo habrá que comprobar si el WS que hemos creado se despliega correctamente en un servidor de aplicaciones o no. Una de las cosas buenas que tiene Axis2 es que incorpora un “microservidor” de aplicaciones, con el que podemos testear si lo que hemos hecho está bien o no. Éste servidor está configurado para que utilice por defecto el puerto 8080. Si ya estáis utilizando este puerto, podéis cambiar este parámetro dentro del fichero “axis2.xml” que se encuentra en el directorio “conf” dentro del directorio de instalación de Axis2. Cambiar el parámetro:
<parameter name=”port”>8080</parameter> dentro del <transportReceiver name=”http”
Nos vamos al directorio en el que tenemos Axis2 instalado, y entramos en la carpeta “repository/services”. En esta carpeta dejaremos nuestro aar.
Ahora volvemos a la carpeta del Axis2, y dentro de “bin” ejecutamos el programa “axis2server”. Se os abrirá una ventana en la que podréis ver si el WS se ha desplegado correctamente o si ha habido errores:
Abrir una ventana en el navegador, y escribir la dirección:
http://localhost:8080/axis2/services/
Si todo ha ido bien, en la lista de servicios debería aparecer vuestro WS:
Pues hasta aquí este tutorial. Esperamos haberos sido de utilidad, y os adelantamos que en el próximo veremos el paso contrario, es decir, cómo crear en Axis2 a partir del fichero wsdl nuestras clases java, que es la manera más recomendable.
Hasta la vista.









Comentarios
Dejar un comentario Trackback