Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Windows 8
  • Descrierea wsdl. Așa arată o solicitare de serviciu web

Descrierea wsdl. Așa arată o solicitare de serviciu web

În acest articol voi vorbi despre ce este un fișier WSDL, de ce aveți nevoie de el și cum să lucrați cu el.

Harta articolului

Ce este WSDL

WSDL este un limbaj de descriere a serviciului web structurat ca XML. Scopul principal al fișierului WSDL este de a oferi o interfață pentru accesarea funcțiilor de serviciu și a tipurilor de date returnate; calea către serverul care gestionează cererile etc.

Calea către fișierul wsdl arată de obicei ca http: //host/services/wsdl/gbdar-v2-2.wsdl

Există multe instrumente, biblioteci pentru citirea unui fișier WSDL.

SoapUi

Un astfel de instrument este soapUi (). Prin instalarea unei distribuții concepute pentru platforma dvs., puteți crea proiect nou cu comanda File / New SoapUi project. În caseta de dialog pentru crearea unui proiect nou, lăsați activată caseta de selectare Creare cereri de eșantion

Executarea interogărilor

Noul proiect va crea automat șabloane de solicitare pentru serviciu, a căror descriere este conținută în fișierul wsdl. În partea stângă a arborelui, veți vedea o listă de funcții conținute în fișierul WSDL. Voi extinde funcția de replicare. În interiorul ei se află o cerere Request1, făcând dublu clic pe care, vom vedea un dialog cu un șablon de cerere, în locul parametrilor impliciti se vor pune semne de întrebare. Pentru ca funcția să fie executată corect, trebuie să completați toți parametrii care nu sunt marcați cu eticheta Opțional și apoi să faceți clic pe triunghiul verde din colțul din stânga sus al casetei de dialog.

Dacă toți parametrii sunt specificați corect, răspunsul serviciului la cerere va apărea în partea dreaptă.

SoapUi oferă posibilitatea de a vizualiza parametrii fișierului WSDL, pentru aceasta trebuie să faceți dublu clic pe numele interfeței (marcat cu o pictogramă verde în arborele de fișiere WSDL, pentru mine - gdbar-v2-2SOAP). În caseta de dialog, puteți găsi:

  • Fila Vedere generală - Descriere parametri generali WSDL, Lista de caracteristici și acțiuni de server asociate
  • Fila Service Endpoints - calea către server și alți parametri
  • Conținut WSDL - arborele de navigare a fișierelor
  • Conformitatea WS-I - aici puteți crea un raport WS-I pe interfață

Generarea documentatiei

SoapUi ne permite să generăm documentație pentru funcțiile WSDL. Pentru a face acest lucru, faceți clic dreapta pe interfață și apelați comanda Generați documentație. Drept urmare, obținem manual detaliatîn format html.

Atât, abonați-vă la postări noi, lăsați comentarii, faceți sugestii pentru îmbunătățirea articolului.

Elementele de extensie de legare sunt utilizate pentru a specifica o gramatică specifică pentru mesajele de intrare (3) și de ieșire (4), mesaje de eroare (5). De asemenea, pot fi indicate informații despre nivelul de operare (2) și nivelul obligatoriu (1).

Elementul de legare a operațiunii conține date pentru operația cu același nume tip asociat port. Cu toate acestea, numele operațiunii în caz general nu este unic (exemplu: supraîncărcare metodă/funcție - folosind aceleași nume cu semnături diferite), prin urmare poate să nu fie suficient pentru a determina fără ambiguitate funcționarea țintă a tipului de port. În astfel de cazuri, operația țintă este adresată prin specificarea suplimentară a numelor adecvate pentru elementele wsdl: input și wsdl: output folosind atributul name.

Legare trebuie sa instalați un singur protocol.

Legare nu ar trebui conțin informații despre adresă.

Port

Portul definește un separat punctul final prin setarea adresei de conectare.

  1. <wsdl:definiții .... >
  2. <wsdl:serviciu .... > *
  3. <wsdl:port name = "nmtoken" binding = "qname"> *
  4. <-- extensibility element (1) -->
  5. wsdl:port>
  6. wsdl:serviciu>
  7. wsdl:definiții>

Atributul name specifică un nume unic printre toate porturile din documentul WSDL. Atributul de legare al tipului QName conține o legătură către legare (vezi).

Elementele de extensie (1) sunt utilizate pentru a seta adresa.

