Crowd en Java. J'ai donc pour cela utiliser les 2 principaux framework de web service du monde Java Open source : CXF et Axis2. L'idée de cet article n'est pas de comparer fonctionnellement ces 2 frameworks, mais juste vous livrer les résultats numériques de ces essais.
Le web service à appeler est le service SecurityServer de Crowd. C'est un gros service : le WSDL fait 120K, comporte 2793 lignes et 94 opérations. Pour chaque framework, j'ai :
J'ai donc essayé avec CXF, puis avec Axis 2 avec le mapping ADB, et, comme j'ai eu quelques problèmes, avec Axis 2 et le mapping XmlBeans. Dans les 3 cas, j'ai réussi à faire passer mes tests fonctionnels.
CXF | Axis2 ADB | Axis2 XmlBeans | Commentaire | |
Version | 2.1.6 | 1.5.1 | 1.5.1 | |
Outil de mapping XML | JAXB | ADB | XmlBeans | Pour CXF, j'ai utilisé l'option de JAXB generateElementProperty='false' pour simplifier le code généré par CXF. Je ne sais pas si l'équivalent existe avec Axis. |
Classes modifiées après génération ? | Oui | Non | Oui | Il faut modifier le code produit, car des classes sont générées dans le package java.lang (Exception, Throwable) |
Nombres de classes générées | 155 | 15 | 498 | Peu de classes pour Axis2 ADB, mais tout est dans la même classe. |
Nombre de lignes Java générées (LOC) | 4 748 | 54 814 | 17 798 | Il y a 10 fois plus de code pour Axis2 ADB que pour CXF. Cela est du au fait que CXF utilise des annotations au lieu de générer du code. |
Taille de la classe principale (LOC) | 483 | 54 233 | 17 239 | Avec Axis2 ADB, Eclipse plante toutes les 3 minutes à cause de la classe de 54K lignes. Le projet est donc quasiment inutilisable |
Nombres de resources générées | 0 | 0 | 1 269 | Contrairement aux autres, Axis 2 XmlBeans génère des fichiers de resources dont il a besoin au runtime. |
Taille du projet (code source) | 840 K | 4,6 M | 11 M | 11 M de code source pour un bouchon SOAP... |
Taille de la classe de test (LOC) | 134 | 175 | 233 | Le code le plus court et le plus joli est avec CXF. Avec Axis 2, il faut instancier plein d'objets supplémentaires liés au mapping XML. |
Temps d'initialisation du bouchon | 2 613 ms | 0 ms | 503 ms | CXF est long à s'initialiser (normal, il n'y a que peu de code, tout est dans les annotations) |
Temps d'exécution des tests | 847 ms | 1400 ms | 1357 ms | CXF va plus vite à l'exécution que les autres |
Bilan :
J'utilisais déjà CXF, il me faudra des raisons très convaincantes pour passer à Axis...