jeudi 11 octobre 2007

Tutoriel JAX-WS - Partie IV (Spring)

Quatrième partie de la série "Tutoriel JAX-WS" : Intégration de Spring avec Metro. Cette partie est destinée à des personnes connaissant un minimum Spring. L'objectif est d'utiliser Spring pour configurer le déploiement du Web Service en lieu et place du fichier sun-jaxws.xml.
Ceci est intéressant si vous avez déjà Spring sur votre projet. Dans ce cas, on aura alors accès à tous les bienfaits de Spring pour configurer notre service : AOP, injection de dépendance, ...

Intégration de Spring au projet

Avant de pouvoir utiliser Spring, il faut d'abord l'intégrer à notre application. Pour ceux qui veulent un lien, la dernière version (2.0.7) est ici (prenez la version avec les dépendances).
On va faire simple et mettre le fichier spring.jar (dans le répertoire dist de la distribution Spring) dans le répertoire WEB-INF/lib de notre projet.

Au niveau dépendances, nous allons faire simple également. On se limitera à copier le fichier commons-logging.jar (du répertoire lib/jakarta-commons de la distribution Spring) dans notre répertoire WEB-INF/lib.

Nous en avons terminé avec l'intégration de spring. Maintenant, nous allons ajouter une extension pour combiner JAX-WS et Spring.

Intégration de l'extension JAX-WS-spring

Il existe une extension JAX-WS (dans les projets JAX-WS commons) qui permet de configurer nos services Web avec Spring. Vous la trouverez ici. Elle reste malheureusement assez peu documentée ...

Cette librairie à intégrer dans notre webapp (répertoire WEB-INF/lib) se nomme jaxws-spring-1.7.jar. Seule cette librairie ne suffira pas. Il nous faut ajouter une librairie externe permettant l'ajout d'extension spring : xbean-spring, détail important que je n'ai pas vu dans la documentation...

Nous sommes maintenant prêt à modifier notre configuration.

Descripteur de déploiement (fichier web.xml)

Nous allons ajouter le listener de Spring classique pour charger la configuration du (des) fichier(s) Spring :
Et changer de servlet pour en prendre une spécifique pour Spring :

Configuration Spring (fichier applicationContext.xml)

Il ne reste plus que la configuration Spring qui se fait dans le fichier WEB-INF/applicationContext.xml de la manière suivante :

Il ne vous reste plus qu'à redémarrer votre Tomcat et re-tester votre Web Service ...


10 commentaires:

Damien a dit…

Bravo pour cette série de tutorials. C'est clair et bien présenté.

Laurent a dit…
Ce commentaire a été supprimé par l'auteur.
Laurent a dit…

Merci pour l'encouragement.
J'ai encore quelques sujets sous le coude pour finir la série mais cela arrive en fonction du temps que j'ai :
- Client JAX-WS
- Plug-in SOAP UI pour eclipse
- Exposition d'un EJB3
...

Laurent

morgoth a dit…

J'adore tes articles sur les WS. Je sais pas si ça viens de la manière dont tu présente ou du fait que JAX-WS fonctionne nickel par rapport à mes essais de Axis 2, mais j'ai réussi à faire tout fonctionner du premier coup, et en plus avec Maven 2.

Juste une petite remarque : les images de code, c'est super pénible. En effet, pas possible de copier/coller, et donc faut tout recopier à la main...

Laurent a dit…

Merci pour ton retour morgoth.

J'ai mis les images de code pour gagner du temps ... Je vais essayer de les mettre en HTML pour permettre le copier/coller.
On m'a également remonté l'idée de mettre des liens vers les autres parties au début de chacune d'elle.

Laurent

morgoth a dit…

Sinon, je sais pas si tu sais comment faire : je cherche à sécuriser mon Web Service. Pour cela, j'aimerais utiliser WS-Security. J'ai regardé la doc de Metro, et ils ne parlent (évidemment) que de la méthode utilisant le Wizard de Netbeans.

Un petit article sur WS-Security avec Metro + Eclipse serait vraiment cool.

terry a dit…

Chouette tuto,
pour le code, peux-tu seulement nous permettre de télécharger le code dans un zip ?

Landry a dit…

Merci beaucoup pour cette série. Je cherchais une alternative efficace pour remplacer le lourdingue Axis, et ton tutorial m'a définitivement convaincu d'adopter Metro. Rarissime de trouver des articles d'une telle qualité en français.... Encore bravo !
Seul (léger) reproche : les images de code source, comme déjà dit précédemment ;-)

Anonyme a dit…

Mercu pour le tuto, ca a l'air super simple.
Seulement voilà, je n'arrive pas à démarre mon Tomcat, Eclipse me signale une erreur sur le fichier applicationContext.xml :
"Referenced file contains error :
http://jax-ws.dev.java.net/spring/servlet.xsd"

Une idée ??

Merci !

Anonyme a dit…

Bonjour,
L'article est excellent, je l'ai fait tourné sous tomcat sans problème, mais je n'arrive pas à le faire tourner sous weblogic 10 :
Error creating bean with name 'com.sun.xml.ws.transport.http.servlet.SpringBinding#0' defined in class path resource [applicationContext-ws.xml]: Cannot resolve reference to bean 'addService' while setting bean property 'service'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'addService': FactoryBean threw exception on object creation; nested exception is java.lang.NoSuchMethodError: com.sun.xml.ws.server.EndpointFactory.verifyImplementorClass(Ljava/lang/Class;)Z

J'ai un EAR qui contient le war, j'ai ajouté tous les jars et dans le war et dans l'EAR, la méthode verifyImplementorClass de la class EndpointFactory existe bien ...

Si quelqu'un pouvait m'aider !!!!
Merci d'avance Laurent