2010-03-29 8 views
2

J'ai une ancienne application Java qui utilise la classe mypackage.Foo. Je voudrais que cette application utilise un service web qui renvoie des instances de Foo. Pour me connecter à ce service web, j'utilise wsimport sur le WSDL pour générer les artefacts, et cela me donne un autre fichier Foo.java. Idéalement, je voudrais dire à wsimport de générer des artefacts qui utilisent le Foo d'origine et de ne générer aucun fichier Foo supplémentaire, mais je n'ai pas trouvé le moyen de le faire. Comment puis-je réconcilier les deux fichiers Foo dans l'application Java? Il semble que mes options sont:comment réconcilier les conflits entre le fichier original et le fichier généré dans les services Web Java?

1) mettre le fichier Foo généré dans un autre paquet. Mais ensuite assigner otherpackage.Foo à une mypackage.Foo variable échoue

2) utiliser le Foo généré à la place du Foo d'origine. Dans certains cas, cela semble être la meilleure solution, mais le Foo original a des fonctionnalités qui ne sont pas dans le Foo généré. De plus, il n'est pas possible de faire un changement à l'échelle de l'application. 3) utiliser la première option et écrire une méthode pour copier manuellement les champs d'otherpackage.Foo dans mypackage.Foo. Si tout le reste échoue, ce sera ce que je fais, mais cela me paraîtra horriblement inélégant. Je suis sûr qu'il me manque une bonne pratique simple là-bas. Appréciez toutes les idées!

+0

savoir si vous avez pu vous une réponse satisfaisante à cette aide de wsimport? J'ai le même problème (http://stackoverflow.com/questions/2642583/correct-use-of-wsdl-generated-sources) –

+0

Un collègue me propose une solution de travail qui utilise des liaisons pour mapper des types WSDL complexes à des classes locales , disant en gros à wsimport de ne pas générer de stubs pour ces classes, et d'utiliser les locales. Cet exemple utilisait maven, donc je ne sais pas à quoi ressemblerait la version canonique, mais la clé était un fichier bindings.xml avec des entrées telles que – RHH

+0

jxb: bindings version = "1.0" xmlns: jxb = "http://java.sun.com/xml/ns/jaxb "xmlns: xs =" http://www.w3.org/2001/XMLSchema "> - - RHH

Répondre

1

Lorsque vous générez du code Java à partir WSDL, vous pouvez utiliser Apache CXF et il est outil de wsdl2java (ou en utilisant maven-CxF-codegen-plugin) et spécifiez l'option suivante:

-nexclude <schema-namespace>=<java-package> 

En utilisant cette option :

  • dire l'outil wsdl2java pour ne pas générer des classes de l'espace de noms XML donné,
  • dire l'outil à mettre en importation de code généré à partir du paquet java-donné.

Bien sûr, la classe référencée doit exister dans java-package plus tard lors de la compilation (non requise lors de la génération du code).

Votre exemple d'utilisation:

wsdl2java -nexclude <some-schema-namespace-I-dont-know>=mypackage 
+1

cela semble bien, mais quand je Pour ce faire, j'obtiens une erreur car l'interface WebService générée a un '@XmlSeeAlso ({mypackage.Obj ectFactory.class, ...}) ', et cette classe mentionnée n'existe pas maintenant. –