2009-05-28 215 views
32

Necesito generar un archivo WSDL dado un archivo XSD. ¿Cómo hago esto? ¿Puedo hacer esto en VS2005? ¿Cuál es la forma más simple de hacer esto?Generar un WSDL a partir de un archivo XSD

+0

Esto podría ayudar: Crear WSDL usando XSD en Eclipse http://helloworldpoc.wordpress.com/web-services/92-2/ – sim

Respuesta

44

No se puede: un XSD describe los aspectos de DATOS, p. de un servicio web: el WSDL describe las FUNCIONES de los servicios web (llamadas a métodos). Por lo general, no puede descubrir las llamadas a los métodos solo a partir de sus datos.

Estas son realmente dos partes separadas y distintivas de la ecuación. Por motivos de simplicidad, a menudo importaría sus definiciones de XSD en el WSDL en la etiqueta <wsdl:types>.

Marc

(gracias a Cheeso por señalar mi uso incorrecto de términos)

+0

¡Hola Marc! ¡Gracias por aclarar eso! ¡Regresaré y haré mi tarea en esto! – Ausgar

+0

Marc, ¿quiere decir "importar el esquema en wsdl: types" en lugar de "incluir el XSD en wsdl: Schema"? – Cheeso

+1

Puede hacer ambas cosas: puede incluir un XSD en un WSDL, o puede copiar y pegar el contenido del XSD en el WSDL, ambos funcionan. –

0

Personalmente (y teniendo en cuenta lo que sé, es decir, Java y eje), me gustaría generar un modelo de datos de Java los archivos .xsd (Axis 2 pueden hacer esto), y luego agregar una interfaz para describir mi servicio web que usa ese modelo, y luego generar un WSDL desde esa interfaz.

Como .NET también tiene todas estas características, también debe ser posible hacer todo esto en ese ecosistema.

+0

Vaya, suena circular. ¿Por qué no generar un WSDL por xsd: importar el XSD al elemento wsdl: types, y luego generar la interfaz Java o .NET desde ESO? Se llama "el primer enfoque WSDL" y ofrece una buena interoperabilidad. – Cheeso

+1

Como quiera definir los métodos para el servicio web, y .xsd no los especifica, por lo que tendría que editar manualmente los métodos en cualquier archivo .wsdl que haya generado a su manera: idiota IMO. – JeeBee

25

me gustaría ser diferente con marc_s en este, que escribió:

un XSD describe los aspectos DATOS por ejemplo, de un servicio web: el WSDL describe las FUNCIONES de los servicios web (llamadas a métodos). Normalmente no puede averiguar las llamadas al método desde su datos solo.

WSDL no describe las funciones. WSDL define una interfaz de red, que a su vez está compuesta por puntos finales que reciben mensajes y luego responden con mensajes. WSDL describe los puntos finales y los mensajes de solicitud y respuesta. Está muy orientado a los mensajes.

A menudo pensamos en WSDL como un conjunto de funciones, pero esto se debe a que las herramientas de servicios web suelen generar proxies del lado del cliente que exponen las operaciones WSDL como métodos o llamadas a funciones. Pero el WSDL no requiere esto. Este es un efecto secundario de las herramientas.

EDIT: Además, en el caso general, XSD no define aspectos de datos de un servicio web. XSD define los elementos que pueden estar presentes en un documento XML compatible. Tal documento se puede intercambiar como un mensaje sobre un punto final del servicio web, pero no es necesario.


Volviendo a la pregunta, respondería la pregunta original de forma un poco diferente. Diría que SÍ, es posible generar un archivo WSDL con un archivo xsd, de la misma manera que es posible generar una tortilla usando huevos.