Port nu ar trebui setați mai multe adrese.

Port nu ar trebui conține orice informații obligatorii, altele decât o adresă.

Serviciu

Un serviciu reunește un set de porturi asociate.

  1. <wsdl:definiții .... >
  2. <wsdl:serviciu nume = "nmtoken"> *
  3. <wsdl:port .... /> *
  4. wsdl:serviciu>
  5. wsdl:definiții>

Atributul name specifică un nume unic printre toate serviciile definite în documentul WSDL.

Porturile din cadrul serviciului sunt conectate după cum urmează:

  • Porturile nu comunică între ele (adică, ieșirea unui port nu este intrarea altuia).
  • Dacă un serviciu are mai multe porturi care au un tip de port comun, dar utilizează legături diferite sau au adrese diferite, acele porturi sunt alternative. Fiecare astfel de port implementează un comportament logic echivalent (în limitele de transport și format de mesaj impuse de legarea corespunzătoare). Acest lucru permite clientului să aleagă port specific pentru schimb pe baza diverselor criterii (suport protocol de transport etc.).
  • Privind porturile, puteți determina ce tipuri de porturi sunt acceptate de serviciu. Pe baza acestor date, clientul poate determina capacitatea de a interacționa cu un anumit serviciu. Acest lucru este util dacă implicați o relație între operațiuni din tipuri diferite porturi și pentru o sarcină specifică, serviciul trebuie să accepte toate tipurile de porturi necesare.
  1. Aceasta este o traducere gratuită, parțială, revizuită a documentului Web Services Description Language (WSDL) 1.1 din 15 martie 2001
  2. Este extrem de incomod să operezi cu termeni de neclintit scrisi în latină și, în plus, sunt traduși fără ambiguitate. Prin urmare, numele original este dat numai atunci când este introdus un termen nou, iar mai departe în text este folosită traducerea în limba rusă.

cuvânt înainte

Clienții clienților au solicitat clienților fișiere xsd pentru structurile transportate de serviciile Web în curs de implementare. Clienții au răspuns oferindu-le clienților clienților să creeze WSDL-uri. Acea. în mod neașteptat, „din senin” a fost nevoie să se facă nu doar scheme xsd pentru validarea datelor, ci „WSDL-uri întregi”. De obicei, WSDL-urile sunt folosite pentru SOAP, dar avem REST...

Am scris deja despre

Introducere

Termenul de servicii web este de obicei asociat cu servicii bazate pe operațiuni sau acțiuni bazate pe standarde SOAP sau WS *, cum ar fi WS-Addressing sau WS-Security. Termenul de servicii Web REST se referă în general la arhitectura bazată pe resurse a serviciilor Web care transportă XML prin HTTP. Fiecare dintre aceste stiluri arhitecturale are propriul loc, dar până de curând, standardul WSDL nu a acceptat ambele stiluri. Legarea HTTP WSDL 1.1 a fost inadecvată pentru a descrie interacțiunea cu folosind XML peste HTTP, adică nu a existat o modalitate formală de a descrie serviciile web REST folosind WSDL. Publicarea standardului WSDL 2.0 (care a fost dezvoltat ținând cont de necesitatea descrierii serviciilor Web REST) ​​în statutul de recomandare La nivel mondial Web Consortium (W3C) a oferit un limbaj pentru descrierea serviciilor Web REST.

REST este un stil arhitectural care tratează Web-ul ca pe o aplicație centrată pe resurse. În termeni practici, aceasta înseamnă că fiecare URL dintr-o aplicație RESTful este o resursă. URL-ul este ușor de înțeles și de reținut. De exemplu, o librărie poate defini adresa URL http://www.bookstore.com/books/ pentru o listă de cărți vândute și http://www.bookstore.com/books/0321396855/ pentru detalii despre o anumită carte cu ISBN 0321396855. Acest lucru contrastează cu aplicațiile centrate pe acțiune, de obicei cu adrese URL lungi și complexe care descriu acțiunile care trebuie întreprinse, cum ar fi http://www.bookstore.com/action/query?t=b&id=11117645532&qp=0321396855. Parametrii de interogare sunt utilizați pentru a selecta datele necesare. Folosind exemplul de librărie, specificarea parametrului subiect limitează subiectul cărții. De exemplu, fizică sau povești polițiste sau, de exemplu, adresa URL http://www.bookstore.com/books/?subject=computers/eclipse - o solicitare care returnează o listă de cărți despre platforma Eclipse.

