2009-07-13 14 views
0

J'ai un service fonctionnant à un endroit fixe dans le réseau, avec un WSDL attaché etc. Je peux facilement créer un client de jax-ws avec wsimport et les trucs habituels en faisant ceci seul, mais je ferais vraiment aimerait être en mesure d'appeler ce service depuis l'intérieur d'une autre application Web.Comment implémenter au mieux un client de service Web dans une application Web?

Malheureusement, je me heurte à quelques pièges ici. D'une part, tout fonctionne assez bien dans un conteneur Web régulier, mais pas sur jboss, qui met apparemment certaines classes incompatibles dans le répertoire endorsed faire le déploiement échoue avec:

java.lang.ClassCastException: com.sun.xml.ws.client.WSServiceDelegate cannot be cast to javax.xml.ws.spi.ServiceDelegate21 

Il y a une entrée de blog quelque part qui se propose de résoudre ce problème en supprimant les jax-ws jars approuvés, mais cela pourrait finir par casser autre chose sur ce serveur particulier et donc je me demandais s'il n'y a pas une meilleure façon d'isoler cela plus loin? S'appuyer complètement sur le support spécifique de j2ee est peut-être une option mais j'aimerais vraiment garder la possibilité de déployer l'application sur un simple conteneur web (jetty, tomcat, ...).

Répondre

3

Mon conseil est d'oublier JAX-WS sur le client. C'est compliqué et pas aussi portable qu'il le croit, et c'est souvent un mal de tête d'intégration.

Je suggère un client de service Web plus léger, tel que Spring-WS's WebServiceTemplate. Il prendra en charge vos liaisons JAXB générées par wsimport, mais ignorera les éléments JAX-WS. C'est simple, facile et fonctionne dans n'importe quelle application, depuis une pile JBoss complète jusqu'à une application Jetty sans que vous ayez à craindre des têtes avec des frameworks existants.

+0

+1 pour mal de tête –

+0

Je pense que c'est dire que personne d'autre ne prend la peine de sonner. Je vais passer à l'utilisation de spring-ws puis, merci. – wds

Questions connexes