C'est quoi un framework web service? :
- coté client : de générer les classes à partir d'un WSDL permettant de créer une grappe d'objet correspondant au message SOAP du web service de façon transparente.
- coté serveur : de récupérer une requête HTTP SOAP, de transformer le contenu du message en une grappe d'objets, d'appeler une méthode java correspondant à la requête puis de récupérer l'objet en retour de l'appel de la méthode et de le transformer en réponse HTTP SOAP.
- Contract first : définir un contrat d'échange et ensuite de s'appuyer sur ce contrat pour développer le service à l'aide du framework.
- Code first : développer un service java et ensuite s'appuyer sur le framework pour qu'il expose la méthode sous forme de web service.
Les frameworks testés :
Je me suis attardé sur les frameworks les plus connus :
- Apache Axis2 (version 1.5.1)
- Apache Cxf (version 2.2.5)
- Spring ws (version 1.5.9)
L'objectif du bench est de mesurer le temps passé dans les couches techniques des frameworks web services en dehors du réel traitement que doit effectuer le web service et cela différent niveau de charge. Le tout est de pouvoir mesurer l'overhead engendré par les frameworks web services par rapport à un appel direct de méthode en java et de comparer cet overhead. Le bench se focalise sur les temps de traitements coté serveur :
Caractéristiques du bench :
- les web services exposés :
La requête en entrée ainsi que la réponse en retour sont représentatifs d'un "vrai" web service (dans le sens ou ce n'est pas un simple hello world) :
- 60 données unitaires
- 3 niveaux de profondeur
- requête SOAP de 3.75 Ko
- Du coté du client :
- Du coté du serveur :
- procédure du bench :
Résultats :

Voici le tableau détaillé :
Dans le cadre de ce bench, CXF est donc le framework le plus performant suivi d'assez prêt par Spring ws. Axis2 est clairement moins performant indépendamment du niveau de charge coté serveur.
Conclusion :
J'ai été confronté à quelques problèmes de déploiement sur JBoss à cause de librairies utilisées à la fois par les frameworks et par JBoss avec Axis2 et Spring ws. Sur cet aspect là, la communauté et la documentation autour de Spring permettent de résoudre rapidement le problème alors que pour Axis2, il a fallu creuser un peu plus.