Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 8
  • Opis wsdl. Ovako izgleda zahtjev za web uslugu

Opis wsdl. Ovako izgleda zahtjev za web uslugu

U ovom članku ću govoriti o tome što je WSDL datoteka, zašto je potrebna i kako s njom raditi.

Mapa članka

Šta je WSDL

WSDL je jezik opisa web servisa koji ima XML strukturu. Glavna svrha WSDL datoteke je kao sučelje za pristup uslužnim funkcijama i povratnim tipovima podataka; put do servera koji obrađuje zahtjeve itd.

Put do wsdl datoteke obično izgleda kao http://host/services/wsdl/gbdar-v2-2.wsdl

Postoji mnogo alata, biblioteka dizajniranih za čitanje WSDL datoteke.

SoapUi

Jedan takav alat je soapUi(). Instaliranjem distribucije dizajnirane za vašu platformu možete kreirati novi projekat od strane projektnog tima File/New SoapUi. U dijalogu za kreiranje novog projekta, ostavite potvrdni okvir Kreiraj uzorke zahtjeva uključenim

Izvršavanje upita

U novom projektu automatski će se kreirati predlošci zahtjeva za uslugu, čiji se opis nalazi u wsdl datoteci. Na lijevoj strani stabla vidjet ćete listu funkcija sadržanih u WSDL datoteci. Izložit ću funkciju replikacije. Unutar njega nalazi se zahtjev Request1, dvostrukim klikom na koji ćemo vidjeti dijalog sa šablonom zahtjeva, umjesto zadanih parametara biće upitnici. Da bi se funkcija ispravno izvršila, morate popuniti sve parametre koji nisu označeni oznakom Optional, a zatim kliknite na zeleni trokut u gornjem lijevom kutu dijaloga.

Ako su svi parametri ispravno navedeni, odgovor servisa na zahtjev će se pojaviti na desnoj strani.

SoapUi pruža mogućnost pregleda parametara WSDL datoteke; da biste to učinili, morate dvaput kliknuti na ime interfejsa (označeno zelenom ikonom u stablu WSDL datoteka, za mene - gdbar-v2-2SOAP). U dijalogu možete pronaći:

  • Pregled Tab - opis opšti parametri WSDL, lista funkcija i pridruženih radnji servera
  • Kartica Krajnje tačke usluge — putanja do servera i drugi parametri
  • WSDL sadržaj - stablo navigacije datoteka
  • Usklađenost sa WS-I — ovdje možete kreirati WS-I izvještaj o interfejsu

Generisanje dokumentacije

SoapUi nam omogućava da generišemo dokumentaciju o WSDL funkciji. Da biste to uradili, kliknite desnim tasterom miša na interfejs i pozovite naredbu Generiraj dokumentaciju. Kao rezultat dobijamo detaljan priručnik u html formatu.

To je sve, pretplatite se na nove postove, ostavite komentare, dajte prijedloge za poboljšanje članka.

Elementi proširenja vezivanja se koriste za specifikaciju specifične gramatike za dolazne (3) i odlazne (4) poruke o grešci (5). Informacije o nivou rada (2) i nivou vezivanja (1) također mogu biti specificirane.

Element povezivanja operacije sadrži podatke za operaciju istog imena srodni tip luka. Međutim, naziv operacije u opšti slučaj nije jedinstven (primjer: metode/funkcije preopterećenja - korištenje istih imena s različitim potpisima), stoga možda neće biti dovoljno da se jedinstveno odredi ciljna operacija tipa porta. U takvim slučajevima, ciljna operacija se adresira dodatnim specificiranjem odgovarajućih wsdl:input i wsdl:output imena elemenata pomoću atributa name.

Uvezivanje mora instalirati samo jedan protokol.

Uvezivanje ne bi trebalo sadrže podatke o adresi.

Luka

Port definira poseban krajnja tačka postavljanjem adrese za povezivanje.

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

Atribut name specificira jedinstveno ime među svim portovima unutar WSDL dokumenta. Atribut vezivanja tipa QName sadrži referencu na vezivanje (pogledajte).

Elementi ekstenzije (1) se koriste za specificiranje adrese.

Luka ne treba navedite više od jedne adrese.

Luka ne treba sadrže sve obavezujuće informacije osim adrese.

Servis

