Generazione di un WSDL da un file XSD

Ho bisogno di generare un file WSDL dato un file XSD. Come faccio a fare questo? Posso farlo in VS2005? Qual è il modo più semplice per farlo?

Non è ansible – un XSD descrive gli aspetti dei DATI ad esempio di un servizio web – il WSDL descrive le FUNZIONI dei servizi Web (chiamate ai metodi). Generalmente non è ansible individuare le chiamate al metodo dai soli dati.

Queste sono davvero due parti distinte e distintive dell’equazione. Per semplicità, spesso importerai le tue definizioni XSD nel WSDL nel .

(grazie a Cheeso per aver segnalato il mio uso impreciso dei termini)

Mi piacerebbe dissentire da marc_s su questo, che ha scritto:

un XSD descrive gli aspetti dei DATI ad esempio di un servizio web – il WSDL descrive le FUNZIONI dei servizi web (chiamate di metodo). Di solito non è ansible capire le chiamate di metodo dai soli dati.

WSDL non descrive le funzioni. WSDL definisce un’interfaccia di rete, che a sua volta è composta da endpoint che ricevono messaggi e quindi a volte rispondono con messaggi. WSDL descrive gli endpoint e i messaggi di richiesta e risposta. È molto orientato ai messaggi.

Spesso consideriamo WSDL come un insieme di funzioni, ma questo è dovuto al fatto che gli strumenti dei servizi Web generano in genere proxy sul lato client che espongono le operazioni WSDL come metodi o chiamate di funzione. Ma il WSDL non richiede questo. Questo è un effetto collaterale degli strumenti.

EDIT : Inoltre, nel caso generale, XSD non definisce gli aspetti dei dati di un servizio web. XSD definisce gli elementi che possono essere presenti in un documento XML conforms. Tale documento può essere scambiato come messaggio su un endpoint del servizio Web, ma non è necessario.


Tornando alla domanda, risponderei alla domanda originale in modo un po ‘diverso. Dico SÌ, è ansible generare un file WSDL dato un file xsd, allo stesso modo è ansible generare un’omelette usando le uova.

EDIT : la mia risposta originale non è stata chiara. Fammi riprovare. Non suggerisco che XSD sia equivalente a WSDL, né che un XSD sia sufficiente per produrre un WSDL. Dico che è ansible generare un WSDL, dato un file XSD , se con quella frase intendi “generare un WSDL usando un file XSD”. Così facendo, aumenterai le informazioni nel file XSD per generare il WSDL. Dovrai definire cose aggiuntive – parti di messaggi, operazioni, tipi di porte – nessuna di queste è presente nell’XSD. Ma è ansible “generare un WSDL, dato un XSD”, con qualche sforzo creativo.

Se la frase “generare un WSDL dato un XSD” è implicita per “trasformare meccanicamente un XSD in un WSDL”, allora la risposta è NO, non è ansible farlo. Questo dovrebbe essere chiaro data la mia descrizione del WSDL sopra.

Quando si genera un WSDL utilizzando un file XSD, si eseguirà tipicamente qualcosa di simile (notare i passaggi creativi in ​​questa procedura):

  1. importare lo schema XML nel WSDL (wsdl: types element)
  2. aggiungi all’insieme di tipi o elementi con altri o wrapper (diciamo array o strutture contenenti i tipi di base) come desiderato. Il risultato di # 1 e # 2 comprende tutti i tipi che WSDL utilizzerà.
  3. definire un insieme di messaggi in entrata e in uscita (e forse di errori) in termini di quei tipi precedentemente definiti.
  4. Definire un tipo di porta, che è la raccolta di coppie di messaggi in.out. Si potrebbe pensare al tipo di porta come un analogo WSDL a un’interfaccia Java.
  5. Specificare un’associazione, che implementa il tipo di porta e definisce in che modo i messaggi verranno serializzati.
  6. Specifica un servizio, che implementa l’associazione.

La maggior parte del WSDL è più o meno standard. Può sembrare scoraggiante, ma è soprattutto per via di quelle parentesi angolari spaventose e abbondanti che ho trovato.

Alcuni hanno suggerito che si tratta di un processo manuale prolisso. Può essere. Ma è così che puoi creare servizi interoperabili. È inoltre ansible utilizzare strumenti per la definizione di WSDL. Generare dynamicmente WSDL dal codice porterà a problemi di interoperabilità.

So che questa domanda è vecchia, ma merita una risposta. Personalmente preferisco creare manualmente un WSDL e testare la conformità usando SoapUI. Ma a volte (specialmente per WSDL complessi), hai tre modi per generare uno da un XSD:

  1. Generazione di un WSDL da uno schema usando Eclipse (probabilmente il più user-friendly)
  2. Generazione di un WSDL tramite CXF (il mio preferito)
  3. Generazione di un WSDL tramite convenzioni usando Spring WS (il mio preferito)

Preferisco l’approccio CXF visto che sono un ragazzo della CLI. Se ha una CLI, puoi automatizzare (questo è il mio motto). E mi piace meno l’approccio di Spring WS dal momento che utilizza molte convenzioni specifiche del framework.

Ci sono più persone che conoscono CXF (credo) rispetto a Spring WS. Quindi tutto ciò che può generare una curva di apprendimento per un nuovo ingegnere (senza alcun chiaro vantaggio o ROI) è qualcosa su cui non accetto.

Va anche detto che qualsiasi WSDL generato dovrebbe essere testato per la validità e la conformità (e ottimizzato fino a quando non è conforms), e che la tua applicazione pubblica una wsdl statica (anziché la restituzione di una generata automaticamente).

È stata la mia esperienza che si inizia con un wsdl WS-I compatibile e quindi l’applicazione genera automaticamente (e restituisce ai consumatori) uno non conforms.

In altre parole, fai attenzione alla magia automatica.

Questo strumento parte xsd2wsdl del progetto Apache CXF che genererà un WSDL minimalista.

Personalmente (e dato quello che so, vale a dire, Java e asse), vorrei generare un modello di dati Java dai file .xsd (Axis 2 può farlo), e quindi aggiungere un’interfaccia per descrivere il mio servizio web che utilizza quel modello e quindi generare un WSDL da tale interfaccia.

Perché .NET ha anche tutte queste caratteristiche, deve essere ansible fare tutto questo anche in quell’ecosistema.

possiamo generare file wsdl da xsd ma devi usare oracle enterprise pack di eclipse (OEPE). semplicemente creare xsd e quindi fare clic destro-> nuovo-> wsdl …