Un serviciu Web (Web Service) este o aplicatie Web de tip client-server, n care un server furnizor de servicii (numit si "Service Endpoint") este accesibil unor aplicatii client (care nu sunt de tip browser) pe baza adresei UR a serviciului! Serviciul Web si clientii s"i pot rula pe platforme diferite si pot fi scrise n limba#e diferite,deoarece se comunic" prin protocoale standard $%%&, '(, S)*&, +S),, s!a! -e aceea principalul merit al serviciilor Web este acela c" asi.ur" interoperabilitatea unor aplicatii software implementate pe platforme diferite si cu instrumente (/framewor01-uri) diferite! 2n acelasi timp aplicatiile sunt slab cuplate (/loosel3 coupled1), n sensul c" mesa#ele sc4imbate sunt standard (/self-contained1) si oricare dintre aplicatii nu presupune e5istenta la cel"lalt cap"t a altor facilit"ti dec6t cele continute n standarde! 7urnizorul de servicii e5pune un *&2 pe 2nternet, adic" o serie de metode ce pot fi apelate de clienti! *plicatia client trebuie s" cunoasc" adresa UR a furnizorului de servicii si metodele prin care are acces la serviciul oferit (nume, parametri, rezultat)! 2nterfata *&2 este limitat" la c6teva operatii n cazul serviciilor de tip RES% si nelimitat" ca num"r si ca diversitate a operatiilor n cazul serviciilor de tip S)*&! -iferenta dintre o aplicatie Web clasic" si un serviciu Web const" n principal n formatul documentelor primite de client si a modului cum sunt ele folosite 8 ntr-o aplicatie Web clientul primeste documente $%( transformate de un browser n pa.ini afisate, iar clientul unui serviciu Web primeste un document '( (sau +S),) folosit de aplicatia client, dar care nu se afiseaz" direct pe ecran (dec6t n anumite pro.rame de verificare a serviciilor Web)! &entru comparatie vom folosi e5emplul unui client care foloseste un browser pentru a intra pe un site ca s" afle rata de sc4imb ntre dou" valute , dar o aplicatie de comert electronic va apela un serviciu Web cu rate de sc4imb pentru a calcula si comunica clientilor suma de plata n valuta local"! -in punct de vedere al te4nolo.iilor folosite e5ist" dou" tipuri de servicii Web8 - Servicii de tip RES% ( RES%ful Web Services), n care cererile de la client se e5prim" prin comenzi $%%& (9E%, &U%, &)S%,-EE%E), iar r"spunsurile sunt primite ca documente '( sau +S),: - Servicii de tip S)*& (Simple )b#ect *ccess &rotocol), n care cererile si r"spunsurile au forma unor mesa#e S)*& (documente '( cu un anumit format) transmise tot peste $%%&! 2n astfel de servicii furnizorul e5pune si o descriere a interfetei *&2 sub forma unui document WS- (Web Service -escription an.ua.e), care este tot '( si poate fi prelucrat de client! Un client trebuie s" cunoasc" metodele oferite de c"tre /Service Endpoint1, pe care le poate afla din descrierea WS-! Serviciile de tip S)*& ofer" mai mult" fle5ibilitate, o mai bun" calitate a serviciilor si interoperabilitate dec6t serviciile RES% si sunt recomandate pentru un *&2 mai mare oferit clientilor! Serviciile de tip S)*& pot fi combinate pentru realizarea de operatii comple5e, ceea ce a condus la o ar4itectur" orientat" pe servicii (S)*;Service )riented *rc4itecture)! 2n +EE cele dou" tipuri de servicii sunt numite +*S-RS (RES%) si +*'-WS (S)*&), iar +avaEE %utorial contine o comparatie ntre avanta#ele si limitele fiec"rei solutii si recomand"ri privind ale.erea uneia sau alteia! (a#oritatea serviciilor Web reale sunt de tip S)*&, dar e5ist" si c6teva servicii de tip RES% notabile 8 *mazon S< (Simple Stora.e Service) pentru memorarea si re."sirea de obiecte, reteaua %witter si alte site-uri de blo., n care se descarc" fisiere '( n format RSS sau *tom cu liste de le."turi c"tre alte resurse! =a e5emple de servicii S)*& lar. utilizate sunt servicii pentru rate de sc4imb ntre diferite valute, servicii bancare pentru verificare si operare n conturi (de c"tre aplicatii Web de comert electronic, de e5emplu), servicii de memorare si re."sire date, s!a! E5ist" mai multe instrumente software pentru dezvoltarea de servicii Web pe platforma +ava, dintre care mai cunoscute sunt8 1 ='7 (fost '7ire) (*pac4e) (etro (Sun) pentru servicii S)*& *5is (*pac4e) +erse3 (Sun) pentru servicii RES% SoapU2 este cel mai cunoscut instrument pentru simularea unui client de servicii Web (prin afisarea cererilor client si r"spunsurilor primite), pentru testarea si dezvoltarea de servicii S)*& si RES%! Site-ul 'met4od!com contine o lista de servicii Web (de tip S)*&) publice si .ratuite, cu adresele descrierilor WS-, care pot fi folosite n SoapU2 pentru e5ersarea metodelor oferite! Servicii Web de tip SOAP Probleme de implementare a serviciilor Web de tip SOAP Un serviciu Web de tip S)*& este versiunea modern" a unui apel de proceduri la distant" (numite R&=;Remote &rocedure =all sau R(2;Remote (et4od 2nvocation), cu diferenta c" datele sc4imbate ntre client si server sunt documente '( n locul fisierelor binare care respectau si ele anumite conventii (protocolul R(2-22)& sau =)R>* sau alt protocol)! =a si n orice apel de proceduri la distant", o functie (metod") dintr-un calculator (care se e5ecut" ntr-o masin" virtual" +ava) apeleaz" o functie (o metod") aflat" ntr-un alt calculator (n alt" masin" virtual" +ava) folosind urm"toarele operatii8 - Un soft din masina client transform" apelul si parametrii s"i ntr-un sir de octeti, deci face o serializare a acelui apel (care poate necesita si serializarea parametrilor de un tip clas"): - Un alt soft din masina client (numit si /pro531 sau /stub1) transmite sirul de octeti rezultat din serializare c"tre masina server, folosind protocolul standard $%%&: - Un soft din masina server (numit si /ties1) receptioneaz" apelul serializat: - Un alt soft din masina server transform" sirul de octeti ntr-un apel efectiv de metod" Rezultatul apelului este si el serializat si trece prin aceleasi faze ca si apelul metodei! Serviciile Web de tip S)*& folosesc pentru serializare fisiere te5t bazate pe '(!
2n plus, e5ist" si problema modului n care un client afl" ce metode sunt disponibile n serviciul oferit si detaliile de apelare pentru aceste metode! Solutia (partial") a acestei probleme este un descriptor al serviciului Web aflat pe server si care poate fi citit de client! 2n cazul serviciilor S)*& acesta este tot un document '( numit WS- (Web Service -escription an.ua.e) si care poate fi obtinut de clienti de la o adres" public" UR! S-a propus e5istenta unor re.istre publice care s" centralizeze toate adresele UR de servicii web disponibile (unde se afl" wsdl-ul serviciului) si c4iar s-a standardizat modul de acces si de publicare n aceste re.istre U--2 (Universal -escription, -iscover3 and 2nte.ration) dar momentan nu e5ist" astfel de re.istre! Standardul WS-2 >asic &rofile ?!? (Web Services- 2nteroperabilit3) specific" cerintele impuse implement"rilor de servicii Web pentru a asi.ura interoperabilitatea lor! &rintre aceste cerinte este si formatul fisierelor WS- care descriu serviciile! +*'-WS @!A este cea mai recent" ncercare de unificare (de standardizare) a implement"rii serviciilor Web bazate pe S)*& si este incorporat" n produse ca (etro (Sun), *5is@ (*pac4e), ='7 (*pac4e) s!a! +*'-WS standardizeaz" adnot"ri +ava utilizate n scrierea codului pentru serviciu si pentru clienti, precum si artefacte portabile! &rin /artefacte1 se ntele. fisierele +ava si '( necesare pentru implementarea unui serviciu Web si care sunt asamblate ntr-o ar4iv" instalat" (1deplo3ed1) pe server! Serviciile +*'-WS pot fi de dou" feluri8 2 - )rientate pe mesa#e (/messa.e-oriented1): - )rientate R&= (cu apeluri de proceduri) ,um"rul si continutul concret al artefactelor cerute de un serviciu Web depind de fiecare implementare, iar unele pot fi .enerate folosind anumite utilitare sau un framewor0 cum este S)*&-U2! -e asemenea sunt diferente ntre formatul ar4ivelor in care sunt mpac4etate aceste artefacte pentru a fi instalate pe un server Web (de obicei un server de servleti)! =rearea unui serviciu Web poate porni de la un WS- e5istent (top-down) sau de la un pro.ram surs" +ava (bottom-up) din care se creeaz" WS-! +*'-WS prevede c6teva utilitare pentru dezvltarea de servicii Web8 - /apt1 (*dnotations &rocessin. %ool) 8 .enereaz" artefacte portabile din adnot"ri: - /ws.en1 care .enereaza WS- si alte artefacte din clasa care implementeaz" SE2: - /wsimport1 care foloseste WS- pentru .enerarea de cod +ava si alte artefacte necesare at6t furnizorului c6t si clientilor de servicii +*'-WS! 2mplementarea care porneste de la WS- se numeste si /contract-first1 pentru c" acest WS- este pivit ca un contract ntre furnizorul serviciului si clientii serviciului! 7urnizorul de servicii (/Service Endpoint1) e5pune o interfat" cu serviciile oferite clientilor, sub forma unei interfete +ava (SE2;Service Endpoint 2nterface) si a unor clase care implementeaz" aceast" interfat"! 2n plus, este creat de obicei si un fisier WS- care descrie operatiile oferite de SE2, fisier folosit de clienti pentru a .enera cereri la serviciile oferite! 7isierul WS- este o modalitate de transmitere a interfetei SE2 c"tre aplicatii client! (ai nou, aceste componente se numesc +*'-WS run-time si fac parte din /artefactele1 care trebuie .enerate in procesul de implementare al unui serviciu Web si al unui client pentru acest serviciu8
=lient WS run-time S)*& (essa.e WS run-time Service ) versiune mai complet" pentru secventa de la client la furnizorul de servicii arat" astfel8 =lient $andler %ransport Sender S)*& %ransport istener $andler Service 2nterceptorii (numiti si /$andlers1) prelucreaz" de obicei partea de antet din mesa#ele S)*& si pot asi.ura diverse functii, cum ar fi securitatea transmiterii mesa#elor! 2mplementarea protocolului S)*& la server si la client presupune trecerea ntre clase +ava si documente '(, n ambele sensuri! 2n acest scop se folosesc mai multe solutii, dintre care parsere de documente '( de tip S%*', -)( s!a! si, mai recent, +*'> (+ava *&2 for '( >indin.), folosit" de +*'-WS! +*'> transform" documente '( n obiecte +ava si invers folosind sc4ema ce descrie documentul '(! Utilitarul /5#c1 este un compilator de sc4em" '( care produce fabrici de obiecte +ava ()b#ect 7actories), iar utilitarul /sc4ema.en1 .enereaz" sc4ema '( din clase +ava adnotate! =omponenta run-time +*'> produce documente '( din obiecte +*'> (operatie numit" /mars4allin.1) si .enereaz" obiecte +*'> din documente '( (operatia de /unmars4allin.1)!
Protocolul SOAP &rotocolul S)*& este ast"zi unanim folosit n aplicatii de tip servicii Web si nlocuieste protocoale mai vec4i de comunicare ntre obiecte aflate pe masini diferite ca 22)&(R(2), =)R>*, -=)(, +*'-R&= s!a! 2ntre clientul unui serviciu Web si furnizorul serviciilor se sc4imb" mesa#e S)*&, indiferent de modul cum au fost implementate cele dou" p"rti! Un mesa# S)*& este un document '( cu o anumit" structur"! (esa#ele S)*& au o parte care nu poate lipsi (S)*& &art) si o parte atasat", optional" (*ttac4ements)! &artea fi5" contine o anvelop" (S)*& Envelope), anvelop" care contine o parte optional" de antet (S)*& $eader) si o parte obli.atorie de corp mesa# (S)*& >od3) 8 3 S)*& messa.e S)*& part S)*& envelope S)*& 4eader (optional) $eader $eader S)*& bod3 '(=ontent S)*& 7ault
7iecare din p"rtile atasate contine o parte de antete (2(E si o parte de continut ('( sau non-'()8 *ttac4ement &art (2(E $eaders =ontent 7isierele atasate pot fi ima.ini sau alte tipuri de fisiere transmise mpreun" cu cereri c"tre servicii Web (in S)*& ?!@)! E5ist" un *&2 +ava, numit S**+ (S)*& wit4 *ttac4ements *&2 for +ava), care permite crearea (producerea) si folosirea (consumarea) de mesa#e S)*&! Este un *&2 de nivel cobor6t, care este folosit de +*'-WS *&2, dar poate fi folosit si direct (e5ist" e5emple de utilizare n +EEB %utorial)! WS- ca limba# pentru descrierea de servicii Web WS- foloseste urm"toarele elemente (ta.uri) pentru descrierea unui serviciu Web8 Ct3pesD %ipuri de date folosite de serviciul Web Cmessa.eD (esa#e folosite de serviciul Web Cport%3peD )peratii realizate de serviciul Web Cbindin.D &rotocoale de comunicatii folosite de serviciul Web )rice document WS- are structura urm"toare8 CdefinitionsD Ct3pesD definition of t3pes!!!!!!!! CEt3pesD Cmessa.eD definition of a messa.e!!!! CEmessa.eD Cport%3peD definition of a port!!!!!!! CEport%3peD Cbindin.D definition of a bindin.!!!! CEbindin.D CEdefinitionsD 7ra.ment dintr-un document WS- simplificat8 Cmessa.e name;".et%ermReFuest"D Cpart name;"term" t3pe;"5s8strin."ED CEmessa.eD Cmessa.e name;".et%ermResponse"D Cpart name;"value" t3pe;"5s8strin."ED CEmessa.eD 4 Cport%3pe name;".lossar3%erms"D Coperation name;".et%erm"D Cinput messa.e;".et%ermReFuest"ED Coutput messa.e;".et%ermResponse"ED CEoperationD CEport%3peD (arca#ele CoperationD corespund numelor de metode oferite de serviciul Web! (arca#ul Cbindin.D defineste formatul mesa#elor si protocolul folosit! (arca#ul Csoap8bindin.D are dou" atribute8 stil si transport: stilul poate fi /rpc1 sau /document1, iar transportul este de obicei $%%&! E5emplu8 Cbindin. t3pe;".lossar3%erms" name;"b?"D Csoap8bindin. st3le;"document" transport;"4ttp8EEsc4emas!5mlsoap!or.EsoapE4ttp" ED CoperationD Csoap8operation soap*ction;"4ttp8EEe5ample!comE.et%erm"ED CinputDCsoap8bod3 use;"literal"EDCEinputD CoutputDCsoap8bod3 use;"literal"EDCEoutputD CEoperationD CEbindin.D Un e5emplu complet de WS- pentru un serviciu cu o sin.ur" metod" (/sa3$ello1)8 Cdefinitions name;"$elloService" tar.et,amespace;"4ttp8EEwww!e5amples!comEwsdlE$elloService!wsdl" 5mlns;"4ttp8EEsc4emas!5mlsoap!or.EwsdlE" 5mlns8soap;"4ttp8EEsc4emas!5mlsoap!or.EwsdlEsoapE" 5mlns8tns;"4ttp8EEwww!e5amples!comEwsdlE$elloService!wsdl" 5mlns85sd;"4ttp8EEwww!w<!or.E@AA?E'(Sc4ema"D
Cmessa.e name;"Sa3$elloReFuest"D Cpart name;"first,ame" t3pe;"5sd8strin."ED CEmessa.eD Cmessa.e name;"Sa3$elloResponse"D Cpart name;".reetin." t3pe;"5sd8strin."ED CEmessa.eD Cport%3pe name;"$elloG&ort%3pe"D Coperation name;"sa3$ello"D Cinput messa.e;"tns8Sa3$elloReFuest"ED Coutput messa.e;"tns8Sa3$elloResponse"ED CEoperationD CEport%3peD Cbindin. name;"$elloG>indin." t3pe;"tns8$elloG&ort%3pe"D Csoap8bindin. st3le;"rpc" transport;"4ttp8EEsc4emas!5mlsoap!or.EsoapE4ttp"ED Coperation name;"sa3$ello"D Csoap8operation soap*ction;"sa3$ello"ED CinputD Csoap8bod3 encodin.St3le;"4ttp8EEsc4emas!5mlsoap!or.EsoapEencodin.E" namespace;"urn8e5amples84elloservice" use;"encoded"ED CEinputD CoutputD Csoap8bod3 encodin.St3le;"4ttp8EEsc4emas!5mlsoap!or.EsoapEencodin.E" namespace;"urn8e5amples84elloservice" use;"encoded"ED 5 CEoutputD CEoperationD CEbindin.D Cservice name;"$elloGService"D CdocumentationDWS- 7ile for $elloServiceCEdocumentationD Cport bindin.;"tns8$elloG>indin." name;"$elloG&ort"D Csoap8address location;"4ttp8EEwww!e5amples!comESa3$elloE"D CEportD CEserviceD CEdefinitionsD )bservatii8 - Elementul Ct3pesD lipseste deoarece se folosesc tipuri predefinite n sc4ema '( (5sd8strin.) - (esa#ele sc4imbate sunt8 sa3$elloReFuest, cu parametrul /first,ame1 (de tip 5sd8strin.) sa3$elloResponse, cu rezultatul /.reetin.1 (de tip 5sd8strin.) - ,umele metodelor e5puse8 /sa3$ello1 (Cport%3peD !! CoperationD) - &rotocol S)*& peste $%%& (Cbindin.D) - *socierea numelui cu adresa UR2 a serviciului (CserviceD !!CportD !! Csoap8addressD) -ocumentele WS- pot fi .enerate automat si sunt prelucrate de c"tre +*'> astfel nc6t pro.ramatorul unui furnizor sau unui client de serviciu +*'-WS nu lucreaz" direct cu WS-! &ro.ramarea unui furnizor de servicii Web cu +*'-WS pornind de la +ava Se poate porni de la o component" +ava verificat" local, la care se adau." adnot"rile necesare pentru a o transforma ntr-un serviciu web (HWebService)! Se poate defini sau nu o interfat" pentru /Service Endpoint1 si se poate .enera sau nu fisier WS-! *dnot"rile +*'-WS furnizeaz" toate informatiile necesare pentru confi.urarea furnizorului de servicii si pentru client, dar se recomand" si crearea fisierului WS-! +*'-WS prevede dou" posibilit"ti de definire a unui /service endpoint1, prin dou" adnot"ri diferite HWebService si HWebService&rovider pentru clasa +ava care defineste serviciul! Un serviciu adnotat cu HWebService foloseste modelul R&=, iar un serviciu WebService&rovider foloseste modelul orientat pe mesa#e (pe documente)! (etodele unei clase serviciu pot fi adnotate cu HWeb(et4od si pot arunca e5ceptii #ava!rmi!RemoteE5ception! E5emplu de clas" care implementeaz" un furnizor de servicii +*'-WS (/Service Endpoint1) cu o sin.ur" metod" /sa3$ello18 pac0a.e 4elloservice!endpoint: import #ava5!#ws!WebService: import #ava5!#ws!web(et4od: HWebService public class $ello I private Strin. messa.e;newStrin.("$ello, "): public void $ello() I J HWeb(et4od public Strin. sa3$ello (Strin. name)I return messa.eKnameK "!": J J &ro.ramarea unui client pentru serviciul anterior necesit" urm"toarele operatii8 - Utilizarea clasei .enerate /4elloservice!endpoint!$elloService1, pentru care adnotarea HWebServiceRef in#ecteaz" un obiect si pune adresa lui n variabila /service18 HWebServiceRef(wsdlocation;"(E%*-2,7EwsdlElocal4ostGLALAE4elloserviceE$elloService!wsdl") privatestatic$elloServiceservice: 6 - )btinerea unei clase &ro53 a serviciului (un /port1) prin metoda /.et$ello&ort1, clas" care implementeaz" interfata SE2 a serviciului8 4elloservice!endpoint!$elloport;service!.et$ello&ort(): - *pelul metodelor din interfata SE2 prin obiectul pro538 Strin. result;port!se3$ello (/world1): pac0a.e appclient: import 4elloservice!endpoint!$elloService: import #ava5!5ml!ws!WebServiceRef: public class $ello*pp=lient I HWebServiceRef(wsdlocation; "(E%*-2,7EwsdlElocal4ostGLALAE4elloserviceE$elloService!wsdl") private static $elloService service: public static void main(Strin.MN ar.s) I S3stem!out!println(sa3$ello(ar.sMAN)): J private static Strin. sa3$ello (ar.)I 4elloservice!endpoint!$elloport;service!.et$ello&ort(): return port!sa3$ello(ar.): J J E5emplu de client Web al unui serviciu Web, sub forma unui servlet8 HWebServlet(name;"$elloServlet",url&atterns;I"E$elloServlet"J) public class $elloServlet e5tends$ttpServlet I HWebServiceRef(wsdlocation; "WE>-2,7EwsdlElocal4ostGLALAE4elloserviceE$elloService!wsdl") private $elloService service: protected void processReFuest ($ttpServletReFuestreFuest, $ttpServletResponseresponse) t4rowsServletE5ception,2)E5ceptionI response!set=ontent%3pe("te5tE4tml:c4arset;U%7-L"): &rintWriterout;response!.etWriter(): tr3 I out!println("C4tmlD"): out!println("Cbod3D"): out!println("C4?DServlet$elloServletat " K reFuest!.et=onte5t&at4()K "CE4?D"): out!println("CpD" Ksa3$ello("world")K "CEpD"): out!println("CEbod3D"): out!println("CE4tmlD"): J finall3 I out!close(): J J EEdo9et and do&ost met4ods,w4ic4 call processReFuest,and .etServlet2nfo met4od private Strin. sa3$ello(Strin. ar.) I 4elloservice!endpoint!$elloport;service!.et$ello&ort(): return port!sa3$ello(ar.): J J WSO ca etap" superioar" de dezvoltare a serviciilor Web WSO completeaz" specificatiile pentru servicii Web S)*& cu urm"toarele specificatii8 - WS *ddressin. - WS &olic3 - WS Securit3 - WS )ptimization - WS Reliable (essa.in. 7 7irma Sun a lucrat mpreun" cu firma (icrosoft pentru implementarea acestor specificatii cu p"strarea interoperabilit"tii dintre serviciile Web realizate cu (etro si respectiv cu !,E%<!B (W=7; Windows =ommunication 7oundation), ntr-un proiect numit WS2% (Web Service 2nteroperabilit3 %ec4nolo.3)! =ompatibilitate nseamn" c" un client (etro poate accesa si poate /consuma1 servicii oferite de un furnizor W=7 si un client W=7 poate folosi servicii W=7! >2>2)9R*72E8 Sun 8 +EEP %utorial *pac4e 8 +*'-WS 9uide (*5is@ -oc) Sun 8 -ocumentatie (etro S)*pU2 User9uide 8