Servicio web con eclipse, Xfire y AXIS2

Tiempo atrás, escribí mi primer post sobre servicios web en Java, se trataba de un tablón de mensajes realizado con JDeveloper, algunos compañeros me tacharon de “básico” por utilizar asistentes para generarlo en lugar de AXIS y/o derivados y por no crear los esqueletos a mano. Y yo pensé, no voy a reinventar la rueda, si alguien ha facilitado la creación de servicios web.. bienvenido sea..

Así pues, hoy llego con otra entrada sobre servicios web, de la misma manera que antes, lo más sencillo posible, para que con conocimientos mínimos podamos crear un servicio web accesible desde cualquier lugar y aplicación.

Para su implementación esta vez he usado eclipse, herramienta que utilizo en el trabajo y que a día de hoy considero una de las mejores para programar, el plugin de MyEclipse y el framework (JAVA-SOAP), Xfire.

Crear un servicio web con Xfire (ServidorSW)

Nuevo proyecto

Creamos un nuevo proyecto, que sea del tipo “Web Service Project” (MyEclipse/J2EE Projects/ Web Service Project) .

Aquí nos dará dos opciones a elegir, por un lado si queremos hacer el servidor, y por el otro el cliente. De momento empezaremos por el servidor, así pues, una vez seleccionado el proyecto del tipo “Web Service Project” que habíamos creado antes, marcaremos la opción “Create web service form java bean (bottom-up scenario)”

En la siguiente pantalla, decidiremos el nombre del proyecto, la especificación (que versión de J2EE usar) y la ruta.

Una vez aceptado los parámetros, pasaremos a configurar nuestro servlet Xfire, donde decidiremos algo muy importante, el nombre de la ruta a nuestro servicio web “Servlet mapping” y la localización del fichero de configuración del servicio web, el services.xml.

Por último, tendremos que seleccionar las librerías que queramos incluir en nuestro servicio web, para nuestro ejemplo, necesitaremos cargar, las Xfire 1.1 Core y Xfire 1.1 HTTP client.

Implementamos nuestro servicio web

Ya tenemos nuestro servicio web creado, ahora necesitaremos implementarlo, para ello, pulsaremos botón derecho sobre nuestro proyecto, “New” y “Other”. Al abrirse la nueva ventana, tendremos que navegar desde la carpeta My Eclipse, Web, Web Services y por último seleccionar “Web Service”.

Se nos abrirá otra ventana, donde deberemos seleccionar de entre todos nuestros proyectos web en el que queramos generar las clases que implementarán el servicio, importante, si tenemos ya las clases que queramos implementar como servicio web, no deberemos hacer nada más, en caso contrario, deberemos seleccionar la opción de “Create new Java bean”

Una vez seleccionado, decidiremos el nombre del servicio web y sobretodo, si tenemos una interface y su implementación ya realizadas, las incluiremos en nuestro proyecto, sino, (habremos seleccionado la opción anterior de “Create new Java bean” ) nos la generará por defecto.

Por defecto, Xfire, nos generará un método example, al que se le pasa un String y lo devuelve.

En SOAP/Servlet configuration recomiendo dejar puesto en style/use la opción de “wrapped/literal” y en Servlet Scope “application”. Sin estas configuraciones, dará problemas con clientes AXIS.

Una vez terminado, ya tendremos un ejemplo básico de servicio web, para hacerlo funcionar, si tenemos configurada una conexión a un servidor J2EE o tomcat, la usaremos para hacer el deploy del servicio, sino, lo haremos a mano.

Una vez en el servidor, desde eclipse tenemos la opción de “Launch service web explorer” para poder acceder al servicio web, sino, desde cualquier navegador podremos utilizarlo mediante la dirección:

*NS = NombreProyecto
*NSW = NombreServicioWeb

http://localhost:8080/NP/Servletmapping/NSW?wsdl

Conectar a un servicio web con Xfire (ClienteSW)

Como vimos antes, al principio, cuando generamos un servicio web, podemos decidir si hacer un cliente o un servidor, de aquella manera, simplemente seleccionando el fichero WSDL se generará automaticamente la plantilla del cliente, si no dispusiéramos de un fichero WSDL o queremos hacerlo de otra manera, explicaré los pasos.

Este proyecto no tiene por que ser de tipo “Web Service”, ahora seleccionaremos un proyecto “Java”.

Lo primero es copiar la interface de nuestro servidor en nuestro cliente, ya que tendrá que implementar los mismos métodos.

Si no hemos incluido las librerías necesarias de Xfire las incluimos, necesitaremos al menos las siguientes:


import org.codehaus.xfire.XFire;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

Y ya que vamos a trabajar con direcciones URL, tendremos que importar la excepción java.net.MalformedURLException en nuestro proyecto.

Para conectarnos realizaremos un método denominado CallWebService()

 public static byte[] callWebService()    throws MalformedURLException, Exception {

//Creamos un objeto de tipo Service (matadata)
Service serviceModel = new ObjectServiceFactory().create(IreportesWS.class);

//Necesitaremos un objeto XFire y su proxy asociado
XFire xfire = XFireFactory.newInstance().getXFire();
XFireProxyFactory factory = new XFireProxyFactory(xfire);

//Incluiremos la URL del servicio Web, sin el ?wsdl al final
String serviceUrl = "http://localhost:8080/NP/Servletmapping/NSW";

//Cargamos la interface para poder invocar los métodos del servicio web
InterfaceWS cliente = null;
try {
cliente = (InterfaceWS) factory.create(serviceModel, serviceUrl);
} catch (MalformedURLException e) {
System.out.println("ClienteWS.callWebService(): EXCEPTION: " + e.toString());
}

//Si todo ha ido bien, podremos invocar al servicio web
String ejemplo= "";
try{

ejemplo= cliente.example("Esto es un ejemplo básico");

} catch (Exception e){
System.out.println("ClienteWS.callWebService(): EXCEPTION: " + e.toString());
}
//Si queremos mostrar los resultados en pantalla
System.out.println("ClienteWS.callWebService(): respuesta=" + ejemplo);

//Si queremos devolver los resultados
return ejemplo;
}

