Web Services con Axis2, Apache Tomcat y Netbeans

Durante estas semanas me ha tocado trabajar nuevamente con Web Services y desarrollar una aplicación para Android que pueda comunicarse con un servidor utilizando este método. En este artículo explicaré de forma rápida como podemos crear un servicio web con Axis2 en Netbeans y hacerlo funcionar en Apache Tomcat.

Las versiones utilizadas en este manual son las siguientes (a 6 de octubre de 2011):

Descargar JDK7

El primer paso será descargar el Java Development Kit 7 para Linux desde el siguiente enlace. Una vez descargado, lo descomprimimos y lo movemos al directorio que deseemos, en este caso lo hemos hecho en /usr/local/jdk1.7.0

aitor@webServ:~/axis/jdk1.7.0$ tar zxvf jdk-7-linux-i586.tar.gz
aitor@webServ:~/axis$ sudo mkdir /usr/local/jdk1.7.0/
aitor@webServ:~/axis$ sudo mv jdk1.7.0/* /usr/local/jdk1.7.0/

Descargar Apache Tomcat

Descargaremos la ultima versión de Tomcat desde su página web http://tomcat.apache.org.

aitor@webServ:~$ wget http://apache.rediris.es/tomcat/tomcat-7/v7.0.22/bin/apache-tomcat-7.0.22.tar.gz

Una vez descargado, lo descomprimimos y movemos el contenido a /usr/local/tomcat7

aitor@webServ:~$ tar zxvf apache-tomcat-7.0.22.tar.gz
aitor@webServ:~$ sudo mkdir /usr/local/tomcat7
aitor@webServ:~$ sudo mv apache-tomcat-7.0.22/* /usr/local/tomcat7

Si nos fijamos en el contenido del directorio tomcat7, podremos observar lo siguiente:

aitor@webServ:/usr/local/tomcat7$ ls
bin  conf lib  LICENSE  logs NOTICE RELEASE-NOTES RUNNING.txt temp  webapps  work

En el directorio bin, encontramos dos scripts importantes, startup.sh y shutdown.sh utilizados para iniciar y detener tomcat respectivamente. Si intentamos iniciarlo en este punto, nos vamos a encontrar con lo siguiente:

aitor@webServ:/usr/local/tomcat7$ bin/startup.sh
 Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
 At least one of these environment variable is needed to run this program

Al intentar iniciar Tomcat, nos aparece un mensaje de error el cual nos informa de que debemos crear la variable de entorno JAVA_HOME (o JRE_HOME). Para ello introduciremos el siguiente comando:

aitor@webServ:/usr/local/tomcat7$ echo $JAVA_HOME
aitor@webServ:/usr/local/tomcat7$ export JAVA_HOME=/usr/local/jdk1.7.0/
aitor@webServ:/usr/local/tomcat7$ echo $JAVA_HOME
/usr/local/jdk1.7.0/

Con el último echo observamos como ya hemos creado correctamente la variable de entorno JAVA_HOME. Una vez hecho esto, si intentamos iniciar Tomcat de nuevo podemos observar como funciona sin problemas.

aitor@webServ:/usr/local/tomcat7$ bin/startup.sh
 Using CATALINA_BASE:   /usr/local/tomcat7
 Using CATALINA_HOME:   /usr/local/tomcat7
 Using CATALINA_TMPDIR: /usr/local/tomcat7/temp
 Using JRE_HOME:        /usr/local/jdk1.7.0/
 Using CLASSPATH:       /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
aitor@webServ:/usr/local/tomcat7$

Si lo deseamos, con nmap, podemos ver como, efectivamente, nuestro servidor está activo y escucha peticiones por el puerto 8080 (puerto por defecto de Tomcat)

aitor@webServ:/usr/local/tomcat7$ nmap 127.0.0.1
Starting Nmap 5.21 ( http://nmap.org ) at 2011-10-06 19:34 CEST
 Nmap scan report for localhost (127.0.0.1)
 Host is up (0.00062s latency).
 Not shown: 997 closed ports
 PORT     STATE SERVICE
 631/tcp  open  ipp
 8009/tcp open  ajp13
 8080/tcp open  http-proxy
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds

Descarga del WAR de Axis2

Una vez ya se inicia Tomcat correctamente, vamos a descargar el WAR de Axis2 (WAR distribution en lugar de Binary distribution), el cual, añadiremos a Tomcat para poder utilizar los servicios web (también seria posible crear dicho war con Apache Ant). Descargamos la ultima versión:

aitor@webServ:~$ wget http://apache.rediris.es//axis/axis2/java/core/1.6.1/axis2-1.6.1-war.zip
 --2011-10-06 19:45:13--  http://apache.rediris.es//axis/axis2/java/core/1.6.1/axis2-1.6.1-war.zip
 Resolviendo apache.rediris.es... 130.206.1.5
 ...

Y una vez descargado, lo descomprimimos. Si nos fijamos, observaremos que aparece un fichero llamado axis2.war:

aitor@webServ:~$ unzip axis2-1.6.1-war.zip
 Archive:  axis2-1.6.1-war.zip
 inflating: axis2.war
 inflating: LICENSE.txt
 inflating: NOTICE.txt
 inflating: README.txt
 inflating: release-notes.html

Este fichero lo debemos mover al directorio webapps de Tomcat. Una vez allí, si tenemos Tomcat iniciado, veremos que se crea automaticamente un directorio llamado axis2 con el contenido del paquete axis2.war. Si esto no ocurre automáticamente, bastará con reiniciar el servicio Tomcat2 (shutdown + startup).

aitor@webServ:~$ ls /usr/local/tomcat7/webapps/
 docs  examples  host-manager  manager  ROOT
aitor@webServ:~$ mv axis2.war /usr/local/tomcat7/webapps/
aitor@webServ:~$ ls /usr/local/tomcat7/webapps/
 axis2  axis2.war  docs  examples  host-manager  manager  ROOT

En el segundo ls, podemos observar como se ha movido correctamente axis2.war y, ademàs, se ha creado un nuevo directorio llamado axis2. Ahora, si accedemos a la url http://localhost:8080/axis2/services/listServices tendremos acceso a un servicio llamado Version y, si hacemos clic, veremos su wsdl (Web Services Description Language).

Hasta este punto, ya tenemos la parte servidor configurada. Ahora, vamos a crear un servicio web sencillo con Netbeans para añadirlo como servicio a nuestro Tomcat.

Creando el servicio con Netbeans

Para crear un servicio web con Axis2 y Netbeans, debemos descargar Netbeans de su página web en el siguiente enlace.Si lo deseamos, se puede optar por descargar la versión Java EE ya que incluye Tomcat y Glassfish aunque en nuestro caso no sería necesario ya que acabamos de instalar la ultima versión de Tomcat.

Una vez descargado e instalado, debemos añadir el complemento para desarrollar con Axis2 a nuestro Netbeans. Para hacer eso, accederemos al menú Herramientas > Complementos. Allí, buscando en la pestaña pluguins disponibles deberiamos encontrar el plugin “Axis2 Support“. De no ser así (especialmente en la versión incluida en este post) debemos añadir un nuevo centro de actualización que se puede encontrar en este enlace: Deadlock. Para ello, se debe agregar un nuevo centro con nombre Deadlock (o el que queráis) con la siguiente URL:

http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz

Además, es recomendable activar la opción de buscar actualizaciones automáticamente al crear el nuevo centro de actualización.

En este punto, si volvemos a buscar Axis2 en la pestaña plugins disponibles, nos encontraremos con “Axis2 Support” el cual debemos instalar.

Configuración de Tomcat7 y Axis2 en Netbeans

Vamos a configurar Netbeans para que sepa donde hemos alojado el fichero axis2.war. Netbeans utilizará este fichero para añadir en él los servicios web que vayamos desarrollando. Para ello, accedemos a Herramientas > Opciones y nos dirigimos a la última pestaña llamada Axis2. En ella, debemos buscar y seleccionar el archivo axis2.war que hemos alojado en el directorio webapps de Tomcat (no solo debemos introducir el directorio sino también el nombre de fichero) en “Target Location for Axis2 .aar Files

Crear un nuevo servicio web en Netbeans

Para crear un nuevo servicio web, nos dirigimos a Archivo > Proyecto Nuevo > Java >Biblioteca de clases Java.

Hacemos clic en siguiente y creamos un nuevo proyecto llamado AxisCalc y hacemos clic en Terminar.

A continuación, una vez creado el proyecto, hacemos clic con el botón derecho sobre Paquetes de Fuentes y seleccionamos Nuevo > Otro > Web Services > Axis2 Service from Java. Hacemos clic en siguiente y seleccionamos “crear un proyecto vacío” si no tenemos ninguna fuente java ya creada. La nueva clase se va a llamar AxisCalcService dentro del paquete axiscalc.

Una vez generada la clase, le añadiremos el siguiente código el cual es una simple modificación del HelloWorld facilitado por defecto por Netbeans:

 package axiscalc;
/**
 *
 * @author Aitor
 */
 public class AxisCalcService {
/** Sample method
 */
 public int calc(int a, int b) {
 return a+b;
 }
}