Termenul REST a fost inventat de Roy Fielding în teza sa de doctorat. El a văzut hyperlinkurile ca pe un mijloc de a schimba (stoza) starea unei aplicații. Hyperlinkurile sunt stocate în resursele aplicației și reprezintă o metodă de schimbare a stării aplicației, redirecționând de la o stare la alta. De obicei, hyperlink-urile în HTML (X) sunt destinate uzului uman, nu au fost folosite în XML, care a fost conceput pentru prelucrarea automată. La fel ca (X) HTML, serviciile web REST folosesc hyperlinkuri în XML.

Aplicațiile web tradiționale accesează resursele prin operațiuni HTTP GET sau POST. Aplicațiile RESTfull funcționează cu resurse în stilul „creați, citiți, actualizați și ștergeți (CRUD)” folosind posibilități complete Protocol HTTP (POST, GET, PUT și DELETE).

Încă una notă importantă despre aplicațiile REST: aplicațiile RESTful trebuie să fie apatride. Aceasta înseamnă că aplicația REST nu stochează nicio stare de sesiune pe partea serverului. Toate informațiile necesare pentru a îndeplini cererea sunt transmise în cererea însăși. (Prin urmare, serverul trebuie să răspundă solicitărilor repetate cu același comentariu al traducătorului). În consecință, clientul poate stoca în cache resursele primite, ceea ce poate accelera semnificativ viteza aplicației acolo unde serviciul o permite în mod explicit. Pentru a afla mai multe despre REST, consultați linkurile articolelor.

WSDL și REST

WSDL conține toate detaliile despre serviciul web, inclusiv:

    URL serviciu web
    Mecanisme de comunicare pe care serviciul web le înțelege
    Operații pe care le poate efectua un serviciu web
    Structura mesajelor serviciului web

Clienții pot folosi detaliile enumerate pentru a interacționa cu serviciul.

WSDL 2.0 a fost declarată recomandare W3C în iunie 2007. Această versiune a standardului WSDL a fost lansată pentru a rezolva problemele din standardul WSDL 1.1, dintre care multe au fost descoperite de Web Interoperabilitatea serviciilor (WS-I). În plus, WSDL 2.0 are suport îmbunătățit pentru legăturile HTTP.

WSDL în sine este XML - un subset de descriere formală a unui serviciu web. Gândiți-vă la descrierea WSDL a unui serviciu web ca la contractul său API cu clientul. WSDL specifică adresa, metodele permise de transfer de informații, interfața și tipurile de mesaje ale serviciului web. Pe scurt, descrierea WSDL conține toate informațiile de care un client are nevoie pentru a utiliza serviciul web.

Aplicabilitatea WSDL depășește utilizarea sa ca contract API. Fiind definiție formală WSDL poate fi utilizat de software pentru a simplifica implementarea serviciilor web pentru operațiuni precum:

  • Generarea cod sursa aplicație client și server pentru serviciu web în diferite limbaje de programare
  • Publicarea unui serviciu web
  • Testare dinamică a serviciilor web

Majoritate instrumente software pentru lucrul cu serviciile web includ suport pentru WSDL 1.1. Recent, un număr tot mai mare de instrumente de dezvoltare a serviciilor web care acceptă WSDL 2.0. Proiect Apache Web servicii constă din două subproiecte care suportă în prezent WSDL 2.0. Woden este un validator de analizator WSDL 2.0 bazat pe Java. Proiectul Apache Web Services oferă, de asemenea, o transformare XSL (XSLT) a WSDL 2.0 numită WSDL 2.0 drăguță imprimantă care oferă o mai bună lizibilitate umană a documentului WSDL. Axis2 este un motor de servicii web popular (tot de la Apache) care implementează generarea de cod Java client și server dintr-un document WSDL 2.0.

Descrierea unui serviciu web REST utilizând WSDL 2.0

Creați o librărie care are o adresă URL promovată: http://www.bookstore.com. Ați creat deja două servicii web REST:

  • listă de cărți - serviciul primește o listă a cărților pe care le vindeți.
  • detalii carte - serviciul primește informații despre o anumită carte.

Răspunsul este returnat în documente XML.

Element interfata definește o listă de operațiuni ale serviciului web, inclusiv o descriere a mesajelor de intrare, ieșire și de eroare pentru operațiuni, precum și ordinea transmiterii.

