Générer une WSDL à partir D'un fichier XSD
je dois générer un fichier WSDL à partir d'un fichier XSD. Comment dois-je faire? Puis-je le faire en VS2005? Quelle est la façon la plus simple de faire cela?
6 réponses
Vous ne pouvez pas - un XSD décrit les aspects de 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 comprendre les appels de méthode à partir de vos seules données.
ce sont vraiment deux parties distinctes de l'équation. Pour des raisons de simplicité, vous importez souvent vos définitions XSD dans la WSDL dans le <wsdl:types>
balise.
(merci à Cheeso de souligner mon usage imprécis des termes)
Je ne suis pas d'accord avec marc_s sur ce point, qui a écrit:
un XSD décrit les aspects relatifs aux données, par exemple: d'un service web-le WSDL décrit les fonctions des services web (les appels de méthode). Vous ne pouvez pas typiquement trouvez la méthode d'appel à partir de votre les données à elles seules.
WSDL ne décrit pas les fonctions. WSDL définit une interface réseau, qui est elle-même composée de points terminaux qui reçoivent des messages et répondent parfois avec message. WSDL décrit les paramètres, ainsi que les messages de demande et de réponse. Il est très bien orienté messages.
nous pensons souvent à WSDL comme un ensemble de fonctions, mais c'est parce que les outils de services web génèrent typiquement des mandataires côté client qui exposent les opérations WSDL comme des méthodes ou des appels de fonction. Mais le WSDL ne l'exige pas. C'est un effet secondaire de l'outils.
EDIT: aussi, 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é sous forme de message sur un terminal de service web, mais il n'est pas nécessaire qu'il le soit.
pour en revenir à la question, je répondrais à la question initiale un peu différemment. Je woudl dis OUI, c'est possible pour générer un fichier WSDL donné un fichier xsd, de la même manière il est possible de générer une omelette à l'aide d'œufs.
EDIT: ma réponse initiale n'était pas claire. Permettez-moi d'essayer de nouveau. Je ne suggère pas que XSD soit équivalent à WSDL, ni qu'un XSD soit suffisant pour produire une WSDL. Je dois dire que c'est possible pour générer un fichier WSDL, compte tenu d'un fichier XSD, si par cette phrase vous voulez dire "générer un WSDL en utilisant un fichier XSD". Ce faisant, vous augmenterez les informations dans le fichier XSD pour générer la WSDL. Vous aurez besoin de définir des choses supplémentaires-parties de message, opérations, types de ports - aucun de ceux-ci ne sont présents dans le XSD. Mais il est possible de "générer une WSDL, avec un XSD", avec un effort créatif.
Si le membre de phrase "générer un fichier WSDL donné un XSD" implique "mécaniquement transformer un XSD dans un document WSDL", alors la réponse est NON, vous ne pouvez pas le faire. Cela devrait être clair compte tenu de ma description de la WSDL ci-dessus.
lors de la génération D'une WSDL à l'aide d'un fichier XSD, vous ferez typiquement quelque chose comme ceci (notez le creative étapes de cette procédure):
- importer le schéma XML dans le fichier WSDL wsdl:types d'élément)
- ajouter à l'ensemble des types ou des éléments avec des types ou des wrappers supplémentaires (tableaux, ou structures contenant les types de base) comme désiré. Le résultat de #1 et #2 comprend tous les types que la WSDL utilisera.
- définir un ensemble de messages d'entrée et de sortie (et peut-être de défauts) en termes de ces types définis précédemment.
- définir un port-type, qui est la collection de paires de.les messages. Vous pourriez penser à port-type comme un WSDL analogique à une interface Java.
- spécifier une liaison, qui implémente le type de port et définit comment les messages seront sérialisés.
- Spécifier un service qui implémente la liaison.
la majeure partie de la WSDL est plus ou moins boilerplate. Il peut sembler déconcertante, mais c'est surtout à cause de ceux effrayant et abondante, crochets, j'ai trouvé.
certains ont suggéré qu'il s'agit d'un processus manuel de longue durée. Peut-être. Mais c'est ainsi que l'on peut 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 conduira à des pièges interop.
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 (spécialement pour les WSDL complexes), vous avez trois façons de générer un XSD:
- Génération d'un fichier WSDL à partir d'un schéma à l'aide d'Eclipse (probablement le plus convivial)
- Génération d'un document WSDL via CXF (mon préféré)
- Génération d'un document WSDL via des conventions à l'aide de Spring WS (mon favori)
je préfère le CXF approche depuis que je suis un CLI gars. Si elle a un CLI, vous pouvez automatiser (c'est ma devise). Et c'est l'approche WS du printemps qui me plaît le moins, car elle utilise beaucoup de conventions-cadres spécifiques.
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 avec dire que toute WSDL générée devrait être testé pour la validité et la conformité (et modifié jusqu'à ce qu'il se conforme), et que votre application publie une WSDL statique (par opposition à retourner une auto-générée.)
d'après mon expérience, vous commencez avec une WSDL compatible WS-I et ensuite votre application génère automatiquement (et renvoie aux consommateurs) une WSDL non conforme.
en d'autres termes, méfiez-vous de la magie automatique.
personnellement (et compte tenu de ce que je sais, C'est-à-dire Java et axis), je générerais un modèle de données Java à partir du .les fichiers xsd (Axis 2 peut faire cela), puis Ajouter une interface pour décrire mon service web qui utilise ce modèle, et ensuite générer une WSDL à partir de cette interface.
Parce que .NET a toutes ces fonctions, il doit être possible de faire tout cela dans cet écosystème.
nous pouvons générer des fichiers wsdl à partir de xsd, mais vous devez utiliser le pack enterprise d'Oracle d'eclipse(OEPE). il suffit de créer xsd puis de cliquer avec le bouton droit de la souris->new->wsdl...