Ahora, con invocar este método, podremos conectar con el servicio web y utilizar sus servicios.

Conectar a un servicio web de Xfire con AXIS2 (ClienteAxis2SW)

** Para realizar este cliente, se necesita Eclipse IDE for Java EE Developers, cualquier otro eclipse es posible que no tenga la configuración necesaria.

Muchos, los no-documentados, siempre tienden a tachar de herejía lo que conocen, como puede ser el caso de Xfire.

Yo nunca lo había usado, es más, ni lo conocía, hasta que gracias a MyEclipse empecé a trabajar con él. Me ha resultado muy cómodo y potente, ya que el servicio web que he realizado funciona a las mil maravillas, pero aún así, habrá gente que le ponga pegas.

¿Y cuál es la mayor pega que se le puede poner? pues por ejemplo, que no sea compatible o no funcione bien con los servicios web más usados/conocidos hoy en día, por ejemplo AXIS, y es por ello, que he decidido también poner un cliente realizado con AXIS que conecte a mi servicio web realizado con Xfire.

Para empezar, seleccionaremos “New Project” y la opción de “Dynamic Web project”, elegiremos un nombre para nuestro proyecto y en la siguiente pantalla, “Project facets” activaremos la casilla de “Axis2 Web Service”, acabaremos de rellenar todas las opciones y finalizaremos el proceso.

Una vez generado el proyecto, pulsaremos sobre “New”, “Other” y “Web Service Client”.

En esta pantalla, en “service definition” tendremos que buscar el servicio web (la ruta) de la que queramos generar el cliente. Ésta ha de ser de la forma : “http://localhost:8080/NP/Servletmapping/NSW?wsdl”

Una vez seleccionada la ruta y la carpeta donde se generará el código del cliente, sólo nos queda configurar un main. Supongamos que el nombre del servicio web sea ServidorWS.

public static void main(String[] args) {
try{
ServidorWS service = new ServidorWSLocator();
ServidorWSHttpBindingStub stub = new ServidorWSHttpBindingStub(new URL("http://localhost:8080/NP/Servletmapping/servidorWS"), service);
String  ejemplo= "";
ejemplo = stub.example("hola, esto es otro ejemplo básico con AXIS");

if (ejemplo != null){
System.out.println("Bien");
} else{
System.out.println("Mal");
}
} catch (Exception e) {
e.printStackTrace();
}
}

Y ya tenemos nuestro cliente AXIS funcionando correctamente.

PD: El código puede que no funcione al 100% ya que no ha sido probado, pero el proyecto real del que se ha sacado este ejemplo funciona correctamente.

Artículos relacionados

Aleatorio



Comentarios en Servicio web con eclipse, Xfire y AXIS2

Hay 9 Comentarios en el artículo Servicio web con eclipse, Xfire y AXIS2, ¿a qué esperas para dar tu opinión?


  1. Inaicool dice:

    Bueno majo, aquí solo paso a saludarte porque no tengo ni idea de estos historios de informático vaguete con pelusillas debajo del armario y poca formalidad empresarial!! ñañañaña :P

    Bueno, bueno… no me tires los perros todavía eh? :D
    Que he visto tu comentario e mi blog y tengo nuevo post, ah!! y que he visto el video que tienes puesto en el post anterior por la tele esta tarde en canal 4 después de ver fama. Hala!! meteté conmigo!! :P

  2. Emirodgar dice:

    Ya me vas calando.. jejejeje
    Lógico, ese es un pedazo de vídeo.. tiene mucho peso xD
    ¿FAMA? ¿ves FAMA y no los hombres de Paco? (sin comentarios..)

  3. Inaicool dice:

    Los hombres de Paco… bah! y que tienen los hombres de Paco que no tengan los hombres de fama… vale, valeee….!!! que no son maricones!!, ahí me has cazao’ :P

    */… :P …/*

  4. Emirodgar dice:

    Jajajaja y eso es un gran punto eh?! :p
    Yo es que los reality shows esos no los puedo ni ver…

  5. pau dice:

    claro que no va. nos dedicamos a llenar paginas de mierda con copy-paste…

    cobras mucho con la publicidad?

  6. Emirodgar dice:

    pau, primer punto, ese código no lo vas a encontrar en ninguna otra página por que lo he hecho yo, no es copy paste, y segundo funciona a la perfección,

    Si eres tan inútil de no saber usarlo.. o eres de los que tienen que recibir todo con un lazo y que no te hagan pensar mucho ese es tu problema, no vengas aquí de “guay” y menos preguntando cuanto cobro cuando apenas hay 1 sólo anuncio de publicidad en mi página.

  7. Rafael Glez dice:

    Hola que tal soy nuevo en esto de slos web services trabajo con netbeans 6.5 y me estan pidiendo ponerle seguiridad al web service he estado buscando y encontre que con xfire lo podria implementar wss4j pero la verdad no tengo mucha idea de como hacerlo ojala me pudieran aydar Gracias

  8. Aldo dice:

    Muchas gracias por este pequeño tutorial me salvo la vida, sirve a la perfeccion.

  9. diego dice:

    no pasa nada con este tutorial

Deja un comentario