Question

Je voudrais savoir si quelqu'un peut recommander une bonne bibliothèque pour générer des stubs java Webservices en tant que clients.

Actuellement, j'utilise un produit intégrant un générateur nécessitant uniquement le WSDL, puis créant les classes et méthodes nécessaires.

Mon problème, c’est qu’il jette des avertissements et ne crée aucune méthode pour certains services Web que j’essaie d’utiliser.

Le vrai problème est qu’il n’explique pas le problème (pour que je puisse aller avec le propriétaire du service Web et le faire modifier), ni me laisser modifier la sortie afin que je puisse probablement résoudre le problème moi-même.

Pourtant, les propriétaires des webservices (parce que cela se produit avec plusieurs ws différents) disent que leur ws fonctionne bien et que si j’utilise soapUI ils travaillent réellement !!!

J’ai jeté un coup d’œil rapide aux bibliothèques utilisées par soapUI et j’ai l’air prometteur.

Je sais que c'est Axis qui devrait faire le travail, mais je crains que que mon générateur défaillant utilise déjà cette bibliothèque (ce qui me fait penser qu'il échouera à nouveau)

Et dernièrement, je ne sais pas si ces deux bibliothèques génèrent le stub source Java ou ont uniquement des méthodes telles que

Object [] args = ...;
service.inkvoke("updateCustomer", args );

Quand j'aimerais avoir quelque chose comme:

CustomerWs cws = ....
cws.updateCustomer(custId, custName, custAddress /*etc*/ );

Ainsi, tout le monde a un GOOD générateur de stubs ws à recommander?

Je suis sur le point de coder le mien à la main, mais cela prendra certainement plusieurs jours pour être acceptable

Était-ce utile?

La solution

Qu'est-ce que vous utilisez actuellement? J'utilise Axis Wsdl2Java en tant que tâche Ant. Il génère les types de stubs que vous voulez. Fonctionne très bien, bien qu'établir le chemin d'accès aux classes pour exécuter la construction ait été un peu pénible (il y avait une poignée de binaires que je devais retrouver et inclure). Dans mon fichier de compilation ant, il ressemble à ceci:

<taskdef name="axis-wsdl2java" classname="org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask" />
<target name="foo">
<axis-wsdl2java
              output="${build.dir}"
              testcase="false"
              verbose="true"
              typemappingversion="1.2"
              url="http://ws.domain.com/url/of/WebService?wsdl" />
<!-- Compile, etc... -->
</target>

Autres conseils

Faites très attention lorsque vous vous référez à "Axis": Apache Axis 1 a été abandonné dans début 2006 avec des problèmes de sécurité des threads conduisant à des blocages et à des rotations du processeur (que nous avons connus). Vous allez profondément regretter de l'utiliser. Apache Axis 2 est une réécriture complète et mérite un coup d'oeil. Mais je vous suggèrerais d’abord de regarder Apache CXF et Glassfish Metro .

Mise à jour: voici les rapports de bogues sur les impasse et 100% de rotation du processeur . Voici le patch proposé par Cyrille Le Clerc il y a trois ans, qui n'a jamais été appliqué.

Nous avons éliminé nos blocages et nos rotations en recodant notre client en Java pur. Et puis le serveur Axis a refusé de parler avec nous, renvoyant des erreurs HTTP 500. Nous devions prétendre à tort que nous étions un client Axis pour obtenir une réponse appropriée. L’interopérabilité SOAP n’était pas une priorité pour l’équipe de l’Axe 1.

J'aime Apache CXF - il s’intègre parfaitement à Maven via un plugin, et cela fonctionne. Je l'utilise depuis un certain temps pour la génération de code de raccord client et, dans la dernière entreprise dans laquelle j'ai travaillé, ils l'utilisaient également pour la partie serveur de WS.

Dans les derniers projets sur lesquels j'ai travaillé avec CXF + Maven + Subversion, nous n’incluions pas les classes générées dans Subversion, mais uniquement une copie du fichier WSDL. Les classes de stub ont été générées dans le fichier "generate". but de Maven.

Apache Axis 2 est la voie à suivre ... mais vous devrez peut-être jouer un peu pour bien faire les choses. C'est peut-être la façon la plus courante de le faire. Peut-être que l'outil que vous utilisez est basé sur l'axe 1?

Je recommanderais certainement d'utiliser quelque chose basé sur des API basées sur des standards. Cela voudrait dire API JAX-WS. Apache CXF et Metro sont les deux principales implémentations de JAX-WS, bien que JBoss ait également une implémentation. Axis2 a une implémentation non certifiée, mais aucun support de génération de code.

La meilleure partie de l'utilisation d'une API basée sur des normes est que si vous rencontrez un problème avec un produit, vous pouvez essayer l'autre. Dans de nombreux cas, j’ai déjà vu, l’autre produit ne fonctionnait pas non plus, mais créait un message d’erreur différent ou similaire qui permettait de diagnostiquer le fait que c’était vraiment un problème dans notre propre code ou wsdl.

De plus, JAX-WS est directement intégré à Java6. Si vous prévoyez d’exécuter sur Java6, vous pouvez l’utiliser sans devoir faire face à des fichiers jar supplémentaires.

La dernière version de JAX-WS dans le métro ( http://metro.dev.java.net ) est une jolie couche d'abstraction. Cela demande un peu d’adaptation, mais c’était beaucoup plus intuitif pour moi que certaines des autres options disponibles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top