Usluga spaja skup povezanih portova.

  1. <wsdl:definicije .... >
  2. <wsdl:usluga name = "nmtoken" > *
  3. <wsdl:luka .... /> *
  4. wsdl:usluga>
  5. wsdl:definicije>

Atribut name specificira jedinstveno ime među svim uslugama definiranim unutar WSDL dokumenta.

Portovi unutar usluge su povezani na sljedeći način:

  • Portovi ne komuniciraju jedni s drugima (to jest, izlaz jednog porta nije ulaz drugog).
  • Ako usluga ima više portova koji dijele zajednički tip porta, ali koriste različite veze ili imaju različite adrese, ti portovi su alternativni portovi. Svaki takav port implementira logički ekvivalentno ponašanje (unutar ograničenja transporta i formata poruke koja nameće odgovarajuće vezivanje). Ovo omogućava klijentu da bira određena luka za razmjenu na osnovu različitih kriterija (podrška transportnog protokola, itd.).
  • Gledajući portove, možete odrediti koje vrste portova podržava usluga. Na osnovu ovih podataka, klijent može odrediti mogućnost interakcije sa određenom uslugom. Ovo je korisno ako se podrazumijeva odnos između operacija from različite vrste portove, a za izvođenje određenog zadatka servis mora podržavati sve potrebne tipove portova.
  1. Ovo je besplatni, djelomični, prošireni prijevod dokumenta Web Services Description Language (WSDL) 1.1 od 15. marta 2001.
  2. Izuzetno je nezgodno raditi sa indeklinabilnim terminima napisanim na latinskom, a oni su i nedvosmisleno prevedeni. Stoga se originalno ime daje tek kada se uvede novi termin, a dalje u tekstu se koristi ruski prijevod.

Predgovor

Klijenti su tražili od kupaca xsd fajlove za strukture koje prenose implementirani Web servisi. Kupci su odgovorili pozivajući klijente da kreiraju WSDL-ove. To. iznenada, "iz vedra neba", pojavila se potreba da se naprave ne samo xsd šeme za validaciju podataka, već i "cijeli WSDL-ovi". Obično se WSDL-ovi koriste za SOAP, ali mi koristimo REST...

O tome sam ranije pisao

Uvod

Termin Web usluge se obično povezuje sa uslugama zasnovanim na operacijama ili akcijama zasnovanim na SOAP ili WS* standardima kao što su WS-Addressing ili WS-Security. Pojam REST Web usluge obično se odnosi na arhitekturu Web usluga zasnovanu na resursima koji komuniciraju XML preko HTTP-a. Svaki od ovih arhitektonskih stilova ima svoje mjesto, ali do nedavno, WSDL standard nije podržavao oba ova stila. WSDL 1.1 HTTP vezivanje nije bilo adekvatno za opisivanje interakcije s njim koristeći XML preko HTTP-a, tj. Nije postojao formalni način da se opiše REST Web servis koristeći WSDL. Objava WSDL 2.0 standarda (koji je razvijen uzimajući u obzir potrebu za opisom REST Web servisa) u statusu preporuke World Wide Web konzorcijum (W3C) je obezbedio jezik za opisivanje REST Web usluga.

REST je arhitektonski stil koji Web tretira kao aplikaciju usmjerenu na resurse. Praktično, to znači da svaki URL u RESTful aplikaciji predstavlja resurs. URL-ove je lako razumjeti i zapamtiti. Na primjer, knjižara može definirati URL http://www.bookstore.com/books/ za listu knjiga koje prodaju i http://www.bookstore.com/books/0321396855/ za detalje o određenoj knjizi sa ISBN 0321396855. Ovo je u suprotnosti sa aplikacijama usmjerenim na radnju, koje obično imaju dugačke, složene URL-ove koji opisuju radnje koje treba izvršiti, na primjer http://www.bookstore.com/action/query?t=b&id=11117645532&qp=0321396855 . Parametri upita koriste se za odabir traženih podataka. Koristeći primjer knjižare, navođenje parametra predmeta ograničava temu knjige. Na primjer, fizika ili detektivske priče, ili na primjer URL http://www.bookstore.com/books/?subject=computers/eclipse - zahtjev koji vraća listu knjiga o Eclipse platformi.

