45 votes

Générer un WSDL à partir d'un fichier XSD

Je dois générer un fichier WSDL à partir d'un fichier XSD. Comment dois-je m'y prendre ? Puis-je le faire dans VS2005 ? Quelle est la façon la plus simple de le faire ?

0 votes

Cela pourrait aider : Création de WSDL à l'aide de XSD dans Eclipse helloworldpoc.wordpress.com/web-services/92-2

0 votes

Avez-vous créé le WSDL à partir du XSD ?

56voto

marc_s Points 321990

Vous ne pouvez pas - un XSD décrit les aspects DONNÉES, par exemple d'un service web - le WSDL décrit les FONCTIONS des services web (appels de méthodes). Vous ne pouvez généralement pas déterminer les appels de méthode à partir de vos seules données.

Il s'agit en fait de deux parties distinctes et séparées de l'équation. Pour des raisons de simplicité, vous importerez souvent vos définitions XSD dans la WSDL dans le fichier <wsdl:types> étiquette.

(merci à Cheeso de m'avoir signalé mon utilisation inexacte des termes)

0 votes

Salut Marc ! Merci d'avoir clarifié ce point ! Je vais retourner en arrière et faire mes devoirs à ce sujet !

0 votes

Marc, voulez-vous dire "importer le schéma dans wsdl:types" plutôt que "inclure le XSD dans wsdl:Schema" ?

2 votes

Vous pouvez faire les deux - vous pouvez soit inclure un XSD dans un WSDL, soit copier-coller le contenu du XSD dans le WSDL - les deux fonctionnent.

34voto

Cheeso Points 87022

Je ne suis pas d'accord avec marc_s, qui a écrit :

un XSD décrit les aspects DATA, par ex. d'un webservice - le WSDL décrit les FONCTIONS des services web (appels de méthode). Vous ne pouvez généralement pas déterminer les appels de méthode à partir de vos données seules.

WSDL ne décrit pas les fonctions. WSDL définit une interface réseau, qui est elle-même composée de points d'extrémité qui reçoivent des messages et y répondent parfois. WSDL décrit les points d'extrémité, ainsi que les messages de demande et de réponse. Il est très orienté vers les messages.

Nous considérons souvent le WSDL comme un ensemble de fonctions, mais c'est parce que les outils de services Web génèrent généralement des mandataires côté client qui exposent les opérations WSDL comme des méthodes ou des appels de fonction. Or, le WSDL ne l'exige pas. Il s'agit d'un effet secondaire des outils.

EDIT : De même, dans le cas général, XSD ne définit pas les aspects liés aux données d'un service web. XSD définit les éléments qui peuvent être présents dans un document XML conforme. Un tel document peut être échangé sous la forme d'un message via un point de terminaison de service Web, mais ce n'est pas obligatoire.


Pour en revenir à la question, je répondrais à la question initiale de manière un peu différente. Je dirais OUI, c'est possible. pour générer un fichier WSDL à partir d'un fichier xsd, de la même manière qu'il est possible de générer une omelette à partir d'œufs.

EDIT : Ma réponse initiale n'a pas été claire. Permettez-moi de réessayer. Je ne suggère pas que le XSD est équivalent au WSDL, ni qu'un XSD est suffisant pour produire un WSDL. Je dis qu'il est possible pour générer un WSDL, à partir d'un fichier XSD si par cette phrase vous voulez dire "générer un WSDL en utilisant un fichier XSD". En procédant ainsi, vous augmenterez les informations contenues dans le fichier XSD pour générer le WSDL. Vous devrez définir des éléments supplémentaires - parties de message, opérations, types de port - dont aucun n'est présent dans le XSD. Mais il est possible de "générer un WSDL, à partir d'un XSD", en faisant preuve de créativité.

Si la phrase "générer un WSDL à partir d'un XSD" implique "transformer mécaniquement un XSD en WSDL", alors la réponse est NON, vous ne pouvez pas le faire. Cela devrait être clair étant donné ma description du WSDL ci-dessus.

Lorsque vous générez un WSDL à l'aide d'un fichier XSD, vous procédez généralement comme suit (notez les étapes créatives de cette procédure) :

  1. importer le schéma XML dans le WSDL (élément wsdl:types)
  2. ajouter à l'ensemble des types ou des éléments des types ou des éléments supplémentaires, ou des enveloppes (disons des tableaux, ou des structures contenant les types de base), comme on le souhaite. Le résultat des étapes 1 et 2 comprend tous les types que le WSDL utilisera.
  3. définir un ensemble de messages d'entrée et de sortie (et peut-être de fautes) en fonction des types définis précédemment.
  4. Définir un type de port, qui est la collection de paires de messages in.out. Vous pouvez considérer le type de port comme l'analogue WSDL d'une interface Java.
  5. Spécifier une liaison, qui met en œuvre le type de port et définit comment les messages seront sérialisés.
  6. Spécifier un service, qui met en œuvre la liaison.

La plupart du WSDL est plus ou moins un passe-partout. Il peut sembler intimidant, mais c'est surtout à cause de ces crochets d'angle effrayants et abondants, j'ai découvert.

Certains ont suggéré qu'il s'agit d'un processus manuel long et fastidieux. Peut-être. Mais c'est ainsi que l'on peut construire des services interopérables. Vous pouvez également utiliser des outils pour définir le WSDL. La génération dynamique de WSDL à partir du code entraînera des pièges d'interopérabilité.

0 votes

Comment allez-vous déterminer les actions SOAP et autres ? Juste à partir des données ? C'est au mieux un peu spéculatif, non ?

0 votes

Comment savez-vous, à partir de votre XSD, quelles opérations du wsdl auront des défauts SOAP et autres ? Au mieux, vous pouvez essayer de deviner. .....

0 votes

Comment savoir, à partir de votre XSD, quel type de liaison SOAP vous aurez ? style=document ou style=RPC ? ??

10voto

luis.espinal Points 4145

Je sais que cette question est ancienne, mais elle mérite une réponse. Personnellement, je préfère créer un WSDL à la main et tester sa conformité à l'aide de SoapUI. Mais parfois (surtout pour les WSDL complexes), vous avez trois façons de générer un WSDL à partir d'un XSD :

  1. Générer un WSDL à partir d'un schéma en utilisant Eclipse (probablement le plus convivial)
  2. Générer un WSDL via CXF (mon préféré)
  3. Générer un WSDL via des conventions en utilisant Spring WS (mon moins bon choix)

Je préfère l'approche CXF car je suis un adepte du CLI. S'il y a une CLI, vous pouvez automatiser (c'est ma devise). Et c'est l'approche Spring WS que j'aime le moins, car elle utilise beaucoup de conventions spécifiques au framework.

Il y a plus de gens qui connaissent CXF (je crois) que Spring WS. Donc, tout ce qui peut entraîner une courbe d'apprentissage pour un nouvel ingénieur (sans avantage clair ou retour sur investissement) est quelque chose que je désapprouve.

Il va sans dire que tout WSDL généré doit être testé pour sa validité et sa conformité (et modifié jusqu'à ce qu'il soit conforme), et que votre application doit publier un wsdl statique (par opposition à un wsdl généré automatiquement).

D'après mon expérience, vous commencez avec un wsdl conforme à WS-I, puis votre application génère automatiquement (et renvoie aux consommateurs) un wsdl non conforme.

En d'autres termes, méfiez-vous de la magie automobile.

7voto

Vishnu Points 661

Cet outil xsd2wsdl qui fait partie du projet Apache CXF et qui génère un WSDL minimaliste.

2voto

sim Points 11

Cela pourrait aider : Création de WSDL à l'aide de XSD dans Eclipse http://helloworldpoc.wordpress.com/web-services/92-2/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X