web-dev-qa-db-fra.com

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

J'ai besoin de générer un fichier WSDL à partir d'un fichier XSD. Comment puis-je faire cela? Puis-je faire cela dans VS2005? Quel est le moyen le plus simple de faire cela?

34
Ausgar

Vous ne pouvez pas - un XSD décrit les aspects DATA, par exemple. d'un service Web - 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 uniquement.

Ce sont vraiment deux parties distinctes et distinctes de l'équation. Par souci de simplicité, vous importez souvent vos définitions XSD dans le WSDL dans la balise <wsdl:types>.

(merci à Cheeso pour avoir signalé mon utilisation imprécise des termes)

47
marc_s

Je voudrais différer avec marc_s à ce sujet, qui a écrit: 

un XSD décrit les aspects DATA, par exemple . d'un service Web - le WSDL décrit les FONCTIONS des services Web (appels de méthode). Vous ne pouvez pas typiquement déterminer les appels de méthode de votre données seules.

WSDL ne décrit pas les fonctions. WSDL définit une interface réseau, elle-même composée de points de terminaison qui reçoivent des messages et répondent parfois par des messages. WSDL décrit les noeuds finaux, ainsi que les messages de demande et de réponse. C'est très axé sur le message.

Nous pensons souvent que WSDL est un ensemble de fonctions, mais les outils de services Web génèrent généralement des mandataires côté client qui exposent les opérations WSDL sous forme de méthodes ou d'appels de fonction. Mais le WSDL n'en a pas besoin. Ceci est un effet secondaire des outils.

EDIT: De même, dans le cas général, XSD ne définit pas les aspects de données d'un service Web. XSD définit les éléments pouvant être présents dans un document XML conforme. Un tel document peut être échangé sous forme de message sur un noeud final de service Web, mais ce n'est pas nécessairement le cas. 


Pour revenir à la question, je répondrais un peu différemment à la question initiale. Je dirais OUI, il est possible de 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 à l’aide d’œufs. 

EDIT: Ma réponse d'origine n'était pas claire. Laisse-moi réessayer. Je ne suggère pas que XSD est équivalent à WSDL, ni qu'un XSD est suffisant pour produire un WSDL. Je dis qu'il est possible de générer un WSDL, étant donné un fichier XSD, si vous voulez dire par cette phrase "générer un WSDL à l'aide d'un fichier XSD". Ce faisant, 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 - aucun d’entre eux n’est présent dans le XSD. Mais il est possible de "générer un WSDL, à partir d'un XSD", avec quelques efforts créatifs. 

Si la phrase "générer un WSDL avec un XSD" signifie "transformer mécaniquement un XSD en un WSDL", la réponse est NON, vous ne pouvez pas le faire. Cela devrait être clair compte tenu de ma description du WSDL ci-dessus. 

Lors de la génération d'un WSDL à l'aide d'un fichier XSD, vous ferez généralement quelque chose comme ceci (notez les étapes de création de cette procédure):

  1. importer le schéma XML dans le WSDL (élément wsdl: types)
  2. ajoutez à l'ensemble de types ou d'éléments avec des éléments supplémentaires, ou des wrappers (disons des tableaux, ou des structures contenant les types de base) comme vous le souhaitez. Les résultats de # 1 et # 2 comprennent tous les types que le WSDL utilisera.
  3. définir un ensemble de messages d'entrée et de sortie (et peut-être des erreurs) en fonction des types précédemment définis.
  4. Définissez un type de port, qui est la collection de paires de messages in.out. Vous pouvez considérer le type de port comme un analogue WSDL associé à une interface Java.
  5. Spécifiez une liaison qui implémente le type de port et définit comment les messages seront sérialisés. 
  6. Spécifiez un service qui implémente la liaison.

La majeure partie du WSDL est plus ou moins passe-partout. Cela peut sembler décourageant, mais c'est surtout à cause de ces équerres effrayantes et abondantes, que j'ai trouvées. 

Certains ont suggéré qu'il s'agissait d'un processus manuel de longue haleine. Peut être. Mais voici comment vous pouvez créer des services interopérables. Vous pouvez également utiliser des outils pour définir WSDL. La génération dynamique de WSDL à partir du code entraînera des pièges interop. 

26
Cheeso

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 la conformité à l'aide de SoapUI. Mais parfois (spécialement pour les WSDL complexes), vous avez trois façons de générer un XSD:

  1. Générer un WSDL à partir d'un schéma 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 préféré)

Je préfère l'approche CXF puisque je suis un gars de la CLI. Si elle possède une interface de ligne de commande, vous pouvez l’automatiser (c’est ma devise). Et j'aime moins l'approche Spring WS, car elle utilise beaucoup de conventions spécifiques à un framework. 

Il y a plus de gens qui connaissent CXF (je crois) que Spring WS. Donc, tout ce qui peut créer une courbe d'apprentissage pour un nouvel ingénieur (sans aucun avantage ni retour sur investissement évident) est quelque chose qui me désapprouve.

Cela devrait également indiquer que tout fichier WSDL généré doit être testé pour sa validité et sa conformité (et ajusté jusqu'à ce qu'il soit conforme) et que votre application publie un fichier wsdl statique (au lieu de renvoyer un fichier généré automatiquement)

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

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

6
luis.espinal

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

3
Vishnu

Personnellement (et vu ce que je sais, par exemple, Java et axis), je générerais un modèle de données Java à partir des fichiers .xsd (Axis 2 peut le faire), puis j'ajouterais une interface pour décrire mon service Web utilisant ce modèle , puis générez un WSDL à partir de cette interface.

Parce que .NET possède également toutes ces fonctionnalités, il doit être possible de faire tout cela dans cet écosystème.

0
JeeBee

nous pouvons générer un fichier wsdl à partir de xsd mais vous devez utiliser Oracle Enterprise Pack d'Eclipse (OEPE) . Il vous suffit de créer xsd puis de cliquer avec le bouton droit de la souris -> nouveau-> wsdl ...

0