Termin REST skovao je Roy Fielding u svojoj doktorskoj tezi. On je hiperveze posmatrao kao sredstvo za promjenu (skladištenje) stanja aplikacije. Hiperveze se pohranjuju u resurse aplikacije i predstavljaju metodu promjene stanja aplikacije, preusmjeravanje iz jednog stanja u drugo. Obično su hiperveze u (X)HTML-u namijenjene za korištenje od strane ljudi; nisu korištene u XML-u, koji je bio namijenjen mašinskoj obradi. Baš kao (X)HTML, REST Web servisi koriste hiperveze u XML-u.

Tradicionalne Web aplikacije pristupaju resursima putem HTTP GET ili POST operacija. RESTfull aplikacije rade s resursima u stilu "kreiraj, čitaj, ažuriraj i izbriši (CRUD)" koristeći pune mogućnosti HTTP protokol (POST, GET, PUT i DELETE).

Drugi važna napomena o RESTful aplikacijama: RESTful aplikacije trebaju biti bez državljanstva. To znači da REST aplikacija ne održava stanje sesije na strani servera. Sve informacije potrebne za kompletiranje zahtjeva prenose se u samom zahtjevu. (Stoga, server mora na isti način odgovoriti na ponovljene zahtjeve. Napomena prevodioca). U skladu s tim, klijent može keširati primljene resurse, što može značajno ubrzati brzinu aplikacije gdje servis to eksplicitno dozvoljava. Da biste saznali više o REST-u, pogledajte veze do članka.

WSDL i REST

WSDL sadrži sve detalje o web servisu uključujući:

    URL web usluge
    Komunikacijski mehanizmi koje web servis razumije
    Operacije koje web servis može izvršiti
    Struktura poruke web usluge

Klijenti mogu koristiti navedene detalje za interakciju sa uslugom.

WSDL 2.0 je najavljen kao preporuka W3C u junu 2007. Ova verzija WSDL standarda je objavljena kako bi riješila probleme sa WSDL 1.1 standardom, od kojih su mnogi pronađeni Web organizacija Interoperabilnost usluga (WS-I). Osim toga, WSDL 2.0 ima poboljšanu podršku za HTTP veze.

Sam WSDL je XML, podskup koji formalno opisuje web servis. Zamislite WSDL opis web usluge kao njen API ugovor s klijentom. WSDL specificira adresu, prihvatljive metode prenošenja informacija, interfejse i tipove poruka web usluge. Ukratko, WSDL opis sadrži sve informacije koje su klijentu potrebne za korištenje web usluge.

Primjenjivost WSDL-a seže dalje od njegove upotrebe kao API ugovora. Biti formalna definicija, WSDL može koristiti softver koji pojednostavljuje implementaciju web servisa za takve operacije kao što su:

  • Generiranje izvorni kod klijentska aplikacija i server za web servis na različitim programskim jezicima
  • Objavljivanje web servisa
  • Dinamičko testiranje web servisa

Većina softver za rad sa web servisima uključuje podršku za WSDL 1.1. U posljednje vrijeme raste broj alata za razvoj web servisa koji podržavaju WSDL 2.0. Projekt Apache Web usluge se sastoje od dva podprojekta koji trenutno podržavaju WSDL 2.0. Woden je Java-based WSDL 2.0 parser-validator. Projekt Apache Web usluga također pruža XSL (XSLT) WSDL 2.0 transformaciju tzv WSDL 2.0 lijepi štampač, što omogućava bolju čitljivost WSDL dokumenta. Axis2 je popularna mašina za web usluge (takođe iz Apachea) koja generiše klijentski i serverski Java kod iz WSDL 2.0 dokumenta.

Opis REST web servisa koji koristi WSDL 2.0

Kreirate knjižaru koja ima napredni URL: http://www.bookstore.com. Već ste kreirali dva REST web servisa:

  • lista knjiga - servis prima listu knjiga koje ste prodali.
  • detalji knjige - usluga prima informacije o određenoj knjizi.

Odgovor se vraća u XML dokumentima.

Element interfejs definira listu operacija web servisa, uključujući opis unosa, izlaza i poruka o greškama za operacije, kao i redoslijed prijenosa.

Element vezivanje određuje način komunikacije između klijenta i web servisa. U slučaju REST web servisa, HTTP je naveden kao sredstvo komunikacije.

