JavaBean en un servicio web Axis2

0
12485

Crear una estructura compleja del tipo JavaBean en un servicio web Axis2

0. Índice de contenidos.

1. Introducción

En este tutorial se pretende enseñar a crear otra de las estructuras complejas que se pueden implementar
en los servicios web : los tipos compuestos ( En Java serán los JavaBeans)

Por regla general en la programación no solo se limita al uso de los elementos que facilita el lenguaje,
sino que en muchos casos se permite la creación de elementos propios.

Un JavaBean es un componente Java que se utiliza para encapsular varios objetos en un único
objeto, por asi decirlo haría las veces de una estructura de registro de C, es decir, un tipo
que esta compuesto por otro tipos o por tipos simples.

Para que un objeto Java sea considerado un JavaBean requiere cumplir una serie de normas :

  • Disponer de un contructor sin argumentos
  • Sus atributos deberían de ser accesibles mediente métodos SET / GET
  • Seguir las convenciones de nomenclatura estándar (nombre clase, nombres atributos, etc.)
  • Implementar de serializable

2. Entorno.

El tutorial está escrito usando el siguiente entorno:

3. Instalacion.

Para la realización de este tutorial ser requiere :

1) Tener instalada servidor de aplicaciones Apache Tomcat (En mi caso uso la versión 7.0)

2) Tener la versión binaria de Axis2 (En mi caso uso la versión 1.5.1) descargada y descomprimida en un directorio

3) Tener la versión WAR de Axis2 (En mi caso uso la versión 1.5.1) desplegada en el Tomcat

4) Tener instalada la herramienta SOAP UI

Nota : Utilizaremos para su desarrollo la herramienta Eclipse

4. Crear el Servidor

PASO 1 : Crear un proyecto Java llamada Axis2JavaBeanWS

Se creará una estructura del proyecto como la siguiente

PASO 2 : Crear el paquete «com.acme.ws.servidor» sobre la carpeta src

PASO 3 : Crear una clase Java en el paquete anterior llamada Persona que será el JavaBean

Crear una clase con 3 atributos : nombre, apellidos y email.

package com.acme.ws.servidor;

public class Persona {

	private String nombre;
	private String apellidos;
	private String email;
	
	public Persona() {
		super();
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellidos() {
		return apellidos;
	}

	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}	
}

Nuestro proyecto quedaría asi :

PASO 4 : Crear una clase Java llamada BasicService en el paquete anterior

En este caso se definirán dos métodos que serán los servicios disponibles para los clientes.

En el método «login» se devolverá una cadena con los atributos de nombre y email indicando como
que se ha autenticado sin probemas.

En el método «loginEmail» se devolverá un JavaBean que se inicializará si y solamente si coincide el email
que se pasa como parámetro

package com.acme.ws.servidor;

public class BasicService {
	
	public String login(Persona persona){
		return "[Login] | Nombre "+persona.getNombre()+" | Email "+persona.getEmail();
	}
	
	public Persona loginEmail (String email){
		
		Persona result = null;

		if (email.toUpperCase().equals("ADMIN@ADMIN.COM")){
			result = new Persona();
			result.setNombre("Víctor");
			result.setApellidos("Madrid Triviño");
			result.setEmail("admin@admin.com");
		}
		
		return result;
	}

}

Nuestro proyecto quedaría asi :

PASO 5 : Crear la carpeta META-INF a nivel de la carpeta src

PASO 6 : Crear dentro de la carpeta META-INF el descriptor de servicio : services.xml

Introducimos el siguiente texto :


  	Servicio que hace uso de Java Bean
   	
   		
   	
   	com.acme.ws.servidor.BasicService
   	
   	

Nota : Recordar añadir la línea inicial : <?xml version=»1.0″ encoding=»UTF-8″?>

PASO 8 : Crear el fichero de ensamblado AAR (Axis ARchive)

Para ello exportar el proyecto como si fuera un JAR pero poniendo de nombre Axis2JavaBean.aar

Nota : No incluir .classpath ni .project

Arrancar Tomcat si esta parado

PASO 9 : Copiar el fichero AAR en <CATALINA_HOME>\webapps\axis2\WEB-INF\services

PASO 10 : Verificar en la consola de Tomcat la inclusión de este servicio

PASO 11 : Verificar el servicio desde la consola de administracion de Axis : http://localhost:8080/axis2/services/listServices

PASO 12 : Obtenemos el WSDL del servicio : http://localhost:8080/axis2/services/Axis2JavaBean?wsdl

Guardamos el fichero anterior que vendrá dado en formato XML por formato WSDL

5. Probar el servidor con SOAP UI

PASO 1 : Cargamos la herramienta

PASO 2 : Creamos un proyecto nuevo con la URL del WSDL anterior