Element legare definește mijloacele de comunicare între client și serviciul web. În cazul serviciilor web REST, HTTP este specificat ca mediu de comunicare.

Elementul de serviciu asociază adresele de servicii web cu interfețe și comunicații specifice (obligatorie). (Adică se potrivește cu adresa URL a operațiunii serviciului web și cu elementul legare).

Legarea listei de cărți la HTTP

Element legare specifică legarea unui serviciu web la un anumit protocol de transfer de date. Pentru a lega serviciul de listă de cărți la HTTP, trebuie să specificați valoarea http://www.w3.org/ns/wsdl/http pentru atribut tip element legare.

Element legare se poate referi opțional la interfata... Lasă atributul interfata gol. Îl vei crea în secțiunea următoare... Dacă interfata asociat cu legare, atunci legare element poate defini opțional un element copil Operațiune care este oglindită pentru operarea interfeței element. Trebuie să creați un ciot de element Operațiuneși completați linkul către Operațiune mai târziu după creaţie interfata.

Există 4 metode de comunicare HTTP

  • ȘTERGE

Serviciul de listă de cărți citește cererea și funcționează în consecință folosind HTTP GET. Setați metoda GET pentru elementul operatioin folosind atributul method din spațiul de nume HTTP WSDL 2.0. Pentru a utiliza acest atribut, mai întâi trebuie să definiți spațiul de nume http://www.w3.org/ns/wsdl/http pe element Descriere.

Serviciul de legare a listelor de cărți este definit în lista următoare. Punct acum legareîn element punct final: tns: BookListHTTPBinding.

Serviciul de liste de cărți al librăriei.

Definiția operațiunii de serviciu de listă de cărți

Până acum ați învățat cum să vă adresați și să comunicați cu Serviciu web lista de cărți. Apoi specificați operațiunea serviciului de listă de cărți, care descrie ce serviciul de liste de cărți nu.

Deci, ați învățat cum să setați adresa și să setați legarea (metoda de comunicare) pentru un serviciu web. Apoi, trebuie să setați operațiunea serviciului, care determină ce face serviciul web cu listă de cărți.

Elementul de interfață și elementul său de operare copil sunt utilizate pentru a defini operațiunile de serviciu. În cazul listei de cărți, definiți o singură operație getBookList care returnează o listă de cărți.

Apoi definiți trei atribute pentru elementul de operare:

Model

Folosit pentru a specifica un model de mesaje model de schimb de mesaje(MEP) pentru operare. MEP definește succesiunea de mesaje pentru operațiune și direcția acestora. În acest caz, trebuie să specificați valoarea http://www.w3.org/ns/wsdl/in-out pentru a indica faptul că serviciul web primește un mesaj de intrare solicitând o listă de cărți și trimite un mesaj de ieșire cu o listă. de cărți. Pentru a susține acest europarlamentar, specificați copiii intrareși ieșire pentru element Operațiune... Aceste elemente folosesc elemente descrise în schema XML care definesc structurile mesajelor. Detalii în secțiunea următoare.

Stil

Folosit pentru a indica informații suplimentare despre un loc de muncă. Specificați valoarea http://www.w3.org/ns/wsdl/style/iri, care impune restricții asupra conținutului elementelor de intrare, cum ar fi solicitarea acestuia să utilizeze numai elementele de schemă XML.

wsdlx: sigur

wsdlx: safe: Din spațiul de nume de extensii WSDL, acest atribut declară că această operație este idempotent. Acest tip de operație nu modifică resursa și, prin urmare, poate fi apelată de mai multe ori cu aceleași rezultate. Pentru a utiliza acest element, declarați spațiul de nume al extensiilor WSDL http://www.w3.org/ns/wsdl-extensions pe elementul descriere.

Acest atribut provine din spațiul de nume de extensii WSDL. Acesta definește ce este operația idempotent... Această operație nu modifică resursa, deci poate fi apelată de mai multe ori cu aceleași rezultate. Pentru a utiliza acest element, trebuie să declarați extensiile WSDL ale spațiului de nume http://www.w3.org/ns/wsdl-extensions în elementul rădăcină (elementul descriere).

Puteți găsi modele, stiluri și wsdlx de schimb de mesaje predefinite: definiții sigure la WSDL 2.0 Partea 2: Adjuncte

