2009-09-08 13 views
2

J'ai un problème.comment générer dynamiquement un client de service Web

suppose que de l'autre côté, le WSDL sera toujours changé,

par exemple, le service Web sur l'autre côté qui descriped dans le fichier WSDL a seule méthode, mais le nom de la méthode pourrait toujours changer , aujourd'hui appelez methodABC(), demain sera changement à methodDEFO() ..

supposons en JAVA, est là de toute façon, je peux générer dynamiquement le client de service web, sans le faire manuellement à la main ??? Je veux dire dynamiquement générer le client lorsque mon application est toujours en cours d'exécution ..

ou quel type d'article devrais-je aller et jeter un oeil, parce que je fais beaucoup de recherche sur internet, ne trouve pas un moyen de le faire. Je pense que je pourrais avoir besoin de créer mon propre cadre pour le gérer ... mais je ne sais pas par où commencer.

Répondre

0

Eh bien,

il y a quelques questions à poser au sujet de celui-ci:

1 .: Est-ce que vous demande « connaître » le réel à savoir le nom modifié de la méthode lors de l'exécution?

2 .: Avez-vous le contrôle de ce service Web?

3 .: Quel cadre utilisez-vous pour la communication WS?

+0

non ... je n'ai aucun contrôle sur l'autre côté .. c'est pourquoi j'essaye de créer un générateur dynamique de client ... si je peux contrôler l'autre côté .. je n'aurai pas un tel problème. .. le cadre maintenant j'utilise est asix2 – jojo

+1

ce n'est pas bon. les talons ne fonctionneront probablement pas une fois que le nom de la méthode aura changé. existe-t-il un modèle pour les changements de nom? En d'autres termes, votre application peut-elle deviner à partir du nouveau fichier wsdl le nom réel de la méthode? – KB22

-1

Généralement wsdl est le fichier qui est comme un contrat entre le consommateur et l'hôte. Si cela doit changer de façon dynamique, vous devez comprendre les répercussions de ce changement plutôt que de consommer dynamiquement le service.

+0

hmm ... je n'ai aucun moyen ... je dois utiliser ce fichier wsdl ...... et je pense que cela devrait possible pour moi de le faire.cob le nom de la méthode dans le fichier déjà définir dans le fichier WSDL, le type de données a également été défini dans le fichier WSDL ... et je reçois de savoir de quelque part que quelle méthode devrais-je invoquer en utilisant ce genre de logique ........ – jojo

+0

Toutes les choses comme le type de retour, les noms de signature et de méthode sont écrits dans wsdl. Mon point de poser la question était si le type de retour ou la signature change à un objet que vous n'avez pas, alors vous devrez les générer aussi, ce qui sera une autre surcharge. Si vous pouvez dire le scénario exact, une meilleure solution peut être atteinte. – Kalpak

7

Vous pouvez utiliser n'importe quel outil WSDL vers Java en conjonction avec le Java Compiler API, charger les classes générées avec un URLClassLoader et y arriver. Pas mal de travail, mais pas très dur, dirais-je. (Vous pouvez manquer d'espace PermGen éventuellement, cependant.)

Toutefois, si votre scénario est la réalité, la question la plus importante serait pas être comment générer les classes, mais pourquoi est l'éditeur du service Web sur la fissure?

Editer: Pour clarifier la chose "sur la fissure". La modification de l'interface du service Web (par exemple, un nom de méthode) signifie que vous devrez deviner la méthode à appeler. S'il n'y a qu'une seule méthode dans l'interface, il n'est certes pas difficile de savoir quelle méthode appeler, mais quand même - que se passe-t-il si soudainement deux méthodes apparaissent ici?

La modification de l'interface d'un service utilisé par des systèmes externes est vraiment très importante et ne doit pas être prise à la légère. Il devrait certainement être automatisé. C'est une odeur de code, et probablement un signe d'incompétence, de toxicomanie et/ou de pure folie.

Je réalise que ma moralisation comme ceci ne résout pas votre problème. J'espère juste que vous pouvez parler à quelqu'un responsable en comprenant qu'un service web qui change constamment son interface est, bien, une abomination, et qu'il vaudrait mieux que cela change, plutôt que d'adapter votre code.

+1

'sur crack', LOL - ce web-service doit être un candidat pour WTF si jamais j'en ai vu un ... –

+0

Je suis tenté de +1 cela juste pour le commentaire de crack. :) – Powerlord

+0

+1 pour la valeur de choc du commentaire 'crack' – Federer

0

Les services Web de ce type où le WSDL change dynamiquement ne sont pas adaptés aux liaisons client générées.

La plupart des piles de services Web prennent en charge le concept de clients dynamiques, dans lequel vous appelez les opérations du service Web de manière moins statique.

Pour prendre un exemple, voir la partie correspondante du Apache CXF dopcumentation.

Un autre exemple est Spring-WS, qui n'utilise jamais de code généré par WSDL, mais est centré sur le document XML. Si vous avez des services Web hautement modifiables, alors je recommanderais fortement Spring-WS par rapport au client JAX-WS plus «traditionnel».

Questions connexes