Come configurare smartphone e PC. Portale informativo
  • casa
  • Windows 8
  • Descrizione wsdl. Ecco come appare una richiesta di servizio web

Descrizione wsdl. Ecco come appare una richiesta di servizio web

In questo articolo parlerò di cos'è un file WSDL, perché ne hai bisogno e come lavorarci.

Mappa degli articoli

Cos'è WSDL

WSDL è un linguaggio di descrizione del servizio Web che ha una struttura XML. Lo scopo principale di un file WSDL è fornire un'interfaccia per l'accesso alle funzioni di servizio restituite dai tipi di dati; percorso al server che elabora le richieste, ecc.

Il percorso del file wsdl è solitamente http://host/services/wsdl/gbdar-v2-2.wsdl

Esistono molti strumenti, librerie, progettati per leggere il file WSDL.

SoapUi

Uno di questi strumenti è soapUi(). Installando una distribuzione progettata per la tua piattaforma, sarai in grado di creare nuovo progetto comando File/Nuovo progetto SoapUi. Nella finestra di dialogo per la creazione di un nuovo progetto, lasciare selezionata la casella di controllo Crea richieste di esempio

Esecuzione di query

Il nuovo progetto genererà automaticamente modelli di richiesta per il servizio descritto nel file wsdl. Sul lato sinistro dell'albero vedrai un elenco di funzioni contenute nel file WSDL. Espanderò la funzione di replica. Al suo interno è presente una richiesta Request1, facendo doppio clic su di essa vedremo una finestra di dialogo con un template di richiesta, al posto dei parametri di default verranno messi dei punti interrogativi. Affinché la funzione venga eseguita correttamente, è necessario compilare tutti i parametri che non sono contrassegnati dal tag Optional, quindi fare clic sul triangolo verde nell'angolo in alto a sinistra della finestra di dialogo.

Se tutti i parametri sono corretti, sulla destra apparirà la risposta del servizio alla richiesta.

SoapUi offre la possibilità di visualizzare i parametri del file WSDL, per questo è necessario fare doppio clic sul nome dell'interfaccia (contrassegnata con un'icona verde nell'albero del file WSDL, ho gdbar-v2-2SOAP). Nella finestra di dialogo puoi trovare:

  • Scheda Panoramica - descrizione parametri generali WSDL, elenco delle funzioni e relative azioni del server
  • Scheda Endpoint di servizio - percorso del server e altri parametri
  • contenuto .wsdl albero di navigazione dei file
  • Conformità WS-I - qui puoi creare un report dell'interfaccia WS-I

Generazione di documenti

SoapUi ci consente di generare documentazione per le funzioni WSDL. Per fare ciò, fai clic con il pulsante destro del mouse sull'interfaccia e chiama il comando Genera documentazione. Di conseguenza, otteniamo manuale dettagliato in formato html.

Questo è tutto, iscriviti alle nuove voci, lascia commenti, dai suggerimenti per migliorare l'articolo.

Gli elementi di estensione di binding vengono utilizzati per specificare la grammatica specifica per i messaggi in entrata (3) e in uscita (4), i messaggi di errore (5). Possono essere indicate anche le informazioni relative al livello operativo (2) e al livello vincolante (1).

L'elemento di associazione operazione contiene i dati per l'operazione con lo stesso nome tipo correlato porta. Tuttavia, il nome dell'operazione in caso generale non è univoco (esempio: sovraccarico di metodi / funzioni - utilizzo degli stessi nomi con firme diverse), quindi potrebbe non essere sufficiente per determinare in modo univoco l'operazione di destinazione del tipo di porta. In questi casi, l'operazione di destinazione viene indirizzata specificando inoltre i nomi degli elementi wsdl:input e wsdl:output appropriati utilizzando l'attributo name.

Rilegatura dovere impostare un solo protocollo.

Rilegatura non dovrebbe contengono informazioni sull'indirizzo.

Porta

La porta definisce un separato punto finale impostando l'indirizzo di collegamento.

  1. <wsdl:definizioni .... >
  2. <wsdl:servizio .... > *
  3. <wsdl:porta name="nmtoken" binding="qname" > *
  4. <-- extensibility element (1) -->
  5. wsdl:porta>
  6. wsdl:servizio>
  7. wsdl:definizioni>

L'attributo name specifica un nome univoco tra tutte le porte all'interno del documento WSDL. L'attributo di collegamento del tipo QName contiene un collegamento al collegamento (vedere).