Mai jos este definiția serviciului de liste de cărți cu descrierea adăugată interfata... După adăugarea interfeței, acum puteți modifica elementul de operare de legare pentru a indica linkurile descrise interfatași Operațiune.

Legarea HTTP RESTful pentru serviciul de listă de cărți. Serviciul de liste de cărți al librăriei.

Definirea mesajelor de operare a listei de cărți

Serviciul web de listă de cărți utilizează două mesaje: de intrare și de ieșire. Trebuie să descrieți structurile acestor mesaje, astfel încât programele client să știe ce să trimită la adresa de serviciu și la ce să se aștepte înapoi.

WSDL 2.0 acceptă mai multe sisteme de tip pentru descrierea conținutului mesajului, dar schema XML este singura utilizată. Această secțiune nu acoperă detaliile schemei XML. Schema XML este folosită în multe alte aplicații, cum ar fi WSDL 1.1, și există multe articole bune despre aceasta. Această secțiune evidențiază cum să utilizați schema XML pentru serviciul Web REST pentru lista de cărți și cum să utilizați atribute suplimentare definite de WSDL 2.0 pentru a adnota un atribut de schemă.

WSDL 2.0 acceptă o varietate de sisteme de tastare, dar în practică este folosită doar schema XML. Acest articol nu intră în detaliile schemei XML. Schema XML este folosită în multe alte aplicații precum WSDL 1.1 și există multe articole bune despre el. (). Această secțiune demonstrează aplicație XML schema aplicata la un exemplu concret REST al serviciului de listă de cărți, precum și utilizarea atributelor suplimentare definite în WSDL 2.0 pentru adnotarea atributului schemei.

Pentru a descrie 2 mesaje pentru o listă de cărți, trebuie să descrii 2 elemente globale.

  • getBookList reprezintă mesajul de intrare. Conține o secvență de elemente, inclusiv fiecare parametru de cerere permis pentru serviciu: autor, titlu, editor, subiectși limba... În interiorul getBookList a mesajului, numai elemente pot fi utilizate deoarece stilul IRI este selectat pentru operarea interfeței.
  • lista de carti reprezintă un mesaj de ieșire. Conține o succesiune de elemente de carte. Fiecare element de carte conține la rândul său atributele titlu și url. Atributul titlului se explică de la sine. Atributul url este un link către serviciul de detalii carte, care revine informatii detaliate despre o anumită carte.

Definiția atributului dvs. URL utilizează la rândul său 2 atribute din spațiul de nume al extensiilor WSDL. Atributele wsdlx: interface și wsdlx: binding definesc interfața și legarea pentru serviciu. Software pot folosi aceste informații pentru a găsirea automată serviciu. Pentru a utiliza aceste atribute, specificați spațiul de nume al extensiilor WSDL pentru element schemă... Includeți, de asemenea, spațiul de nume cu detaliile cărții din descrierea sa WSDL 2.0.

Schema XML pentru serviciul de liste de cărți este prezentată mai jos.

Elementul de solicitare pentru serviciul de liste de cărți. Elementul de răspuns pentru serviciul de liste de cărți.

Pentru a face referire la elementele de intrare și de ieșire, trebuie să importați schema în documentul dvs. WSDL. Pentru a importa szema, utilizați elementul de import schema din secțiunea tipuri, așa cum se arată în lista de mai jos. În plus, trebuie să adăugați referințe la elementele getBookList și Booklist în elementele de intrare și ieșire ale operațiunii de interfață și să adăugați spațiile de nume ale schemei XML din lista de cărți la elementul rădăcină WSDL.

Un WSDL gata de utilizat pentru un serviciu web de listă de cărți.

Aceasta este o descriere WSDL 2.0 a unui exemplu de listă de servicii de librărie pentru obținerea de informații despre cărți. Această operațiune returnează o listă de cărți. Legarea HTTP RESTful pentru serviciul de listă de cărți. Serviciul de liste de cărți al librăriei.

Nota traducătorului

Mi-am luat libertatea de a nu traduce rezumatul și linkurile. Amândoi se uită la autor. în articolul original. Trebuie să spun că limba originală este foarte dificilă. Cu toate acestea, sper că veți găsi acest articol de ajutor.

Pagina 2 din 3

Descrierea cu WSDL

