Metro: pila de webservices de Sun. Integración con Maven 2
Ya
hemos hablado de Metro, y hemos visto en el primer tutorial https://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=metroWS cómo se usa y algunos ejemplos.
Debido
a que hay que utilizar diversas herramientas externas, el desarrollo
puede hacerse algo lento, ya que un cambio en un servicio o un wsdl
implicaría llevar a cabo el proceso de nuevo.
Sun
pone a nuestra disposición un plugin que permite llamar a las
herramientas de Metro e integrar los resultados en nuestros proyectos
(y además no hace falta que instalemos Metro en nuestro sistema).
Configurando el pom.xml
Lo primero vamos a indicar de donde tiene que
descargarse maven los plugins necesarios, y las dependencias de
nuestro proyecto (en lo que a librerías de Maetro se refiere):
... maven-repository.dev.java.net Java.net Repository for Maven 1 http://download.java.net/maven/1/ legacy ... maven2-repository.dev.java.net Java.net Repository for Maven 2 http://download.java.net/maven/2/
Son los 2 repositorios
de sun para maven. Aunque el primero es para maven 1, mediante la
etiqueta <layout>legacy</layout>
podemos
usarlo en maven 2.
... ... maven2-repository.dev.java.net Java.net Repository for Maven http://download.java.net/maven/2/ default
Definimos el repositorio de
plugins, también proporcionado por Sun.
Ahora vamos a mostrar qué
dependencias debe tener el proyecto para que podamos usar las
herramientas de Metro.
... ... com.sun.xml.ws jaxws-rt 2.1.3
esta dependencia tiene otras
dependencias transitivas que se agregarán a nuestro proyecto.
Configurando los plugins
Hasta ahora son las
configuraciones generales para cualquier proyecto en el que vayamos a
usar metro.
El plugin de Metro, como ya
comentamos, nos va a permitir usar las herramientas wsgen y wsimport,
desde maven.
Para el ejemplo de generar
un webservice a partir de un WSDL, e incluso el cliente de un
webservice, el plugin lo podemos definir de la siguiente forma:
org.codehaus.mojo jaxws-maven-plugin wsimport com.autentia.service true ${basedir}/src/main/java true maven-compiler-plugin 1.5
De esta manera cuando
construyamos nuestro proyecto con maven, se nos van a generar las
clases anteriores.
Veis que en la configuración
del plugin le indicamos los mismos parámetros que el ejemplo de la
herramienta en linea de comando del tutorial anterior.
El archivo wsdl lo toma por defecto de la carpeta
src/wsdl, aunque se puede configurar (os aconsejo que mireis la
página del plugin:
https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/wsimport-mojo.html.)
En este punto alguno os
podéis hacer la siguiente pregunta… pero si cuando construya el
proyecto, se genera el código necesario.. cómo escribo la clase
Skeleton o Stub del webservice (la clase del servidor o del cliente).
Un truco es hacer un proyecto que sólo contenga las clases que nos
genere este plugin, y apra el Skeleton y Stub, sendos proyectos que
dependan del primero (y así el código redundante lo tenemos
centralizado en un sólo poyecto).
¿Ya vamos dejando la cosa
fina, eh?
Veamos como configurar el
plugin para la generación de un webservice a partir de una clase:
org.codehaus.mojo jaxws-maven-plugin wsgen com.autentia.service.AddNumbersImpl maven-compiler-plugin 1.5
De esta manera el proyecto queda muy sencillito:
sólo tendremos la clase de implementación del webservice. El plugin
generará las clases necesarias, las compilará y las inyectará en
el empaquetado sin que nosotros tengamos que preocuparnos de ese
código. (podís ver la documentación del plugin en
https://jax-ws-commons.dev.java.net/jaxws-maven-plugin/wsgen-mojo.html)
Qué limpito queda todo!
Conclusión
Si
con Metro crear un webservice era sencillo, si nos aliamos con maven
la sencillez roza el paroxismo
Ya
habéis visto lo sencillo que es crear un servicio web y un cliente
de webservice con Metro (y hemos probado además que WSIT funciona!).
Ya
tan sólo quedaría ver RESTFull con Metro, en el último tutorial.