Gli elementi di estensione (1) vengono utilizzati per impostare l'indirizzo.

Porta non dovrebbe impostare più di un indirizzo.

Porta non dovrebbe contenere informazioni vincolanti diverse da un indirizzo.

Servizio

Il servizio raggruppa un insieme di porte correlate.

  1. <wsdl:definizioni .... >
  2. <wsdl:servizio name="nmtoken" > *
  3. <wsdl:porta .... /> *
  4. wsdl:servizio>
  5. wsdl:definizioni>

L'attributo name specifica un nome univoco tra tutti i servizi definiti all'interno del documento WSDL.

Le porte all'interno di un servizio sono correlate come segue:

  • Le porte non interagiscono tra loro (cioè l'output di una porta non è l'input di un'altra).
  • Se un servizio dispone di più porte che condividono un tipo di porta comune ma utilizzano collegamenti diversi o hanno indirizzi diversi, tali porte sono alternative. Ciascuna di queste porte implementa un comportamento logicamente equivalente (entro i limiti del trasporto e del formato del messaggio imposti dal binding corrispondente). Questo permette al cliente di scegliere porto specifico per lo scambio in base a vari criteri (supporto protocollo di trasporto, ecc.).
  • Osservando le porte, puoi determinare i tipi di porte supportate dal servizio. Sulla base di questi dati, il cliente può determinare la capacità di interagire con un particolare servizio. Questo è utile se una relazione tra operazioni da tipi diversi porte e un servizio deve supportare tutti i tipi di porta richiesti per eseguire un'attività particolare.
  1. Questa è una traduzione gratuita, parziale e aumentata del documento WSDL (Web Services Description Language) 1.1 datato 15 marzo 2001
  2. È estremamente scomodo operare con termini non declinanti scritti in latino, inoltre sono tradotti in modo inequivocabile. Pertanto, il nome originale viene fornito solo quando viene introdotto un nuovo termine, quindi nel testo viene utilizzata la traduzione russa.

Prefazione

I clienti dei clienti hanno chiesto ai clienti i file xsd per le strutture passate dai servizi Web implementati. I clienti in risposta hanno suggerito che i clienti dei clienti realizzassero WSDL. Quella. inaspettatamente "di punto in bianco" è diventato necessario creare non solo schemi xsd per la convalida dei dati, ma "interi WSDL". Di solito i WSDL vengono utilizzati per SOAP e abbiamo REST ...

Ho già scritto di

introduzione

Il termine servizi Web è solitamente associato a servizi basati su operazioni o azioni basati su standard SOAP o WS* come WS-Addressing o WS-Security. Il termine Servizi Web REST di solito si riferisce a un'architettura basata su risorse di servizi Web che trasmettono XML su HTTP. Ognuno di questi stili architettonici ha il suo posto, ma fino a poco tempo fa lo standard WSDL non supportava entrambi questi stili. L'associazione HTTP WSDL 1.1 era inadeguata per descrivere l'interazione con usando XML tramite HTTP, ovvero non esisteva un modo formale per descrivere i servizi Web REST utilizzando WSDL. Pubblicazione dello standard WSDL 2.0 (sviluppato con la necessità di descrivere i servizi Web REST) ​​come raccomandazione In tutto il mondo Il Web Consortium (W3C) ha fornito un linguaggio per descrivere i servizi Web REST.

REST è uno stile architettonico che tratta il Web come un'applicazione incentrata sulle risorse. In pratica, questo significa che ogni URL in un'applicazione RESTful è una risorsa. Gli URL sono facili da capire e ricordare. Ad esempio, una libreria potrebbe definire l'URL http://www.bookstore.com/books/ per un elenco di libri in vendita e http://www.bookstore.com/books/0321396855/ per i dettagli su un particolare libro con ISBN 0321396855. Questo contrasta con le applicazioni incentrate sull'azione, solitamente con URL lunghi e difficili da crittografare che descrivono le azioni da eseguire, come http://www.bookstore.com/action/query?t=b&id=11117645532&qp =0321396855 . I parametri di query vengono utilizzati per selezionare i dati richiesti. Utilizzando l'esempio della libreria, specificando il parametro soggetto si limita l'oggetto del libro. Ad esempio, fisica o gialli, o ad esempio l'URL http://www.bookstore.com/books/?subject=computers/eclipse - una richiesta che restituisce un elenco di libri sulla piattaforma Eclipse.

Il termine REST è stato coniato da Roy Fielding nella sua tesi di dottorato. Considerava i collegamenti ipertestuali come un mezzo per modificare (memorizzare) lo stato di un'applicazione. I collegamenti ipertestuali sono archiviati nelle risorse dell'applicazione e sono un metodo per modificare lo stato dell'applicazione, reindirizzando da uno stato all'altro. Di solito i collegamenti ipertestuali in (X)HTML sono destinati all'uso umano, non sono stati utilizzati in XML, che era destinato all'elaborazione della macchina. Proprio come (X)HTML, i servizi Web REST utilizzano collegamenti ipertestuali in XML.

Le applicazioni Web tradizionali accedono alle risorse tramite operazioni HTTP GET o POST. Le applicazioni RESTfull funzionano con risorse di stile "crea, leggi, aggiorna ed elimina (CRUD)" utilizzando piene possibilità Protocollo HTTP (POST, GET, PUT e DELETE).

Altro nota importante sull'applicazione REST: le applicazioni RESTful dovrebbero essere stateless. Ciò significa che l'applicazione REST non memorizza alcuno stato della sessione sul lato server. Tutte le informazioni necessarie per soddisfare una richiesta vengono trasmesse nella richiesta stessa. (Pertanto, il server deve rispondere allo stesso modo alle richieste ripetute, ndr). Di conseguenza, il client può memorizzare nella cache le risorse ricevute, il che può accelerare notevolmente la velocità dell'applicazione laddove il servizio lo consente esplicitamente. Per ulteriori informazioni su REST, vedere i collegamenti all'articolo.

WSDL e REST

Il WSDL contiene tutti i dettagli sul servizio web, tra cui:

    URL del servizio web
    Meccanismi di comunicazione che il servizio web comprende
    Operazioni che un servizio Web può eseguire
    Struttura dei messaggi del servizio Web

I clienti possono utilizzare i dettagli elencati per interagire con il servizio.

WSDL 2.0 è stata dichiarata una raccomandazione del W3C nel giugno 2007. Questa versione dello standard WSDL è stata rilasciata per risolvere i problemi dello standard WSDL 1.1, molti dei quali sono stati scoperti organizzazione Web Interoperabilità dei servizi (WS-I). Inoltre, WSDL 2.0 ha migliorato il supporto per i binding HTTP.

WSDL stesso è XML, un sottoinsieme che descrive formalmente un servizio Web. Pensa alla descrizione WSDL di un servizio Web come al suo contratto API con il client. Il WSDL specifica l'indirizzo, i metodi di comunicazione validi, l'interfaccia e i tipi di messaggio del servizio Web. In breve, la descrizione WSDL contiene tutte le informazioni necessarie a un client per utilizzare un servizio Web.

L'applicabilità di WSDL va oltre il suo utilizzo come contratto API. Essendo definizione formale, WSDL può essere utilizzato da software che semplificano l'implementazione di servizi web per operazioni quali:

  • Generazione codice sorgente applicazione client e server per un servizio web in diversi linguaggi di programmazione
  • Pubblicazione di un servizio Web
  • Test dinamici del servizio Web

Maggioranza strumenti software per l'utilizzo dei servizi Web include il supporto per WSDL 1.1. Di recente, c'è stato un numero crescente di strumenti di sviluppo di servizi Web che supportano WSDL 2.0. Progetto Web Apache services è costituito da due sottoprogetti che attualmente supportano WSDL 2.0. Woden è un parser WSDL 2.0 basato su Java. Il progetto dei servizi Web Apache fornisce anche una trasformazione WSDL 2.0 XSL (XSLT). Bella stampante WSDL 2.0, che fornisce una migliore leggibilità umana del documento WSDL. Axis2 è un popolare motore di servizi Web (anch'esso di Apache) che genera codice Java client e server da un documento WSDL 2.0.

Descrizione di un servizio Web REST utilizzando WSDL 2.0

Stai creando una libreria con un URL promosso: http://www.bookstore.com . Hai già creato due servizi Web REST:

  • elenco libri - il servizio riceve un elenco di libri da te venduti.
  • dettagli del libro: il servizio riceve informazioni su un libro specifico.

La risposta viene restituita nei documenti XML.

Elemento interfaccia definisce un elenco di operazioni del servizio Web, inclusa una descrizione dei messaggi di input, output e di errore per le operazioni, nonché l'ordine in cui vengono passati.

Elemento rilegatura definisce le modalità di comunicazione tra il cliente e il servizio web. Nel caso dei servizi web REST, HTTP è specificato come mezzo di comunicazione.

L'elemento di servizio associa gli indirizzi dei servizi web a specifiche interfacce (interfaccia) e mezzi di comunicazione (binding). (ovvero corrisponde all'URL dell'operazione del servizio Web e all'elemento rilegatura).

Associazione dell'elenco dei libri a HTTP

Elemento rilegatura specifica il legame di un servizio web con uno specifico protocollo di trasferimento dati. Per associare il servizio elenco libri a HTTP, è necessario specificare il valore http://www.w3.org/ns/wsdl/http per l'attributo genere elemento rilegatura.

Elemento rilegatura può facoltativamente fare riferimento interfaccia. Lascia l'attributo interfaccia vuoto. Lo creerai dentro sezione successiva. Se interfaccia Associato a rilegatura, poi rilegatura un elemento può facoltativamente definire un elemento figlio operazione, che è uno specchio per funzionamento dell'interfaccia elemento. Devi creare uno stub di elemento operazione e completare il collegamento operazione più tardi dopo la creazione interfaccia.

Esistono 4 metodi di comunicazione HTTP

  • ELIMINARE

Il servizio Elenco libri legge la richiesta e opera di conseguenza con un HTTP GET. Impostare il metodo GET sull'elemento operazionein utilizzando l'attributo del metodo dallo spazio dei nomi HTTP WSDL 2.0. Per utilizzare questo attributo, devi prima definire lo spazio dei nomi http://www.w3.org/ns/wsdl/http sull'elemento descrizione.

Elenco libri Il servizio di rilegatura è definito nell'elenco seguente. Specifica ora rilegatura nell'elemento punto finale:tns:BookListHTTPBinding.

Il servizio di liste libri della libreria.

Definizione del funzionamento del servizio liste libri

Finora hai imparato come affrontare e comunicare con il servizio web elenco libri. Successivamente si specifica l'operazione del servizio elenco libri, che descrive che cosa il servizio elenco libri lo fa.

Quindi, hai imparato come impostare l'indirizzo e impostare il binding (metodo di comunicazione) per il servizio web. Successivamente, è necessario definire un'operazione di servizio che definisca ciò che fa il servizio Web elenco libri.

L'elemento interfaccia e il relativo elemento operazione figlio vengono utilizzati per definire le operazioni di servizio. Nel caso di un elenco di libri, si definisce una singola operazione getBookList che restituisce un elenco di libri.

Quindi definire tre attributi sull'elemento operazione:

modello

Utilizzato per specificare il modello di scambio dei messaggi modello di scambio di messaggi(MEP) per l'operazione. MEP definisce la sequenza di messaggi per un'operazione e la loro direzione. In questo caso, devi specificare il valore http://www.w3.org/ns/wsdl/in-out per indicare che il servizio web riceve un messaggio di input che richiede un elenco di libri e invia un messaggio di output con un elenco di libri. Per supportare questo MEP, specificare gli elementi figlio ingresso e produzione per elemento operazione. Questi elementi utilizzano gli elementi descritti nello schema XML per definire le strutture dei messaggi. Dettagli nella prossima sezione.

stile

Utilizzato per indicare informazioni aggiuntive su un lavoro. Specificare il valore http://www.w3.org/ns/wsdl/style/iri , che impone restrizioni sul contenuto degli elementi di input, ad esempio richiedendo che utilizzi solo elementi dello schema XML.

wsdlx: sicuro

wsdlx:safe: dallo spazio dei nomi delle estensioni WSDL, questo attributo dichiara che questa operazione è idempotente. Questo tipo di operazione non modifica la risorsa e può quindi essere richiamata più volte con gli stessi risultati. Per utilizzare questo elemento, dichiarare lo spazio dei nomi delle estensioni WSDL http://www.w3.org/ns/wsdl-extensions nell'elemento di descrizione.

Questo attributo proviene dallo spazio dei nomi delle estensioni WSDL. Specifica che l'operazione è idempotente. Questa operazione non modifica la risorsa, quindi può essere chiamata più volte con gli stessi risultati. Per utilizzare questo elemento, è necessario dichiarare le estensioni WSDL dello spazio dei nomi http://www.w3.org/ns/wsdl-extensions nell'elemento radice (l'elemento di descrizione).

Puoi trovare i modelli, gli stili e le definizioni di wsdlx:safe per lo scambio di messaggi predefiniti in WSDL 2.0 Parte 2: Aggiunte

Di seguito la definizione del servizio listino libri con aggiunta di descrizione interfaccia. Dopo aver aggiunto un'interfaccia, è ora possibile modificare l'elemento dell'operazione di associazione per specificare i collegamenti a quanto descritto interfaccia e operazione.

L'associazione HTTP RESTful per il servizio elenco libri. Il servizio di liste libri della libreria.

Definizione dei messaggi operativi dell'elenco libri

Il servizio Web elenco libri utilizza due messaggi: input e output. È necessario descrivere le strutture di questi messaggi in modo che i programmi client sappiano cosa inviare all'indirizzo del servizio e cosa aspettarsi di ritorno.

WSDL 2.0 supporta più sistemi di tipo per descrivere il contenuto del messaggio, ma lo schema XML è l'unico in uso. Questa sezione non copre i dettagli dello schema XML. Lo schema XML è utilizzato in molte altre applicazioni, come WSDL 1.1, e ci sono molti buoni articoli a riguardo. Questa sezione illustra come utilizzare lo schema XML per il servizio Web REST dell'elenco di libri e come utilizzare attributi aggiuntivi definiti da WSDL 2.0 per annotare un attributo dello schema.

WSDL 2.0 supporta molti sistemi di definizione dei tipi, ma in pratica viene utilizzato solo lo schema XML. Questo articolo non entra nei dettagli dello schema XML. Lo schema XML è utilizzato in molte altre applicazioni come WSDL 1.1 e ce ne sono molte buoni articoli su di lui. (). Questa sezione dimostra, applicazione di XML schema applicato a esempio specifico REST del servizio elenco libri, nonché l'uso di attributi aggiuntivi definiti in WSDL 2.0 per l'annotazione degli attributi dello schema.

Per descrivere 2 messaggi per l'elenco dei libri, devi descrivere 2 elementi globali.

  • getBookList rappresenta il messaggio di input. Contiene una sequenza di elementi, incluso ogni parametro di query consentito per il servizio: autore, titolo, editore, soggetto e linguaggio. All'interno del messaggio getBookList, possono essere utilizzati solo gli elementi perché lo stile IRI viene scelto per il funzionamento dell'interfaccia.
  • lista di libri rappresenta il messaggio di output. Contiene una sequenza di elementi del libro. Ogni elemento del libro a sua volta contiene gli attributi del titolo e dell'URL. L'attributo title è autoesplicativo. L'attributo url è un collegamento al servizio di dettagli del libro, di ritorno informazioni dettagliate su un libro particolare.

La definizione dell'attributo URL utilizza a sua volta 2 attributi dallo spazio dei nomi delle estensioni WSDL. Gli attributi wsdlx:interface e wsdlx:binding specificano l'interfaccia e l'associazione per il servizio. Software può utilizzare queste informazioni per ricerca automatica servizio. Per utilizzare questi attributi, specificare lo spazio dei nomi delle estensioni WSDL per l'elemento schema. Includere anche lo spazio dei nomi dei dettagli del libro dalla sua descrizione WSDL 2.0.

Lo schema XML per il servizio elenco libri è mostrato di seguito.

L'elemento di richiesta per il servizio elenco libri. L'elemento di risposta per il servizio elenco libri.

Per fare riferimento agli elementi di input e output, è necessario importare lo schema nel documento WSDL. Per importare uno schema, utilizzare l'elemento di importazione dello schema nella sezione dei tipi, come mostrato nell'elenco seguente. Inoltre, è necessario aggiungere riferimenti agli elementi getBookList e Booklist negli elementi di input e output dell'operazione di interfaccia e aggiungere gli spazi dei nomi dello schema XML dell'elenco libri all'elemento radice WSDL.

WSDL pronto per il servizio web dell'elenco dei libri.

Questa è una descrizione WSDL 2.0 di un elenco di servizi di libreria di esempio per ottenere informazioni sui libri. Questa operazione restituisce un elenco di libri. L'associazione HTTP RESTful per il servizio elenco libri. Il servizio di liste libri della libreria.

Nota del traduttore

Mi sono preso la libertà di non tradurre riassunto e link. Entrambi guardano l'autore. nell'articolo originale. Devo dire che la lingua originale è molto pesante. Tuttavia, spero che l'articolo sia utile.

Pagina 2 di 3

Descrizione con WSDL

SOAP funziona molto bene quando tutto ciò che riguarda il servizio Web è noto. Tuttavia, questo non è sempre il caso. La descrizione dell'interfaccia per l'accesso a un servizio Web è WSDL (Web Services Description Language). Questo standard è stato sviluppato congiuntamente da IBM, Microsoft e webMethods. Ognuna di queste tre società aveva il proprio approccio allo sviluppo di uno standard per la descrizione dei servizi Web: IBM ha creato NASSL, Microsoft ha sviluppato SCL e webMethods ha ideato WIDL.

Il risultato della loro collaborazione è stata la versione 1.1 WSDL, Per quanto riguarda il W3C, va notato che, proprio come con SOAP, il consorzio W3C basato sulla versione 1.1 ha sviluppato la versione WSDL 1.2, che ora è una raccomandazione del W3C. La descrizione WSDL di un servizio Web contiene tutte le informazioni necessarie per utilizzare il servizio, incluso metodi disponibili e le loro impostazioni. Queste informazioni sono contenute nei seguenti cinque elementi:

  • - protocolli supportati.
  • - Messaggi del servizio Web (richiesta, risposta).
  • Tutti i metodi disponibili.
  • - L'URI del servizio.
  • - tipi di dati utilizzati.

Tutte queste informazioni sono memorizzate nell'elemento radice della descrizione WSDL. , L'elenco seguente è un esempio di una descrizione WSDL di un servizio Web.

WSDL Descrizione del servizio Web

Sì... non puoi capirlo senza un bicchiere, ma questo è uno dei file WSDL più semplici (!). Sfortunatamente, una delle carenze dell'estensione SOAP PHP 5 è che, a differenza di altre implementazioni SOAP, non consente di generare descrizioni WSDL automaticamente (almeno non ancora). Molto probabilmente questo problema verrà risolto in una versione futura di PHP.

A proposito!

Per generare automaticamente una descrizione WSDL, puoi utilizzare implementazioni alternative del protocollo SOAP in PHP:

Ricerca nella Directory con UDDI

Ora che sappiamo come ottenere informazioni su un servizio Web e come interrogarlo, dobbiamo imparare a trovare tale servizio. A questo scopo, esiste qualcosa di simile alle "Pagine gialle", ovvero UBR (Universal Business Registers - Universal Business Registers) - directory di servizi Web.

Esistono diversi registri di questo tipo, inclusi quelli di IBM, Microsoft, NTT-Com e SAP. Questi registri sincronizzano i loro dati, quindi puoi usarne uno qualsiasi. La versione corrente dello standard UDDI è UDDI 3.0, sebbene la maggior parte delle implementazioni utilizzi la versione 2. Gli sviluppatori di questo standard includono giganti come HP, Intel, Microsoft e Sun.

Per interagire con UBR c'è due tipi di API: API di richiesta e API di pubblicazione. Interfaccia L'API di richiesta (Richiesta) è per l'esecuzione di query servizi nei registri UBR e l'interfaccia L'API di pubblicazione consente agli sviluppatori di registrare i propri servizi. Sembra che sia solo questione di tempo prima di riempire di spam il contenuto dei registri :)

A proposito!

Esistono registri di test progettati per testare la registrazione dei servizi prima che vengano inseriti in registri "reali".

Ecco come appare la richiesta del servizio Web:

sortByNameAsc sortByDateDesc %guid%

Nell'esempio sopra, puoi vedere che la richiesta UDDI è incapsulata in un messaggio SOAP, quindi sembra abbastanza familiare. La risposta alla richiesta è anche un documento SOAP di seguito riportato:

Visita guidata ai servizi web Esempi di servizi Web per tour guidati Servizio di quotazione titoli per visite guidate

Installazione

Installare l'estensione SOAP per PHP5 è abbastanza semplice. In Windows, questo modulo si trova nella sottodirectory ext della directory di installazione di PHP. Per usarlo, devi aggiungere la seguente riga al file php.ini: estensione=php_soap.dll Per funzionare è necessario questo modulo, che è incluso in PHP 5 per impostazione predefinita, almeno nella versione Windows.

Una volta mi è stato affidato il compito di avviare lo sviluppo di servizi Web e mi ha fornito i progetti per il progetto più semplice senza alcuna spiegazione. Il progetto, ovviamente, non è partito. Cos'è la primavera e come funziona, anch'io non ne avevo idea. Inoltre, non sono riuscito a trovare articoli adeguati sullo sviluppo di servizi Web utilizzando Spring, né in russo né in inglese. Ho dovuto affrontare tutto da solo, si è scoperto che tutto non era così spaventoso.
E di recente, ho deciso di vedere quali nuove funzionalità sono state aggiunte da allora a Spring e aggiornare i vecchi servizi, il che di conseguenza mi ha spinto a scrivere questo articolo.

Questo articolo è una guida allo sviluppo di un semplice servizio Web utilizzando il protocollo SOAP utilizzando Spring-WS.

E così, scriveremo il servizio più semplice che accetta un nome utente e invia un saluto e l'ora corrente sul server.

Di cosa avremo bisogno?
  • IDE. Sto usando l'eclissi.
Preparazione al lavoro
Creare un nuovo progetto di applicazione Web. In Eclipse è: "File => Nuovo => Progetto Web dinamico".
Ho chiamato il progetto: HelloService.
Quindi, copia le librerie da Spring, XMLBean, wsdl4j, commons-logging nella directory del progetto WEB-INF/lib.
Se lo desideri, puoi aggiungerli alle librerie del server in modo da non portarli con ogni applicazione.
Creazione di uno schema WSDL
In sostanza, uno schema WSDL ha lo scopo di descrivere un servizio.
Naturalmente, non lo creeremo manualmente. Lo schema verrà generato automaticamente dagli strumenti di Spring, ma ne parleremo più avanti.
Definire i dati di input e di output
Dati in ingresso:
  • Nome stringa.
Produzione:
  • Saluto della stringa;
  • Ora ora corrente.
Creiamo una descrizione dei dati di input e output
Nella directory WEB-INF, creare il file HelloService.xsd. Questa vita sarà necessario per generare lo schema WSDL e creare le classi Java corrispondenti.
Testo del file:

Attributo spazio dei nomi di destinazione- lo spazio dei nomi da utilizzare. Quelli. tutti gli oggetti creati si troveranno nel pacchetto org.example.helloService.
Elementi Richiesta servizio e ServiceResponse descrivere rispettivamente i dati di input e di output (richiesta/risposta).
Attributi min si verifica e maxOccs determinare il numero di ripetizioni di un dato componente all'interno di un elemento. Se questi parametri non vengono specificati, per impostazione predefinita vengono considerati uguali a 1. Per un componente facoltativo, è necessario specificare minOccurs=0. Con un numero illimitato di componenti: maxOccurs=unbounded.
Puoi leggere di più sugli schemi XML.
Creazione di JavaBean
Sulla base dello schema creato, creeremo classi Java. Per fare ciò, crea un file build.xml:

Parametro WS_HOME deve puntare alla directory in cui risiede XMLBeans.
HelloService.xsd- il percorso per lo schema creato.
lib\helloservice.jar- la libreria java in fase di creazione.

Quindi, esegui Ant-build (spero che tu l'abbia già installato).
In Eclipse, puoi eseguirlo in questo modo: RMB sul file build.xml => Run As => Ant Build.
Se attraverso riga di comando:
ant-buildfile build.xml
Bene, stiamo aspettando il completamento della costruzione. Successivamente, possiamo controllare la directory del progetto WEB-INF\lib per la presenza della libreria corrispondente (helloservice.jar).

Implementazione del servizio
Creare un'interfaccia e una classe di servizio
Interfaccia di servizio: HelloService.java:
pacchetto org.esempio; importare java.util.Calendar; public interface HelloService ( public String getHello(String name) genera un'eccezione; public Calendar getCurrentTime();)
Implementazione del servizio: HelloServiceImpl.java:
pacchetto org.esempio; importare java.util.Calendar; import org.springframework.stereotype.Service; @Service public class HelloServiceImpl implementa HelloService ( public String getHello(String name) genera Exception ( return "Hello, " + name + "!"; ) public Calendar getCurrentTime() ( return Calendar.getInstance() )
Questo codice, penso, non ha bisogno di commenti. L'unica cosa che può causare domande alle persone che non hanno mai incontrato Spring è l'annotazione @ Service, ma di questo parlerò un po' più avanti.
punto finale
Endpoint: una classe che sarà responsabile dell'elaborazione delle richieste in arrivo (una sorta di punto di ingresso).

Crea file HelloServiceEndpoint.java:
pacchetto org.esempio; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ws.server.endpoint.annotation.Endpoint; import org.springframework.ws.server.endpoint.annotation.PayloadRoot; import org.example.helloService.ServiceRequestDocument; import org.example.helloService.ServiceRequestDocument.ServiceRequest; import org.example.helloService.ServiceResponseDocument; import org.example.helloService.ServiceResponseDocument.ServiceResponse; @Endpoint public class HelloServiceEndpoint( private static final String namespaceUri = "http://www.example.org/HelloService"; private HelloService helloService; @Autowired public void HelloService (HelloService helloService) ( this.helloService = helloService; ) @PayloadRoot( localPart = "ServiceRequest", namespace = namespaceUri) public ServiceResponseDocument getService(ServiceRequestDocument request) genera un'eccezione ( ServiceRequestDocument reqDoc = request; ServiceRequest req = reqDoc.getServiceRequest(); ServiceResponseDocument respDoc = ServiceResponseDocument.Factory.newInstance(); ServiceResponse resp = respDoc. addNewServiceResponse(); String userName = req.getName(); String helloMessage = testNewService.getHello(userName); Calendar currentTime = testNewService.getCurrentTime(); resp.setHello(helloMessage); resp.setCurrentTime(currentTime); return respDoc; ) )
Cosa si fa qui?
annotazione @endpoint lo determina solo data classe elaborerà le richieste in arrivo.
spazio dei nomiUri– lo stesso spazio dei nomi specificato durante la creazione dello schema xml.

Ora torniamo un po' indietro e ricordiamo l'annotazione @ Servizio. Senza entrare nei dettagli per non sovraccaricare il lettore ulteriori informazioni, quindi questa annotazione dice a Spring di creare l'oggetto corrispondente e l'annotazione @Autocablato serve per l'iniezione sostituzione automatica) dell'oggetto corrispondente. Naturalmente, durante la costruzione applicazioni semplici non ha senso usare queste annotazioni, ma ho deciso di non escluderle in questo esempio.

Il resto, ancora una volta, dovrebbe essere tutto chiaro. Tieni presente che ServiceRequest, ServiceResponse, ecc. - queste sono solo le classi che sono state create in base al nostro schema xml.

Configurazione del servizio primaverile
Qui si avvicina la fine.
Crea un file service-ws-servlet.xml.

sws: guidato da annotazioni- dice proprio questo questo progetto vengono utilizzate le annotazioni.
MA contesto:scansione componenti specifica il pacchetto in cui cercare le annotazioni, inclusi i sottopacchetti.

I prossimi due contenitori saranno sempre gli stessi. La loro essenza è ricevere e convertire una richiesta da Xml a un oggetto Java e un'ulteriore trasformazione inversa.

sws:dynamic-wsdl responsabile di generazione automatica Documento WSDL basato sullo schema XML generato.
Posizione punta al percorso dello schema.
posizioneUri– indirizzo (relativo al container) dove sarà disponibile lo schema WSDL.
Nel mio caso, il WSDL è disponibile al seguente indirizzo:
localhost/HelloService/HelloService.wsdl

Descrittore di distribuzione
E infine, l'ultimo.
Nella directory WEB-INF, cambiamo o creiamo un file web.xml.
ciao servizio ciao servizio servizio ws org.springframework.ws.transport.http.MessageDispatcherServlet transformWsdlLocations vero servizio ws /*
Non descriverò più questo file, la maggior parte delle persone dovrebbe già saperlo. Per i progetti semplici, essenzialmente non dovrebbe cambiare. Vale solo la pena notare che il nome del servlet (servlet-name) deve corrispondere al nome del file di configurazione Spring del servizio servizio ws-servlet.xml.
Controllo della salute
Il primo segno corretto funzionamentoè lo schema WSDL generato.
Per verificare, vai all'indirizzo di questo schema (http://localhost/HelloService/HelloService.wsdl) e guarda: lì dovrebbe essere visualizzato un file xml. Se non viene visualizzato nulla o quale errore è apparso, rileggiamo attentamente l'intero articolo e cerchiamo cosa abbiamo sbagliato.

Per ulteriori verifiche, abbiamo bisogno di soapUI (ho la versione 3.0.1).
Installalo ed eseguilo.
Crea un nuovo progetto: File => Nuovo progetto soapUI. Nel campo WSDL/WADL iniziale, inserire un collegamento allo schema WSDL (http://localhost/HelloService/HelloService.wsdl).
Nel progetto creato, apri la richiesta richiesta.

Nel campo Nome, inserisci un nome e fai clic sul pulsante "Invia richiesta".


Di conseguenza, riceviamo una risposta dal server con un saluto e l'ora corrente.


Se qualcosa è andato storto, rileggi di nuovo questo articolo.

Qual è il prossimo?
Bene, allora dobbiamo scrivere un client per questo servizio Web. Ma questo è già materiale per un altro articolo, che potrebbe essere scritto in seguito, se questo materiale interessa a qualcuno.

Articoli correlati in alto