index

XFire s'appelle maintenant CXF : Une implementation JAX-WS (Web Services)

L'interrêt de cet API, c'est qu'il permet de deployer un web-service dans un tomcat simplement.
Si on veut deployer un web-service (côté serveur) dans une application "stand-alone", ou dans un serveur glassfish, l'implementation de jax-ws de java 1.6 suffit . (L'on rappelle qu'après avoir annoter les classes avec @webservice et les méthods avec @webmethod, l'on applique l'outil wsgen livré avec le jdk pour générer des artifacts qui seront éxécutés)
Cependant, elle ne permet de deployer le même service dans un tomcat! Il y a des problèmes de classloader et pas beaucoup de post sur le web.
Après avoir cherché pendant quelques jours... j'ai renoncé.
Au cours de mes recherche, j'ai lu le plus grand bien de xfire, qui a un fonctionnement un peu différent: Il ne necessite d'utiliser la moulinette wsgen.exe, mais demande à définir des interfaces pour les services (Ce n'est pas une contrainte très pénalisante, c'ets même une bonne pratique, non ?).
Surtout, Il peut s'employer avec Spring, ce qui est commode avec les tomcat.
L'inconvénient, ce sont les nombreuses dépendances à gérer. Heureusement, maven permet de les gérer assez simplement
Je développe ici un exemple.
La conclusion: c'est quand même lourd à developper! Mais Quoi d'autre ? Axis me semble pire.

Comment écrire un web Service

Les dependances sont les suivantes: (A rajouter dans le fichier pom.xml dans le tag "dependencies")
A l'heure où ces lignes sont écrites, la version stable est "2.0.4-incubator"
Les jars devront être rajouter soit dans lib de WEB-INF du war (Ce qui est automatiquement fait lorsque que l'on fait le war avec maven .Un peu lourd a déployer!!), soit dans la lib du tomcat. Il faut les copier à la main, mais une seule fois!

Le fichier web.xml

Le fichier Spring beans.xml

L'interface

Les annotation @Webservice concernent impérativement des interfaces , avec xfire.

L'implementation de l'interface

Comment tester ?

Avec un navigateur, il est possible de récupérer le wsdl du service.
Par exemple si le path sous lequel a été déployé le war est ws2,
http://www.java-consultant.com/ws2/HelloWorld?wsdl
http://www.java-consultant.com/ws2/HelloWorld retournera une page xml avec un message d'erreur.

Comment faire un client de test jax-ws pour tester?

On peut utiliser x-fire (ou cxf maintenant) et Spring :
Un premier fichier client-beans.xml

Et une classe de test, initialisant Spring:

Références