2009-05-28 10 views
32

Je dois 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 le faire?Génération d'un fichier WSDL à partir d'un fichier XSD

+0

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

Répondre

44

Vous ne pouvez pas - 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 comprendre les appels de méthode à partir de vos données uniquement.

Il s'agit en réalité de deux parties distinctes et distinctes de l'équation. Par souci de simplicité, vous importeriez souvent vos définitions XSD dans le WSDL de la balise <wsdl:types>.

Marc

(grâce à Cheeso pour souligner mon utilisation de termes inexacts)

+0

Salut Marc! Merci d'avoir précisé cela! Je vais y retourner et faire mes devoirs à ce sujet! – Ausgar

+0

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

+1

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

0

Personnellement (et compte tenu de ce que je sais, par exemple, Java et de l'axe), je produis un modèle de données Java à partir les fichiers .xsd (l'axe 2 peut le faire), puis ajoutez une interface pour décrire mon service Web qui utilise ce modèle, puis générer un WSDL à partir de cette interface.

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

+0

Gee qui semble circulaire. Pourquoi ne pas générer un WSDL par xsd: importer le XSD dans l'élément wsdl: types, puis générer l'interface Java ou .NET à partir de cela? C'est ce qu'on appelle «l'approche WSDL-First» et cela donne une bonne interopérabilité. – Cheeso

+1

Étant donné que vous souhaitez définir les méthodes pour le service Web, et que le fichier .xsd ne les spécifie pas, vous devrez modifier manuellement les méthodes dans n'importe quel fichier .wsdl que vous avez généré - IMO idiot. – JeeBee

25

Je voudrais être d'accord 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 généralement pas identifier les appels de méthode à partir de vos données uniquement.

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 avec des messages. WSDL décrit les points de terminaison, ainsi que les messages de demande et de réponse. C'est très axé sur les messages. Nous considérons souvent WSDL comme un ensemble de fonctions, mais cela est dû au fait que les outils de services Web génèrent généralement des proxys côté client qui exposent les opérations WSDL en tant que méthodes ou appels de fonction. Mais le WSDL ne l'exige pas. C'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 qui peuvent être présents dans un document XML conforme. Un tel document peut être échangé en tant que message sur un point de terminaison de service Web, mais ce n'est pas obligatoire.


Retour à la question J'aimerais répondre à la question initiale un peu différemment. Je dirais OUI, il est possible de générer un fichier WSDL donné un fichier xsd, de la même manière qu'il est possible de générer une omelette en utilisant des oeufs.

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 pour générer un WSDL, donné un fichier XSD, si par cette phrase vous voulez dire "pour générer un WSDL en utilisant un fichier XSD". Ce faisant, vous augmenterez les informations dans le fichier XSD pour générer le WSDL.Vous devrez définir des éléments supplémentaires - pièces de message, opérations, types de port - aucun de ces éléments n'est présent dans le XSD. Mais il est possible de "générer un WSDL, donné un XSD", avec un effort créatif. Si l'expression "générer un WSDL donné par XSD" est interprétée comme impliquant "transformer mécaniquement un XSD en un WSDL", alors 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 aurez généralement faire 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. ajouter à l'ensemble des types ou des éléments avec des supplémentaires, ou des wrappers (disons des tableaux, ou des structures contenant les types de base) comme vous le souhaitez. Le résultat de # 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 des fautes) en termes de ces types précédemment définis.
  4. Définir un type de port, qui est la collection d'appariements de messages in.out. Vous pourriez penser à un type de port comme un analogue WSDL à une interface Java.
  5. Spécifiez une liaison qui implémente le type de port et définit la manière dont les messages seront sérialisés.
  6. Spécifiez un service qui implémente la liaison.

La plupart du WSDL est plus ou moins standard. Cela peut sembler décourageant, mais c'est principalement à cause de ces angles effrayants et abondants que j'ai trouvés.

Certains ont suggéré qu'il s'agit d'un processus manuel à long terme. Peut être. Mais c'est ainsi que vous pouvez construire 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érables.

+0

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

Comment savez-vous juste à partir de votre XSD qui de l'opération wsdl: aura quels défauts SOAP et tels ?? Vous pourriez être en mesure de GUESS au mieux ..... –

+0

Comment savez-vous à partir de votre XSD quel type de liaison SOAP vous aurez? style = document ou style = RPC ??? –

3

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

0

nous pouvons générer le fichier wsdl à partir de xsd mais vous devez utiliser Oracle Pack d'entreprise d'éclipse (OEPE). simplement créer xsd puis clic droit-> nouveau-> wsdl ...

6

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é en utilisant SoapUI. Mais parfois (surtout pour les WSDLs complexes), vous avez trois façons de générer un sur un XSD:

  1. Generating a WSDL from a schema using Eclipse (probably the most user-friendly)
  2. Generating a WSDL via CXF (my favorite)
  3. Generating a WSDL via conventions using Spring WS (my least favorite)

Je préfère l'approche CXF depuis que je m un gars CLI. S'il a une CLI, vous pouvez automatiser (c'est ma devise). Et j'aime bien 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 jeter une courbe d'apprentissage pour un nouvel ingénieur (sans avantage clair ou ROI) est quelque chose que je désapprouve.Il devrait également aller sans dire que tout WSDL généré doit être testé pour la validité et la conformité (et ajusté jusqu'à ce qu'il se conforme), et que votre application publie un wsdl statique (par opposition à renvoyer un WSDL généré automatiquement.

D'après mon expérience, vous commencez avec un wsdl compatible WS-I, puis votre application génère automatiquement (et retourne aux consommateurs) un fichier non conforme. En d'autres termes, méfiez-vous de la magie automatique.

Questions connexes