martes, 16 de octubre de 2012

CXF utilizando JAX-WS integrado con Spring

Apache CXF es un framework de servicios de Software Libre. CXF nos ayuda a construir y desarrollar servicios utilizando JAX-WS.

CXF soporta 3 tipos de servicios:

1. SOAP
2. REST-ful - REST support
3. CORBA

Un tutorial que explica paso a paso:

http://www.dosideas.com/noticias/java/396-servicios-web-con-apache-cxf.html


IMPORTANTE - Para el Cliente que consumirá el WS:

Lo que se tiene que tener en cuenta es que cuando se realice el cliente, vamos a tener que generar la interfaces con todos los objetos resultantes de las respuesta y parámetros de entrada de los métodos para comunicarnos con los WS.
Dichas interfaces no pueden estar sin las anotaciones (@WebService) que determinan como hacer el binding, por mas que se haya configurado en el applicationContext.xml de la siguiente manera:

 <jaxws:client id="helloClient"
                  serviceClass="demo.spring.HelloWorld"
                  address="http://localhost:9002/HelloWorld" />




Es decir, con la anotación @WebService alcanzo para que funcione pero no estamos seguro si es la manera correcta de hacerlo.

Para no tener problemas lo mejor es generar las clases cliente (que luego vamos a utilizar en la aplicacion que va a consumir el WS) es utilizar la herramienta de CXF (http://cxf.apache.org/download.html) mediante el comando wsdl2Java (http://cxf.apache.org/docs/wsdl-to-java.html):

wsdl2java http://localhost:8080/SpringCXFProject/HelloWS?wsdl

o bien:

wsdl2java -p spring.ejemplos.diecisiete.ws.cxf.client.cxfgeneratedcode http://localhost:8080/SpringCXFProject/HelloWS?wsdl

Otra forma de generar los clientes es directamente con JAVA 6 utilizando wsimport:

wsimport -p spring.ejemplos.diecisiete.ws.cxf.client.jaxwsgeneratedcode -keep http://localhost:8080/SpringCXFProject/HelloWS?wsdl

Ver esta pagina en la parte del cliente que ahi nos indica como generar las clases clientes

http://blog.jeshurun.ca/technology/jax-ws-web-services-with-spring-and-cxf

En cualquier caso, como estamos haciendo un cliente de WS con Spring integrado con CXF, y en el appContext.xml como tenemos un tag propio de CXF llamado <jaxws:client.... es que vamos a tener que agregar en el POM las dos dependencias de CXF también en el cliente (las mismas que tenemos en el WS):


<!-- Dependencias de CXF http://cxf.apache.org/docs/using-cxf-with-maven.htm -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.2.3</version>
</dependency>

<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.2.3</version>
</dependency>


RESUMEN:

Para poder consumir el WS utilizando Sproing integrado con CXF, tenemos 3 alternativas:

1. Generar el cliente a mano utilizando una interface pelada solo con la anotacion WebService
2. Generar el cliente utilizando la herramienta CXF wsdl2java
2. Generar el cliente utiilizando la JDK6 wsimport

Las dependencias de CXF para maven las sacamos de aqui (ojo que estas dependencias van tanto en el proyecto de WS en si como en el cliente que consumira dicho WS):

http://cxf.apache.org/docs/using-cxf-with-maven.html

El codigo de este ejemplo lo podemos encontrar aqui:

http://gwt-spring-hibernate-maven.googlecode.com/svn/trunk/SpringProject/src/main/java/spring/ejemplos/diecisiete/ws/cxf/client/

Para leer un poco mas...
http://unpocodejava.wordpress.com/2010/03/30/web-services-con-cxf/
http://cxf.apache.org/docs/writing-a-service-with-spring.html

Al integrar el WS con con Spring, permite la publicación de beans de Spring como Web Services

Otro código de ejemplo se lo puede encontrar aquí:

https://gwt-spring-hibernate-maven.googlecode.com/svn/trunk/SpringCXFProject





No hay comentarios:

Publicar un comentario