Servisni element povezuje adrese web servisa sa specifičnim sučeljima i vezama. (To jest, postavlja korespondenciju između URL-a operacije web usluge i elementa vezivanje).

Povežite listu knjiga na HTTP

Element vezivanje specificira vezivanje web usluge za određeni protokol za prijenos podataka. Da biste povezali uslugu liste knjiga za HTTP, morate navesti vrijednost http://www.w3.org/ns/wsdl/http za atribut tip element vezivanje.

Element vezivanje može se opciono odnositi na interfejs. Ostavite atribut interfejs prazan. Vi ćete ga kreirati u sljedeći odjeljak. Ako interfejs povezano sa vezivanje, Onda vezivanje element može opciono definirati podređeni element operacija, što je ogledalo za rad interfejsa element. Morate kreirati stub elementa operacija i ispunite link do operacija kasnije nakon stvaranja interfejs.

Postoje 4 HTTP načina komunikacije

  • IZBRIŠI

Usluga liste knjiga čita zahtjev i radi u skladu s tim koristeći HTTP GET. Postavite metodu GET za operatioin element koristeći atribut method iz WSDL 2.0 HTTP prostora imena. Da biste koristili ovaj atribut, morate prvo definirati imenski prostor http://www.w3.org/ns/wsdl/http na elementu opis.

Usluga povezivanja spiskova knjiga je definisana u sljedećem popisu. Navedite sada vezivanje u elementu krajnja tačka: tns:BookListHTTPBinding.

Usluga liste knjiga u knjižari.

Definicija rada servisa liste knjiga

Do sada ste naučili kako se obraćati i komunicirati sa Web servis lista knjiga. Zatim specificirate operaciju usluge liste knjiga, koja opisuje koji servis lista knjiga radi.

Dakle, naučili ste kako postaviti adresu i postaviti vezu (metod komunikacije) za web servis. Zatim morate postaviti operaciju usluge, koja određuje šta radi web usluga liste knjiga.

Element sučelja i njegov podređeni operativni element se koriste za definiranje uslužnih operacija. U slučaju liste knjiga, definišete jednu operaciju, getBookList, koja vraća listu knjiga.

Zatim definirajte tri atributa za element operacije:

Uzorak

Koristi se za određivanje obrasca za razmjenu poruka obrazac razmjene poruka(MEP) za operaciju. MEP definira redoslijed poruka za operaciju i njihov smjer. U ovom slučaju, morate navesti vrijednost http://www.w3.org/ns/wsdl/in-out kako biste naznačili da web usluga prima jednu ulaznu poruku koja traži listu knjiga i šalje jednu izlaznu poruku tražeći spisak knjiga. Da biste podržali ovog MEP-a, navedite djecu unos I izlaz za element operacija. Ovi elementi koriste elemente opisane u XML šemi za definiranje struktura poruka. Detalji u sljedećem odjeljku.

Stil

Koristi se za označavanje dodatnih informacija o poslu. Navedite vrijednost http://www.w3.org/ns/wsdl/style/iri , koja nameće ograničenja na sadržaj ulaznih elemenata, kao što je zahtjev da koristi samo elemente XML sheme.

wsdlx:safe

wsdlx:safe: Iz imenskog prostora WSDL ekstenzija, ovaj atribut izjavljuje da je ova operacija idempotentna. Ova vrsta operacije ne mijenja resurs i stoga se može pozvati mnogo puta s istim rezultatima. Da biste iskoristili ovaj element, deklarirajte imenski prostor WSDL ekstenzija http://www.w3.org/ns/wsdl-extensions na elementu opisa.

Ovaj atribut je iz imenskog prostora WSDL ekstenzija. Utvrđuje da li je operacija idempotentan. Ova operacija ne mijenja resurs, tako da se može pozvati više puta s istim rezultatima. Da biste koristili ovaj element, morate deklarirati WSDL ekstenzije imenskog prostora http://www.w3.org/ns/wsdl-extensions u korijenskom elementu (element opisa).

Možete pronaći unaprijed definirane obrasce razmjene poruka, stilove i wsdlx:safe definicije na WSDL 2.0, dio 2: dodaci

Ispod je definicija usluge liste knjiga sa dodatnim opisom interfejs. Nakon dodavanja sučelja, sada možete promijeniti element operacije vezivanja kako biste specificirali veze na opisano interfejs I operacija.

RESTful HTTP veza za uslugu liste knjiga. Usluga liste knjiga u knjižari.

Definiranje servisnih poruka o radu liste knjiga

Web usluga liste knjiga koristi dvije poruke: ulaz i izlaz. Morate opisati strukture ovih poruka tako da klijentski programi znaju šta da pošalju servisu i šta da očekuju nazad.

WSDL 2.0 podržava više tipova sistema za opisivanje sadržaja poruke, ali XML šema je jedina u upotrebi. Ovaj odjeljak ne pokriva detalje XML šeme. XML šema se koristi u mnogim drugim aplikacijama, kao što je WSDL 1.1, i postoji mnogo dobrih članaka o tome. Ovaj odjeljak naglašava kako koristiti XML šemu za REST Web uslugu liste knjiga i kako koristiti dodatne atribute definirane od strane WSDL 2.0 za označavanje atributa sheme.

WSDL 2.0 podržava mnoge sisteme definicije tipa, ali u praksi se koristi samo XML šema. Ovaj članak ne ulazi u detalje o XML shemi. XML šema se koristi u mnogim drugim aplikacijama, kao što je WSDL 1.1, a ima ih mnogo dobri članci o njemu. (). Ovaj odjeljak pokazuje primjena XML-a shema u odnosu na konkretan primjer REST usluge liste knjiga, kao i korištenje dodatnih atributa definiranih u WSDL 2.0 za napomenu atributa sheme.

Da biste opisali 2 poruke za listu knjiga, morate opisati 2 globalna elementa.

  • getBookList predstavlja ulaznu poruku. Sadrži niz elemenata, uključujući svaki parametar zahtjeva dozvoljen za uslugu: autoritet, naslov, izdavač, predmet I jezik. Unutar poruke getBookList se mogu koristiti samo elementi jer je IRI stil odabran za rad interfejsa.
  • bookList predstavlja izlaznu poruku. Sadrži niz elemenata knjige. Svaki element knjige zauzvrat sadrži naslov i url atribute. Atribut title je sam po sebi razumljiv. Url atribut je veza do usluge detalja o knjizi, koja se vraća detaljne informacije o konkretnoj knjizi.

Vaša definicija url atributa koristi zauzvrat 2 atributa iz imenskog prostora WSDL ekstenzija. Atributi wsdlx:interface i wsdlx:binding specificiraju sučelje i povezivanje za uslugu. Softver može koristiti ove informacije za automatsko pronalaženje usluga. Da biste koristili ove atribute, navedite imenski prostor WSDL ekstenzija za element shema. Također uključite imenski prostor detalja knjige iz WSDL 2.0 opisa.

XML šema za uslugu liste knjiga je data ispod.

Element zahtjeva za uslugu liste knjiga. Element odgovora za uslugu liste knjiga.

Da biste referencirali ulazne i izlazne elemente, morate uvesti šemu u svoj WSDL dokument. Da biste uvezli shemu, koristite element za uvoz sheme u odjeljku tipova kao što je prikazano na listi ispod. Dodatno, potrebno je da dodate reference na getBookList i Booklist elemente u ulazne i izlazne elemente operacije interfejsa i dodate prostore imena XML šeme liste knjiga u WSDL osnovni element.

Spreman WSDL za web uslugu popisa knjiga.

Ovo je WSDL 2.0 opis uzorka knjižarske usluge za dobivanje informacija o knjigama. Ova operacija vraća listu knjiga. RESTful HTTP veza za uslugu liste knjiga. Usluga liste knjiga u knjižari.

Napomena prevodioca

Uzeo sam slobodu da ne prevedem sažetak i linkove. Za oboje pogledajte autora. u originalnom članku. Moram reći da je originalni jezik veoma težak. Ipak, nadam se da će članak biti od koristi.

Stranica 2 od 3

Opis koristeći WSDL

SOAP radi vrlo dobro ako se sve zna o web servisu. Međutim, to nije uvijek slučaj. Sredstvo za opisivanje interfejsa za pristup Web servisu je WSDL jezik (jezik opisa Web usluga). Ovaj standard su zajednički razvili IBM, Microsoft i webMethods. Svaka od ove tri kompanije imala je svoj pristup razvoju standarda za opisivanje Web usluga: IBM je napravio NASSL, Microsoft je razvio SCL, a webMethods je osmislio WIDL.

Rezultat njihove saradnje bila je verzija 1.1 WSDL jezik,Što se tiče W3C-a, treba napomenuti da, kao i kod SOAP-a,,W3C konzorcijum izgrađen na verziji 1.1 WSDL 1.2,,koji je sada W3C preporuka. WSDL opis web usluge sadrži sve informacije potrebne za korištenje usluge, uključujući dostupne metode i njihove parametre. Ove informacije su sadržane u sljedećih pet elemenata:

  • - podržani protokoli.
  • - Poruke web servisa (zahtjev, odgovor).
  • Sve dostupne metode.
  • - URI usluge.
  • - korišteni tipovi podataka.

Sve ove informacije su pohranjene u korijenskom elementu WSDL opisa Listing ispod pokazuje primjer WSDL-a, opis web usluge.

WSDL opis web usluge

Da... ne možete to shvatiti bez čaše, ali ovo je jedan od najjednostavnijih (!) WSDL datoteka. Nažalost, jedan od nedostataka SOAP ekstenzije za PHP 5 je taj što, za razliku od drugih SOAP implementacija, ne generiše automatski WSDL opise (barem ne još). Sigurno će ovaj nedostatak biti ispravljen u budućim verzijama PHP-a.

Između ostalog!

Da biste automatski generirali WSDL opis, možete koristiti alternativne implementacije SOAP protokola u PHP-u:

Pretraživanje imenika koristeći UDDI

Sada kada znamo kako da dobijemo informacije o web servisu i kako da ih upitamo, moramo naučiti kako pronaći takvu uslugu. U tu svrhu postoji nešto slično Žutim stranicama, odnosno UBR (Universal Business Registries) registri - imenici Web servisa.

Postoji nekoliko takvih registara, uključujući IBM-ove, Microsoft-ove, NTT-Com-ove i SAP-ove. Ovi registri sinkroniziraju svoje podatke, tako da možete koristiti bilo koji od njih. Trenutna verzija UDDI standarda je UDDI 3.0, iako većina implementacija koristi verziju 2. Programeri ovog standarda uključuju gigantske kompanije kao što su HP, Intel, Microsoft i Sun.

Za interakciju sa UBR-om postoji dvije vrste API-ja: API za upite i API za objavljivanje. Interface API upita (Zahtjev) je za traženje usluge u UBR registrima i interfejs Publish API omogućava programerima da registruju svoje usluge. Izgleda da je samo pitanje vremena kada će se sadržaj registara napuniti neželjenom poštom :)

Između ostalog!

Postoje testni registri dizajnirani da testiraju registracije usluga prije nego što ih smjeste u "prave" registre.

Ovako izgleda zahtjev za web uslugu:

sortByNameAsc sortByDateDesc %guid%

U gornjem primjeru možete vidjeti da je UDDI zahtjev enkapsuliran u SOAP poruci, tako da izgleda prilično poznato. Odgovor na zahtjev je također SOAP dokument, prikazan u nastavku:

Obilazak s vodičem kroz web usluge Primjeri web servisa za vodič za vodiče Usluga ponude zaliha u obilasku sa vodičem

Instalacija

Instaliranje SOAP ekstenzije za PHP5 je prilično jednostavno. Na Windows-u, ovaj modul se nalazi u ext poddirektorijumu PHP instalacionog direktorijuma. Da biste ga koristili, morate dodati sljedeći red u php.ini fajl: extension=php_soap.dll Za rad, ovaj modul zahtijeva da je uključen u PHP 5 po defaultu, barem u Windows verziji.

Jednom su mi postavili zadatak da započnem razvoj web servisa i dali mi izvore jednostavnog projekta bez ikakvog objašnjenja. Projekat, naravno, nije započeo. Takođe nisam imao pojma šta je proljeće i kako funkcionira. Takođe nisam mogao da nađem adekvatne članke o razvoju Web servisa koristeći Spring, ni na ruskom ni na engleskom. Morao sam to sam shvatiti, ali ispostavilo se da i nije tako strašno.
A nedavno sam odlučio pogledati koje su nove funkcije dodane Springu od tada i ažurirati stare servise, što me je kao rezultat potaklo da napišem ovaj članak.

Ovaj članak je vodič za razvoj jednostavne web usluge koristeći SOAP protokol koristeći Spring-WS.

I tako ćemo napisati najjednostavniji servis koji prihvata korisničko ime i šalje pozdrav i trenutno vrijeme na serveru.

Šta nam treba?
  • IDE. Koristim Eclipse.
Priprema za rad
Kreirajmo novi projekat web aplikacije. U Eclipse-u je: "File => New => Dynamic Web Project".
Projekat sam nazvao: HelloService.
Zatim kopirajte biblioteke iz Spring, XMLBean, wsdl4j, commons-logging u direktorij projekta WEB-INF/lib.
Ako želite, možete ih dodati u biblioteke servera kako ih ne biste nosili sa svakom aplikacijom.
Kreiranje WSDL šeme
U suštini, WSDL šema je dizajnirana da opiše uslugu.
Naravno, nećemo ga kreirati ručno. Šema će se automatski generirati pomoću Springa, ali više o tome kasnije.
Definiranje ulaznih i izlaznih podataka
Ulazni podaci:
  • Ime niza.
Izlaz:
  • String greeting;
  • Vrijeme je trenutno vrijeme.
Kreiranje opisa ulaznih i izlaznih podataka
U WEB-INF direktoriju kreirajte datoteku HelloService.xsd. Ovaj fajl biće potrebno za generisanje WSDL šeme i kreiranje odgovarajućih Java klasa.
Tekst fajla:

Atribut targetNamespace– korišteni prostor imena. One. svi kreirani objekti će se nalaziti u paketu org.example.helloService.
Elementi ServiceRequest I ServiceResponse opisati ulazne i izlazne podatke (zahtjev/odgovor).
Atributi minOccurs I maxOccurs odrediti broj ponavljanja date komponente unutar jednog elementa. Ako ovi parametri nisu specificirani, onda se prema zadanim postavkama smatraju jednakima 1. Za opcijsku komponentu, morate specificirati minOccurs=0. Sa neograničenim brojem komponenti: maxOccurs=neograničeno.
Možete pročitati više o XML šemama.
Kreiranje JavaBeans-a
Na osnovu kreirane šeme kreiraćemo Java klase. Da biste to učinili, kreirajte datoteku build.xml:

Parametar WS_HOME mora pokazivati ​​na direktorij u kojem se nalazi XMLBeans.
HelloService.xsd– put do kreiranog kola.
lib\helloservice.jar– kreirana java biblioteka.

Zatim pokrenite Ant-build (nadam se da ste ga već instalirali).
U Eclipse-u ga možete pokrenuti ovako: RMB na datoteci build.xml => Pokreni kao => Ant Build.
Ako prođe komandna linija:
ant -buildfile build.xml
Pa, čekamo da se gradnja završi. Nakon toga možemo provjeriti WEB-INF\lib projektni direktorij da li postoji odgovarajuća biblioteka (helloservice.jar).

Implementacija usluge
Kreirajte interfejs i servisnu klasu
Interfejs usluge: HelloService.java:
paket org.example; import java.util.Calendar; javni interfejs HelloService (javni string getHello(ime stringa) izbacuje izuzetak; javni kalendar getCurrentTime(); )
Implementacija usluge: HelloServiceImpl.java:
paket org.example; import java.util.Calendar; import org.springframework.stereotype.Service; @Service javna klasa HelloServiceImpl implementira HelloService (javni String getHello(String name) izbacuje izuzetak (vraća "Zdravo, " + ime + "!"; ) javni kalendar getCurrentTime() (vraća Calendar.getInstance(); ) )
Mislim da ovom kodu nisu potrebni komentari. Jedina stvar koja može izazvati pitanja za ljude koji se ranije nisu susreli sa Springom je napomena @ Service. Ali o tome ću vam reći nešto kasnije.
Krajnja tačka
Krajnja tačka – klasa koja će biti odgovorna za obradu dolaznih zahteva (neka vrsta ulazne tačke).