Esta clase contiene un método llamado calc que nos devuelve la suma de dos enteros facilitados. Si nos fijamos en este proyecto dentro del arbol de proyectos (a la izquerda de la pantalla) veremos como, en Axis2 Web Services, dentro de nuestro servicio ha aparecido un nuevo elemento llamado “calc” el cual devuelve un entero (int). Hacemos clic con el botón derecho sobre AxisCalcService y seleccionamos “Deploy to server“. Esta opción nos va a permitir añadir este servicio al paquete axis2.war descargado anteriormente con lo cual, si accedemos nuevamente a http://localhost:8080/axis2/services/listServices podremos observar nuestro servicio recién creado.

Si accedemos a http://localhost:8080/axis2/services/AxisCalcService/calc?a=10&b=5 observaremos como el servicio acabado de crear realiza la suma de los operadores a y b, que, en este caso, dan un resultado de 10+5=15.

En este punto, ya tenemos un servicio web Axis sencillo, creado con Netbeans y funcionando sobre Apache Tomcat.

Posts relacionados:

Anuncios

9 Responses to Web Services con Axis2, Apache Tomcat y Netbeans

  1. Pingback: Instalación Axis2 « Aitor Rigada

  2. Joseph Law says:

    gracias!!! me ayudo mucho ^_^

  3. arigada says:

    De nada Joseph, de eso se trata :). Gracias a ti por visitar el blog!

  4. JFRB says:

    Mil gracias Aitor… me fue de muchisima ayuda. De hecho si tienes tutoriales con ejemplos mas avanzados o complejos, te agradeceria, pues tengo que hacer un servicio web y estoy aprendiendo con tus tutoriales. 🙂 Gracias.

  5. Pingback: Web Services con Metro 2.1 y Apache Tomcat 7 « Aitor Rigada

  6. Luis says:

    Muchas gracias, una pregunta: ¿después de hacer tu web service en una java application, se puede crear un jar de la aplicación e importarlo a una web application para usar el web service ahí
    ?

  7. Aitor Rigada says:

    Hola Luis,

    Si, claro que puedes, Netbeans te da la opción de generar un war y puedes llevártelo a cualquier servidor Tomcat para utilizarlo siempre que éste tenga las librerías necesarias para trabajar con web services. Al llevarlo a otro servidor, éste te va a desempaquetar automáticamente tu archivo war creado la estructura de directorios necesaria y activando el servicio.

    Gracias por pasar!

    Un saludo!

  8. Luis says:

    Gracias por responder Aitor, pero resulta que no me expliqué bien, espero me puedas auxiliar para entender como funcionan los Web Service. Resulta que también deseo hacer una app android (en mi caso para un sistema de reinscripciones). Junto conmigo, otros compañeros están creando la Web Application del sistema con netbeans. Entonces mis compañeros están creando los entities, los DAOS, la conexión con la base de datos,etc; es por eso que deseaba usar axis2 para crear un web service que comunique la Web Application con mi app de android para poder usar sus DAOS y realizar modificaciones a la base de datos; ¿es esto posible?. Yo he investigado que sí es posible, pero el problema que tengo es que en una Web Application para netbeans NO me da la opción: “Paquetes de Fuentes >Nuevo > Otro > Web Services > Axis2 Service from Java”, es por ello que quería copiar los Paquetes de Fuentes de la Web Application (que hacen mis compañeros) a una Biblioteca de Clases de Java y ahí crear mi Web Service para después desplegar el Web Service, tal como lo muestras en tu tutorial.
    Al hacer lo anterior en el tomcat tendría el axis2.war y además otro archivo WAR correspondiente a la web application que realizan mis compañeros (ambos WAR accedería y modificarían la misma base de datos). ¿es posible tener dos WAR que modifiquen la misma base de datos ?¿o lo que necesitamos es crear un solo archivo WAR (el del Web Service) y hacer el cliente android que consuma el Web Service y otro cliente de la Web Application que también consuma el Web Service?¿o existe otro método para crear el axis2 Web Service dentro de una Web Application para netbeans?
    Muchas gracias de nuevo.

  9. Pingback: Configurar SSL para Tomcat 7 en Linux « Aitor Rigada

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: