Sunteți pe pagina 1din 8

Servicii Web de tip SOAP n JavaEE6

Web Service ca aplicatie Web


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