SOAP funcționează foarte bine dacă știi totul despre serviciul Web. Cu toate acestea, acesta nu este întotdeauna cazul. Web Services Description Language (WSDL) este un mijloc de descriere a interfeței pentru accesarea unui serviciu Web. Acest standard a fost dezvoltat în comun de IBM, Microsoft și webMethods. Cele trei companii au avut fiecare propria abordare pentru dezvoltarea unui standard pentru descrierea serviciilor Web: IBM a creat NASSL, Microsoft a dezvoltat SCL, iar webMethods a creat WIDL.

Rezultatul colaborării lor a fost versiunea 1.1. limbaj WSDLÎn ceea ce privește W3C, trebuie menționat că, la fel ca și în cazul SOAP, W3C, bazat pe versiunea 1.1, a dezvoltat WSDL 1.2, care este acum o recomandare W3C. WSDL pentru un serviciu Web conține toate informațiile necesare pentru a utiliza acel serviciu, inclusiv metodele disponibileși parametrii acestora. Aceste informații sunt cuprinse în următoarele cinci elemente:

  • - Protocoale acceptate.
  • - Mesaje de serviciu web (cerere, răspuns).
  • Toate metodele disponibile.
  • - URI serviciu.
  • - tipuri de date utilizate.

Toate aceste informații sunt stocate în elementul rădăcină al descrierii WSDL. Lista de mai jos arată un exemplu de descriere WSDL pentru un serviciu Web.

Descrierea serviciului web WSDL

Da... nu vă puteți da seama fără un pahar, dar acesta este unul dintre cele mai simple (!) fișiere WSDL. Din păcate, unul dintre dezavantajele extensiei SOAP pentru PHP 5 este că, spre deosebire de alte implementări SOAP, nu creează automat descrieri WSDL (cel puțin nu încă). Cu siguranță acest defect va fi remediat în versiunile viitoare de PHP.

Apropo!

Puteți utiliza implementări alternative SOAP în PHP pentru a genera automat o descriere WSDL:

Căutarea directorului cu UDDI

Acum că știm cum să obținem informații despre un serviciu web și cum să-l solicităm, trebuie să învățăm cum să găsim un astfel de serviciu. În acest scop, există ceva asemănător Paginilor Galbene, și anume, Registrele Universale de Afaceri (UBR) - directoare de servicii web.

Există mai multe astfel de registre, inclusiv cele ale IBM, Microsoft, NTT-Com și SAP. Aceste registre își sincronizează datele, astfel încât să puteți utiliza oricare dintre ele. Versiunea actuală a standardului UDDI este UDDI 3.0, deși majoritatea implementărilor folosesc versiunea 2. Dezvoltatorii acestui standard includ giganți precum HP, Intel, Microsoft și Sun.

Pentru a interacționa cu UBR, există două tipuri de API: Inquiry API și Publish API... Interfață Inquiry API este la cerere servicii în registrele UBR și interfața Publish API permite dezvoltatorilor să-și înregistreze serviciile... Se pare că completarea conținutului registrelor cu spam este doar o chestiune de timp :)

Apropo!

Există registre de testare pentru testarea înregistrărilor de servicii înainte de a le plasa în registre „adevărate”.

Iată cum arată solicitarea serviciului web:

sortByNameAsc sortByDateDesc % guid%

În exemplul de mai sus, puteți vedea că cererea UDDI este încapsulată într-un mesaj SOAP, așa că pare destul de familiar. Răspunsul la cerere este, de asemenea, documentul SOAP prezentat mai jos:

Tur ghidat de servicii web Exemple de servicii web pentru Ghid de Turism Tur ghidat Serviciul de cotații

Instalare

Instalarea extensiei SOAP pentru PHP5 este destul de ușoară. Pe Windows, acest modul se află în subdirectorul ext al directorului de instalare PHP. Pentru a-l folosi, adăugați următoarea linie în fișierul php.ini: extensia = php_soap.dll Pentru ca acest modul să funcționeze, este necesar, care este inclus implicit în PHP 5, cel puțin în versiunea Windows.

Odată mi-au dat sarcina de a începe dezvoltarea serviciilor Web și mi-au dat mostre ale unui proiect simplu, fără nicio explicație. Proiectul, desigur, nu a început. Ce este primăvara și cum funcționează, nici nu aveam idee. De asemenea, nu am putut găsi articole adecvate despre dezvoltarea serviciilor Web folosind Spring, nici în rusă, nici în engleză. A trebuit să-mi dau seama și eu, s-a dovedit a nu fi atât de înfricoșător.
Și recent, am decis să văd ce noi funcții au fost adăugate la Spring de atunci și să actualizez vechile servicii, ceea ce, prin urmare, m-a determinat să scriu acest articol.