PASO 3 : Realizamos un test sobre el método «loginEmail»

Para ello introducimos el siguiente email que será reconocido por el servidor :
<ser:email>admin@admin.com</ser:email>

PASO 4 : Ejecutamos el test y verificamos la respuesta

PASO 5 : Realizamos un test sobre el método «login»

PASO 6 : Ejecutamos el test y verificamos la respuesta

Con esto tendremos probado nuestro Servidor 😉

6. Crear el cliente

PASO 1 : Creamos un proyecto Java llamada Axis2JavaBeanWSCliente

Se generará una estructura similar a la siguiente

PASO 2 : Copiamos a nivel de raiz el fichero Axis2JavaBean.wsdl

PASO 3 : Generamos el Stub del cliente con la herramienta Axis2

Para ellos nos situamos por consola en el directorio del proyecto y ejecutamos la siguiente instrucción

  • Si Axis2 NO esta en el Path : %AXIS2_HOME%\bin\wsdl2java -uri Axis2JavaBean.wsdl
  • Si Axis2 esta en el Path : wsdl2java -uri Axis2JavaBean.wsdl

PASO 4 : Refrescamos el proyecto

Se habrán creado dos clases que nos permitirán comunicarnos con el servidor

PASO 5 : Incluir las librerías de Axis2

Con el botón derecho del ratón sobre el proyecto Properties -> Java Build Path , pestaña de
Libraries y pulsar sobre «Add Externar JARs»

PASO 6 : Crear un paquete «com.acme.ws.cliente»

PASO 7 : Crear una clase PruebaCliente.java

Esta clase dipondrá de dos métodos para realizar la llamada a los dos servicios

package com.acme.ws.cliente;
import java.rmi.RemoteException;

import com.acme.ws.servidor.Axis2JavaBeanStub;
import com.acme.ws.servidor.Axis2JavaBeanStub.Persona;


public class PruebaCliente {

	private static void login (){
	
		/*
		 * Utilizamos el stub generado a partir del wsdl que logran establecer
		 * la conexion con el web service proveedor.
		 */
		Axis2JavaBeanStub customer = null;
		Axis2JavaBeanStub.Login request = null;
		Axis2JavaBeanStub.LoginResponse response = null;

		try {
			// creamos el soporte y la peticion
			customer 	= new Axis2JavaBeanStub();
			request 	= new Axis2JavaBeanStub.Login();

			// establecemos el parametro de la invocacion
			Persona p = new Persona();
			p.setNombre("Víctor");
			p.setApellidos("Madrid");
			p.setEmail("admin@admin.com");
		
			request.setPersona(p);
			
			// invocamos al web service
			response = customer.login(request);

			// mostramos la respuesta
			System.out.println(response.get_return());

		} catch (RemoteException excepcionDeInvocacion) {
			System.err.println(excepcionDeInvocacion.toString());
		}

		
	}
	
	private static void logout (){
		
		/*
		 * Utilizamos el stub generado a partir del wsdl que logran establecer
		 * la conexion con el web service proveedor.
		 */
		Axis2JavaBeanStub customer = null;
		Axis2JavaBeanStub.LoginEmail request = null;
		Axis2JavaBeanStub.LoginEmailResponse response = null;

		try {
			// creamos el soporte y la peticion
			customer 	= new Axis2JavaBeanStub();
			request 	= new Axis2JavaBeanStub.LoginEmail();

			// establecemos el parametro de la invocacion
			request.setEmail("admin@admin.com");
			
			// invocamos al web service
			response = customer.loginEmail(request);

			Persona p = response.get_return();
			
			if (p != null){
				System.out.println("[LoginEmail]");
				System.out.println("Nombre : "+p.getNombre());
				System.out.println("Apellidos : "+p.getApellidos());
				System.out.println("Email : "+p.getEmail());
			}
			else {
				System.out.println("La persona recuperada es nula");
			}
			
		} catch (RemoteException excepcionDeInvocacion) {
			System.err.println(excepcionDeInvocacion.toString());
		}

		
	}
	
	public static void main(String[] args) {
		login ();
		logout();
	}
}

PASO 8 : Ejecutar la clase

Con esto habriamos conseguido tener un servicio web en el que se utiliza la estructura
compleja del tipo JavaBean tanto de entrada como de salida.

7. Conclusiones.

Con estas pequeñas aportaciones espero estar ayudar a entender un poco mejor las estructuras
complejas en SOAP. En el caso de este tutorial se ha utilizado algo muy habitual cuando uno envía
una estructura propia usando SOAP .Se ha tratado de que el ejemplo sea lo más claro posible
para facilitar su entendimiento sin entrar en ningúna complejidad a la hora de crear los
servicios proporcionados.

Ya casi tenemos dominado esto de las comunicación SOAP 😉

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad