2009-04-17 4 views
1

Je suis en train de refactoriser la façon dont le code client d'un service Web ascendant est construit. La version existante crée le code client Java à l'aide d'un déploiement du service Web sur JBoss 4.2 et de l'exécution de l'Axis 2 AntCodegenTask par rapport à http://devserver.url?wsdl. Cette méthode échoue si le serveur de développement est en panne ou a wsdl obsolète. (Le contrôle Crusie échoue chaque fois que le wsdl change.)Axis 2 java2wsdl crée des wsdl différents de ceux de JBoss dans l'URL? Wsdl

Je dois créer le code client par rapport à la classe de service Web elle-même au lieu de devoir pointer vers un déploiement du service Web. J'utilise java2wsdl pour générer wsdl à partir de la classe de service Web, puis utiliser le même AntCodegenTask pour générer les classes client.

Le problème est que wsdl créé par java2wsdl est différent de ce que JBoss affiche dans http://devserver.url?wsdl. Entre autres choses, certains espaces de noms sont différents et l'étape AntCodegenTask ne convertit pas ces espaces de noms dans la structure de package correcte.

Je dois obtenir la structure finale du paquet pour être ce que le code client attend. Le AntCodegenTask existant utilise namespacetopackages = "..." pour accomplir cela, mais quand j'exécute le même AntCodegenTask au wsdl généré par java2wsdl il ne convertit pas les namespaces au nom de paquet. Pourquoi l'Axe afficherait-il un wsdl différent lorsque le service Web est déployé dans JBoss qu'il n'en génère java2wsdl?

Existe-t-il un moyen d'utiliser Axis pour créer le code client à partir de la classe de service Web sans générer le fichier WSDL intermédiaire?

La documentation pour les tâches Ant java2wsdl et wsdl2java est un peu inégale. Axis 2 v 1.4.1 donne des tâches Ant pour AntCodegenTask et 2 Java2WSDLTasks dans différents paquets. L'installation d'Axis 2 inclut des binaires pour wsdl2java et java2wsdl, mais pas de binaire codégen. Peut-être que AntCodegenTask est le même que wsdl2java.

Est-ce que quelqu'un a quelque chose comme ça pour travailler avec Axis 2? Déployer le service Web sur le serveur JBoss.

Répondre

0

Enregistrez le fichier WSDL local et transmettez-le en tant que paramètre à la tâche Ant. Les classes générées avec un peu de chance seraient correctes, cependant il peut arriver que l'Axe 2 n'aime pas travailler avec le WSDL généré par JBoss.

Dans ce cas, utilisez wsconsume.bat fourni avec JBoss au lieu de la tâche AXIS ant.

Utilisez toujours ce fichier WSDL une fois généré, empaquetez-le avec l'application, etc., car même les différentes versions de JBoss produisent différents fichiers WSDL.

Axe toujours un peu aspiré, si vous le pouvez (je ne le comprends pas maintenant ...), utilisez Apache CXF ou l'implémentation native de JBoss.