Acest articol este un ghid pentru dezvoltarea unui serviciu web bazat pe SOAP folosind Spring-WS.

Și așa, vom scrie un serviciu simplu care acceptă un nume de utilizator și trimite un salut și ora curentă pe server.

De ce avem nevoie?
  • IDE. Eu folosesc Eclipse.
Pregătirea pentru muncă
Creați un nou proiect de aplicație Web. În Eclipse, acesta este: „Fișier => Nou => Proiect Web dinamic”.
Am numit proiectul: HelloService.
Apoi, copiați bibliotecile din Spring, XMLBean, wsdl4j, commons-logging în directorul de proiect WEB-INF / lib.
Dacă doriți, le puteți adăuga în bibliotecile serverului, pentru a nu le trage cu fiecare aplicație.
Crearea unei scheme WSDL
În esență, o schemă WSDL este menită să descrie un serviciu.
Desigur, nu îl vom crea manual. Schema va fi generată automat de instrumentele Spring, dar mai multe despre asta mai târziu.
Definirea datelor de intrare și de ieșire
Date de intrare:
  • Nume șir.
Ieșire:
  • Salutare șir;
  • Cronometrare la ora curentă.
Creați o descriere a datelor de intrare și de ieșire
În directorul WEB-INF, creați fișierul HelloService.xsd. Acest fișier va fi necesar pentru a genera schema WSDL și pentru a crea clasele Java corespunzătoare.
Textul fișierului:

Atribut targetNamspace- spațiu de nume folosit. Acestea. toate obiectele create vor fi localizate în pachetul org.example.helloService.
Elementele Solicitare serviciuși ServiceResponse descrieți datele de intrare și de ieșire (cerere/răspuns), respectiv.
Atribute minApareși maxApare determina numărul de repetări ale unei componente date în cadrul unui element. Dacă acești parametri nu sunt specificați, atunci în mod implicit ei sunt considerați egali cu 1. Pentru o componentă opțională, trebuie să specificați minOccurs = 0. Cu un număr nelimitat de componente: maxOccurs = nelimitat.
Puteți citi mai multe despre Schemele XML.
Creați JavaBeans
Pe baza schemei create, vom crea clase Java. Pentru a face acest lucru, creați un fișier build.xml:

Parametru WS_HOME ar trebui să indice directorul în care se află XMLBeans.
HelloService.xsd- calea către schema creată.
lib \ helloservice.jar- se creează biblioteca java.

Apoi, rulați Ant-build (sper că l-ați instalat deja).
În Eclipse, îl puteți rula astfel: RMB pe fișierul build.xml => Run As => Ant Build.
Dacă prin Linie de comanda:
ant -buildfile build.xml
Ei bine, așteptăm finalizarea construcției. După aceea, putem verifica directorul de proiect WEB-INF \ lib pentru prezența bibliotecii corespunzătoare (helloservice.jar).

Implementarea serviciului
Creați o interfață și o clasă de servicii
Interfață de serviciu: HelloService.java:
pachet org.example; import java.util.Calendar; interfața publică HelloService (șirul public getHello (numele șirului) aruncă o excepție; calendarul public getCurrentTime ();)
Implementarea serviciului: HelloServiceImpl.java:
pachet org.example; import java.util.Calendar; import org.springframework.stereotype.Service; Clasa publică @Service HelloServiceImpl implementează HelloService (șirul public getHello (nume șir) aruncă o excepție (return „Hello,” + name + „!”;) Public Calendar getCurrentTime () (return Calendar.getInstance ();))
Acest cod, cred, nu are nevoie de comentarii. Singurul lucru pe care oamenii care nu l-au întâlnit anterior Spring pot ridica întrebări este adnotarea @ Service, dar voi vorbi despre asta puțin mai târziu.
Punct final
Endpoint este o clasă care va fi responsabilă pentru procesarea cererilor primite (un fel de punct de intrare).