Kreirajte datoteku HelloServiceEndpoint.java:
paket 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 javna klasa HelloServiceEndpoint( private static final String namespaceUri = "http://www.example.org/HelloService"; privatna HelloService helloService; @Autowired javna void HelloService (HelloService helloService) ( this.helloService = helloService; RooService = helloService localPart = "ServiceRequest", namespace = namespaceUri) public ServiceResponseDocument getService(ServiceRequestDocument zahtjev) izbacuje izuzetak ( ServiceRequestDocument reqDoc = request; ServiceRequest req = reqDoc.getServiceRequest(); ServiceResponseDocument respDocument respDoc(ServiceResponseDocument) response. pDoc. addNewServiceResponse(); String userName = req.getName(); String helloMessage = testNewService.getHello(userName); Calendar currentTime = testNewService.getCurrentTime(); resp.setHello(helloMessage); resp.setCurrentTime resp(currentTime); )
Šta je ovde urađeno?
anotacija @Endpoint to precizno određuje ovu klasuće obraditi dolazne zahtjeve.
namespaceUri– isti prostor imena kao što je navedeno prilikom kreiranja xml šeme.

Vratimo se sada malo unazad i prisjetimo se napomene @Servis. Ne ulazeći u detalje kako ne bi preopteretili čitaoca nepotrebne informacije, tada ova bilješka govori Springu da kreira odgovarajući objekt @Autowired služi za injekcije ( automatska zamena) odgovarajućeg objekta. Naravno, prilikom izgradnje jednostavne aplikacije nema smisla koristiti ove napomene, ali sam ipak odlučio da ih ne isključim u ovom primjeru.

Ostalo bi opet trebalo da bude jasno. Imajte na umu da ServiceRequest, ServiceResponse itd. – to su upravo one klase koje su kreirane na osnovu naše xml šeme.

Konfiguracija opružnog servisa
Kraj se sada bliži.
Kreirajte datoteku service-ws-servlet.xml.

sws: vođeni anotacijom- kaže upravo to u ovaj projekat koriste se napomene.
A context:component-scan označava paket u kojem će se pretraživati ​​napomene, a pretraga će se vršiti i u podpaketima.

Dvije sljedeće kante uvijek će biti nepromijenjene. Njihova suština je primanje i pretvaranje zahtjeva iz Xml-a u Java objekt i daljnja obrnuta konverzija.

sws:dinamički-wsdl je odgovoran za automatska generacija WSDL dokument zasnovan na kreiranoj XML šemi.
lokacija označava putanju do šeme.
locationUri– adresa (u odnosu na kontejner) na kojoj će WSDL šema biti dostupna.
U mom slučaju WSDL je dostupan na sljedećoj adresi:
localhost/HelloService/HelloService.wsdl

Deskriptor implementacije
I konačno, posljednja stvar.
U WEB-INF direktoriju mijenjamo ili kreiramo web.xml datoteku.
HelloService HelloService service-ws org.springframework.ws.transport.http.MessageDispatcherServlet transformWsdlLocations istinito service-ws /*
Neću više opisivati ​​ovaj fajl; većina ljudi bi ga već trebala znati. Za jednostavne projekte to se u suštini ne bi trebalo mijenjati. Vrijedi samo napomenuti da ime servleta (servlet-name) mora odgovarati imenu konfiguracijske datoteke Spring usluge service-ws-servlet.xml.
Provjera funkcionalnosti
Prvi znak ispravan rad je generirana WSDL shema.
Da biste provjerili, jednostavno idite na adresu ove šeme (http://localhost/HelloService/HelloService.wsdl) i pogledajte: xml datoteka bi trebala biti prikazana tamo. Ako se ništa ne prikaže ili se pojavi neka greška, ponovo pažljivo pročitajte cijeli članak i potražite u čemu smo pogriješili.

Za dalje testiranje nam je potreban soapUI (imam verziju 3.0.1).
Instalirajte i pokrenite ga.
Kreirajte novi projekat: Fajl => Novi soapUI projekat. U polje Initial WSDL/WADL umetnite vezu do WSDL šeme (http://localhost/HelloService/HelloService.wsdl).
U kreiranom projektu otvorite traženi zahtjev.

Unesite ime u polje Ime i kliknite na dugme „Pošalji zahtev“.


Kao rezultat, dobijamo odgovor od servera sa pozdravom i trenutnim vremenom.


Ako nešto pođe po zlu, ponovo pročitajte ovaj članak.

Šta je sledeće?
Pa, sljedeći korak je pisanje klijenta za ovu web uslugu. Ali ovo je već materijal za neki drugi članak, koji će možda biti napisan kasnije ako nekoga zanima ovaj materijal.

Najbolji članci na ovu temu