EDIT: Mi respuesta original no ha sido clara. Déjame intentar de nuevo. No sugiero que XSD sea equivalente a WSDL, ni que un XSD sea suficiente para producir un WSDL. Yo digo que es posible generar un WSDL, dado un archivo XSD, si con esa frase quiere decir "generar un WSDL usando un archivo XSD". Al hacerlo, aumentará la información en el archivo XSD para generar el WSDL.Tendrá que definir cosas adicionales, partes de mensajes, operaciones, tipos de puertos, ninguno de estos está presente en el XSD. Pero es posible "generar un WSDL, dado un XSD", con un poco de esfuerzo creativo.

Si se toma la frase "generar un WSDL dado un XSD" implica "transformar mecánicamente un XSD en un WSDL", entonces la respuesta es NO, no se puede hacer eso. Esto debería ser claro dada mi descripción del WSDL anterior.

Cuando se genera un WSDL utilizando un archivo XSD, normalmente hacer algo como esto (tenga en cuenta los pasos creativos en este procedimiento):

  1. importar el esquema XML en el WSDL (WSDL: tipos de elementos)
  2. agregue al conjunto de tipos o elementos elementos adicionales, o envoltorios (digamos matrices o estructuras que contengan los tipos básicos) según lo desee. El resultado de # 1 y # 2 comprende todos los tipos que usará WSDL.
  3. definen un conjunto de mensajes de entrada y salida (y tal vez fallas) en términos de los tipos previamente definidos.
  4. Define un tipo de puerto, que es la colección de emparejamientos de mensajes in.out. Puede pensar en el tipo de puerto como un WSDL analógico para una interfaz Java.
  5. Especifique un enlace, que implementa el tipo de puerto y define cómo se serializarán los mensajes.
  6. Especifique un servicio que implemente el enlace.

La mayor parte del WSDL es más o menos repetitivo. Puede parecer desalentador, pero eso es principalmente debido a esos paréntesis angulares que dan miedo y abundantes, he encontrado.

Algunos han sugerido que este es un proceso manual prolongado. Tal vez. Pero así es como puedes construir servicios interoperables. También puede usar herramientas para definir WSDL. La generación dinámica de WSDL a partir del código dará lugar a riesgos interoperativos.

+0

¿Cómo vas a determinar las acciones de SOAP y tal? Solo a partir de los datos? Eso es, en el mejor de los casos, un poco especulativo, ¿no? –

+0

¿Cómo sabe solo de su XSD cuál de las operaciones wsdl: tendrá qué fallas SOAP y tal? Es posible que pueda GUESS en el mejor de los casos ..... –

+0

¿Cómo sabe por solo su XSD qué tipo de enlace SOAP tendrá? style = document or style = RPC ??? –

3

Esta herramienta xsd2wsdl parte del proyecto Apache CXF que generará un WSDL minimalista.

0

podemos generar archivos wsdl de xsd pero tiene que utilizar el paquete de eclipse Oracle enterprise (OEPE). simplemente cree xsd y luego haga clic derecho-> nuevo-> wsdl ...

6

Sé que esta pregunta es antigua, pero merece una respuesta. Personalmente prefiero crear un WSDL a mano y probar el cumplimiento con SoapUI. Pero a veces (especialmente para los WSDL complejo), tiene tres formas de generar uno de 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)

Yo prefiero el enfoque CXF desde que' Soy un tipo CLI. Si tiene una CLI, puede automatizar (ese es mi lema). Y me gusta menos el enfoque de Spring WS porque usa muchas convenciones específicas de framework.

Hay más personas que conocen CXF (creo) que Spring WS. Entonces, cualquier cosa que pueda arrojar una curva de aprendizaje para un nuevo ingeniero (sin ninguna ventaja clara o ROI) es algo que desaprovecho.

También debe decirse que cualquier WSDL generado debe probarse para verificar su validez y conformidad (y ajustado hasta que cumpla), y que su aplicación publique un wsdl estático (en lugar de devolver uno generado automáticamente).)

Según mi experiencia, usted comienza con un wsdl compatible con WS-I y luego su aplicación genera automáticamente (y devuelve a los consumidores) una no conforme.

En otras palabras, tenga cuidado con la magia del automóvil.

Cuestiones relacionadas