Creați fișierul HelloServiceEndpoint.java:
pachet org.example; 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 clasă publică HelloServiceEndpoint (privat static String final namespaceUri = "http://www.example.org/HelloService"; HelloService privat helloService; @Autowired public void HelloService (HelloService helloService) (this.helloService = helloService;) (@PayloadRoot localPart = "ServiceRequest", namespace = namespaceUri) public ServiceResponseDocument getService (ServiceRequestDocument cerere) aruncă Excepție (ServiceRequestDocument reqDoc = cerere; ServiceRequest req = reqDoc.getServiceRequest (); ServiceResponseDocument = respaDoc = ServiceResponseDocument = ServiceResponseDocument add-on (ServiciuResponseDocument) user (ResponseDocument) ); String helloMessage = testNewService.getHello (nume utilizator); Calendar currentTime = testNewService.getCurrentTime (); resp.setHello (helloMessage); resp.setCurrent); returnTime (currentTime )
Ce s-a făcut aici?
adnotare @Endpoint doar determină asta această clasă va procesa cererile primite.
namespaceUri- același spațiu de nume care a fost specificat la crearea schemei xml.

Acum să ne întoarcem puțin și să ne amintim adnotarea. @ Serviciu... Dacă nu intri în detalii, pentru a nu supraîncărca cititorul informatii inutile, apoi această adnotare îi spune lui Spring să creeze obiectul corespunzător. @Cablat automat servește pentru injecție ( înlocuire automată) a obiectului corespunzător. Desigur, la construirea aplicatii simple nu are sens să folosești aceste adnotări, dar am decis să nu le exclud pe toate din acest exemplu.

Altfel, din nou, totul ar trebui să fie clar. Rețineți că ServiceRequest, ServiceResponse etc. - acestea sunt exact clasele care au fost create pe baza schemei noastre xml.

Configurarea serviciului de primăvară
Deci sfârșitul se apropie deja.
Creați fișierul service-ws-servlet.xml.

sws: bazat pe adnotare- spune exact asta în acest proiect se folosesc adnotări.
A context: component-scan indică pachetul în care se caută adnotări, în timp ce se caută și în subpachete.

Următoarele două coșuri vor rămâne întotdeauna neschimbate. Esența lor constă în primirea și convertirea unei cereri din Xml într-un obiect Java și în continuare convertirea acesteia înapoi.

sws: dynamic-wsdl responsabil pentru generare automată Document WSDL bazat pe schema Xml generată.
Locație indică calea către schemă.
locatieUri- adresa (relativă la container) la care va fi disponibilă schema WSDL.
În cazul meu, WSDL este disponibil la următoarea adresă:
localhost / HelloService / HelloService.wsdl

Descriptor de implementare
Și în sfârșit, ultimul lucru.
În directorul WEB-INF, modificați sau creați fișierul web.xml.
HelloService HelloService service-ws org.springframework.ws.transport.http.MessageDispatcherServlet transformWsdlLocations Adevărat service-ws /*
Nu voi descrie acest fișier, majoritatea ar trebui să știe deja. Pentru proiectele necomplicate, în esență, nu ar trebui să se schimbe. Este de remarcat doar că numele servlet-ului (servlet-name) trebuie să se potrivească cu numele fișierului de configurare Spring al serviciului. service-ws-servlet.xml.
Verificare funcțională
Chiar primul semn lucru corect este schema WSDL generată.
Pentru a verifica, mergeți la adresa acestei scheme (http: //localhost/HelloService/HelloService.wsdl) și vedeți: fișierul xml ar trebui să fie afișat acolo. Dacă nu a fost afișat nimic sau a apărut ce eroare, recitim cu atenție întregul articol și căutăm ce am greșit.

Pentru o verificare suplimentară, avem nevoie de soapUI (am versiunea 3.0.1).
Instalați-l și rulați-l.
Creați un nou proiect: Fișier => Nou proiect soapUI. În câmpul WSDL inițial / WADL, inserați un link către schema WSDL (http: //localhost/HelloService/HelloService.wsdl).
În proiectul creat, deschideți cererea necesară.

În câmpul Nume, introduceți numele și faceți clic pe butonul „Trimiteți cererea”.


Ca urmare, primim un răspuns de la server cu un salut și ora curentă.


Dacă ceva nu a mers prost, atunci recitim din nou acest articol.

Ce urmeaza?
Ei bine, următorul pas este să scrieți un client pentru acest serviciu Web. Dar acesta este deja material pentru un alt articol, care poate fi scris mai târziu, dacă acest material este de interes pentru cineva.

Top articole similare