A gerar um WSDL a partir de um ficheiro XSD

Preciso de gerar um ficheiro WSDL com um ficheiro XSD. Como faço isto? Posso fazer isto em VS2005? Qual é a maneira mais simples de fazer isto?

 34
Author: informatik01, 2009-05-28

6 answers

Você não pode-um XSD descreve os aspectos de dados, por exemplo, de um webservice - o WSDL descreve as funções dos serviços web (chamadas de método). Você normalmente não pode descobrir o método chamadas a partir de seus dados sozinho.

Estas são duas partes distintas da equação. Por uma questão de simplicidade, importaria frequentemente as suas definições de XSD para o WSDL na marca <wsdl:types>.

(graças ao Cheeso por apontar o meu uso incorrecto dos Termos)

 46
Author: marc_s, 2018-05-30 05:23:43
Eu gostaria de discordar com marc_s sobre isso, que escreveu:

Um XSD descreve os aspectos dos dados. de um serviço web-o WSDL descreve as funções dos serviços web (método chama). Não pode tipicamente descubra o método de chamadas do seu só o data.

O WSDL não descreve funções. WSDL define uma interface de rede, que por si só é composta de Pontos finais que recebem mensagens e, em seguida, às vezes responder com mensagens. Descrição do WSDL os pontos finais e as mensagens de pedido e resposta. É muito orientada para a mensagem.

Muitas vezes pensamos no WSDL como um conjunto de funções, mas isto é porque as ferramentas de serviços web normalmente geram proxies do lado do cliente que expõem as operações do WSDL como métodos ou chamadas de funções. Mas o WSDL não requer isso. Este é um efeito colateral das ferramentas.

EDIT : Também, no caso geral, o XSD não define aspectos de dados de um serviço web. O XSD define os elementos que pode estar presente num documento XML conforme. Tal documento pode ser trocado como uma mensagem sobre um endpoint de serviço web, mas não precisa ser.


Voltando à pergunta, responderia à pergunta original de forma um pouco diferente. Eu gostaria de dizer que sim, é possível gerar um arquivo WSDL dado um arquivo xsd, da mesma forma que é possível gerar uma omeleta usando ovos.

Editar : a minha resposta original não foi clara. Deixa-me tentar outra vez. Eu não sugira que o XSD é equivalente ao WSDL, nem que um XSD é suficiente para produzir um WSDL. Eu digo que é possível gerar um WSDL, dado um ficheiro XSD , Se por essa frase quer dizer "gerar um WSDL usando um ficheiro XSD". Ao fazê-lo, irá aumentar a informação no ficheiro XSD para gerar o WSDL. Você precisará definir coisas adicionais-partes de mensagens, operações, tipos de portas - nenhuma delas está presente no XSD. Mas é possível "gerar um WSDL, dado um XSD" , com algum esforço criativo.

Se a frase "gerar um WSDL dado um XSD" é tomada para implicar "transformar mecanicamente um XSD em um WSDL" , então a resposta é não, você não pode fazer isso. Isto deve ser claro dada a minha descrição do WSDL acima.

Ao gerar um WSDL usando um ficheiro XSD, irá normalmente fazer algo assim (repare nos passos criativos neste procedimento):

  1. importar o esquema XML para o WSDL (WSDL: types element)
  2. adicione ao conjunto de tipos ou elementos com outros, ou embalagens (digamos matrizes, ou estruturas contendo os tipos básicos) como desejado. O resultado de #1 e # 2 compreendem todos os tipos que o WSDL irá usar.
  3. defina um conjunto de mensagens de entrada e saída (e talvez falhas) em termos de tipos previamente definidos.
  4. definir um tipo de porto, que é a coleção de pares de in.mensagens. Você pode pensar em port-type como um analógico WSDL para uma interface Java.
  5. especifique uma ligação, que implementa o tipo de porta e define como as mensagens serão serializadas.
  6. especifique um serviço, que implemente a ligação.

A maior parte da WSDL é mais ou menos boilerplate. Pode parecer assustador, mas isso é principalmente por causa daqueles colchetes assustadores e abundantes, eu encontrei.

Alguns sugeriram que este é um processo manual longo. Talvez. Mas é assim que se pode construir serviços interoperáveis. Você também pode usar ferramentas para definir o WSDL. Gerar dinamicamente WSDL a partir de código levará a armadilhas interop.
 26
Author: Cheeso, 2009-05-28 14:29:03
Sei que esta pergunta é antiga, mas merece uma resposta. Eu pessoalmente prefiro criar um WSDL à mão e testar a conformidade usando SoapUI. Mas às vezes (especialmente para WSDLs complexos), você tem três maneiras de gerar uma de um XSD:
  1. gerar um WSDL a partir de um esquema usando o Eclipse (provavelmente o mais fácil de usar)
  2. a gerar um WSDL via CXF (o meu favorito))
  3. gerar um WSDL através de Convenções usando ws de primavera (o mínimo favorito)
Prefiro a abordagem CXF, já que sou um CLI. Se ele tem um CLI, você pode automatizar (esse é o meu lema). E eu gosto da abordagem ws Primavera o mínimo, uma vez que ele usa um monte de convenções específicas quadro. Há mais pessoas que conhecem o CXF do que o Spring WS. Assim, qualquer coisa que pode lançar uma curva de aprendizagem para um novo engenheiro (sem qualquer vantagem clara ou ROI) é algo que eu desaprovo. Também devia dizer que qualquer WSDL gerado deve ser testado para a validade e conformidade (e ajustado até que cumpra), e que a sua aplicação publica um WSDL estático (em oposição a devolver um auto-gerado.) A minha experiência diz-me que começa com um WS-I compatível com o wsdl e depois a sua aplicação gera automaticamente (e retorna aos consumidores) um não compatível. Por outras palavras, cuidado com a auto-magia.
 6
Author: luis.espinal, 2016-10-19 15:40:31

Esta ferramenta xsd2wsdl faz parte do projecto Apache CXF que irá gerar um WSDL minimalista.

 3
Author: Vishnu, 2014-12-13 15:27:22

Pessoalmente (e dado o que eu sei, isto é, Java e axis), eu geraria um modelo de dados Java a partir do .XSD files (Axis 2 can do this), and then add an interface to describe my web service that uses that model, and then generate a WSDL from that interface.

Porque a. NET também tem todas estas características, deve ser possível fazer tudo isso nesse ecossistema também.

 0
Author: JeeBee, 2009-05-28 10:12:58

Podemos gerar o ficheiro wsdl a partir do xsd, mas tem de usar o pacote oracle enterprise do eclipse(OEPE). basta criar xsd e, em seguida, clique com o botão direito->new->wsdl...

 0
Author: Hassan Sarwan Jumani, 2016-05-13 10:54:39