Professional Documents
Culture Documents
Java Web Servisi
Java Web Servisi
Java Web Servisi
Katedra za raunarstvo
Student:
Miroslav Naumovski 12999
Datum: 6.5.2011.
Znai u HTML-u je sve u prikazu informacija, dok se XML odnosi na prenos informacija.
Kako radi?
Osnovna platforma za web servise je XML + HTTP.
XML je jezik koji se moze koristiti izmedju razlicitih platformi i programskih jezika a da ipak
prenese slozene poruke i funkcije.
Elementi platforme web servisa:
Razliite platforme
Razlicite platforme pristupaju webu koriscenjem web pretrazivaca, takoda bi one trebale da
mogu na neki nacin da saradjuju. E kako bi mogle da sarauju, napravljene su web aplikacije.
Web aplikacije su male aplikacije koje se pokredu na webu. Napravljene su po standardima
web pretrazivaca imogu se koristiti na bilo kom pretrazivacu ili platformi.
Sta je SOAP?
To je protokol bazira na XML-u napravljen da omoguci aplikacijama da razmene podatke
preko HTTP-a.
Ili prostije: SOAP je protokol za pristupanje Web Servisu.
ta je WSDL?
WSDL je je jezik baziran na XML-u a sluzi za lociranje i opis Web servisa.Opisuje interfejs
web servisa.
ta je UDDI?
UDDI je servis gde kompanije mogu da prijave(registruju) ili traze Web servise.
RPC Web servisi predstavljaju interfejs poziva distribuirane funkcije(ili metoda) koji je slican
kod mnogih proizvodjaca softvera. U stvari osnovna jedinica RPC Web servisa je WSDL
operacija.A rekosmo da se WSDL odnosi na opis interfejsa web servisa.
Prvi web servisi su bili fokusirani na RPC-u,i kao rezultat, ovaj stil je siroko rasprostranjen i
koriscen. Medjutim ovaj metod je cesto kritikovan jer nije loseley coupled . Loseley coupled
je sistem cija svaka komponenta zna jako malo, ili ne zna uopste o drugim komponentama.
Drugi prilazi sa priblizno istom funkcionalnoscu kao RPC su Object Management Group
(OMG) Common Object Request Broker Architecture (CORBA), Microsoft-ov Distributed
Component Object Model (DCOM) ili Sun Microsystems Java/Remote Method Invocation
(RMI).
Service-oriented arhitektura
Web servisi se takodje mogu upotrebiti da se implementira arhitektura u skladu sa serviceoriented architecture (SOA) konceprima, gde je osnovna jedinica komunikacije poruka, a ne
operacija. U ovom slucaju se servisi cesto nazivaju porukama-orijentisani.
SOA Web servisi su podrzani od strane vecine proizvodjaca softvera. Za razliku od RPC Web
servisa, loose coupling je prisutan, zato sto je akcenat bacen na "ugovor" koji WSDL
obezbedjuje,umesto na pozadinske implementacione detalje.
Arhitektura bazirana na REST-u moze da koristi WSDL da opise SOAP slanje poruka preko
HTTP-a, moze biti implementirana kao apstrakcija SOAP-a (kao sloj iznad), ili moze da uopste
i ne koristi SOAP.
Jo neto o WSDL-u
WSDL je skradeno od Web Services Description Language.
WSDL je dokument pisan u XML-u. Ovakav jedan dokument opisuje web servis. Definise
lokaciju servisa i operacije(ili metode) koje servis nudi.
Definise format poruka zahteva i poruka odgovora koje klijent salje odnosno prima od
servisa. Poruke zahteva i poruke odgovora definisu imena i tipove podataka koje klijent
razmenjuje sa operacijom.
Klijentski program cita WSDL kako bi utvrdio koje funkcije su dostupne na serveru. Bilo koji
specificni tipovi podataka koji se koriste ugradjeni su u WSDL fajl u formatu XML Schema. A
klijent koristi SOAP kako bi zapravo pozvao neku od funkcija definisanih u WSDL-u.
WSDL je celina UDDI-ja, svetskog podlovnog registra baziranog na XML-u.Mozemo reci da je
WSDL jezik koji UDDI koristi.Razvijen je od strane Microsofta i IBM-a.
Gde je tu Java???
Java je samo na pocetku imala neke bazicne funkcionalnosti za Web Servise.Prve verzije Java
web servisa su bile
JAX-RPC 1.0
J2EE 1.4 koja je sadrzala JAX-RPC 1.1
Najnovija verzija Java servisa je Java EE 6 koja je programerima mnogo laksa, jer je laksa za
pravljenje enterprise klasnih aplikacija.
Java web servisi se baziraju na sledecim standardima:
-
bitni.Oni su osnova SOA razvoja sa Java EE.A loosley coupled SOA aplikacije su bitne zbog
toga sto omogucavaju da poslovni procesi budu fleksibilni.
Vecina kompleksnosti i zabune koje dozivljavaju softver inzenjeri pri radu sa JAX-WS se
odnose na to kako se JAX-WS/JAXB-generisane klase koje su kreirane JAX-WS WSDL
kompajlerom mapiraju u XML poruke definisane u WSDL-u.
Invokacija
Postoje invocation mehanizmi i na klijent i na server strani.Na server strani, invocation
mehanizmi su odgovorni za:
1. Primanje SOAP poruke iz transporta (na primer sa HTTP-a)
2. Pozivanje handlera koji vrse predobradu poruke(na primer kako bi se odrzala poruka
iz bezbednosnih razloga ili obradilo SOAP zaglavlje)
3. Odredjivanje servisa kome je poruka namenjena, drugim recima, koju WSDL operaciju
funkcija treba da pozove.
4. Posto je detektovan target operacija,odredjivanje koja Java klasa/metod treba da se
pozove.Ovo zovemo Java target.Odredjivanje Java terget-a se takodje zove dispatching
5. Prosledjivanje SOAP poruke serijalizacionom podsistemu kako bi je deserijalizovao u
Java objekte koji se mogu proslediti Java targetu kao parametri.
6. Pozivanje(invoking) Java targeta koriscenjem parametara generisanih Serijalizacionim
podsistemom i generisanje Java objekta koji target metod vraca.
7. Prosledjivanje objekta koji je funkcija vratila Serijalizacionom podsistemu kako bi ga
serijalizovao u XML element u skladu sa WSDL-om
8. Omotavanje tog XML elementa kao SOAP odgovora ponovo u skladu za WSDL-om
9. Pustanje SOAP odgovora nazad na transport za isporuku
U svakom stadijumu ovog procesa moze da se desi izuzetak.Kada se on desi , invocation
podsistem pravi specjalnu SOAP fault poruku koju vraca klijentu.Jedan deo kompleksnosti
sistema potice od toga sto mora da podrzi SOAP.
Na klijent strani, invokacioni proces je slican ukoliko zelite da pozovete web servis
koriscenjem Java interfejsa.Sve zavisi od problema koji resavamo.Ako klijent radi sa XMLom lakse je samo napraviti SOAP poruku i proslediti je web servisu.S druge strane, ako
klijent radi sa Java objektima, kako JWS pretpostavlja, na scenu stupa client-side invocation
system, koji je odgovoran za:
Client-Side pozivanje(invocation)
1. Kreiranje instance web servis endpoint-a(krajnje tacke) koja implementira Java interfejs
koji se u skladu sa JWS terminologijom naziva service endpoint
interface(SEI).Invocation sistem ima jednu ili vise fabrika za kreiranje SEI instanci.Ove
instance se ili kreiraju u letu ili imse pristupa koriscenjem JNDI-ja(Java naming and
directory interface).Obicno se SEI instance implementiraju koriscenjem Java proksija ili
invocation handlera.
2. Pozivanje SEI instance
3. Uzimanje parametara prosledjenih SEI-ju i njihovo slanje serializacionom podsistemu
gde se serijalizuju u XML elemente u skladu sa XML semom definisanom WSDL-om
target servisa
4. Omotavanje parametara u SOAP poruku u skladu sa WSDL-om.
5. Pozivanje handlera koji post-procesiraju poruku( na primer za podesavanje SOAP
zaglavlja)
6. Predaja poruke transportu za isporuku na target web servis
7. Primanje SOAP poruke sa odgovorom iz transporta
8. Prosledjivanje SOAP poruke serijalizacionim sistemu kako bi je deserijalizovao u Java
objekat koji je instanca klase koja se poklapa sa povratnim tipom SEI-ja(service endpoint
interfejsa koji u stvari vrace konacni rezultat.ja to zamisljam kao pravi interfejs ka na
primer korisniku na toj strani)
9. Kompletiranje poziva SEI-ja vracanjem deserijalizovanog SOAP odgovora.
Generalno proces pozivanja na klijent strani je obrnut od pozivanja na serveru.Na server
strani, sistem pozivanja povezuje Java metod sa proxy soap operacijom definisanu WSDLom.Izvrsava WSDL operaciju pozivanjem Java metoda.Obrnuto, na klijent strani sistem
pozivanja povezuje WSDL definisanu SOAP operaciju sa proxy Java iterfejsom.
Zanimljiva stvar je sto je samo srednji deo slike 1.1 SOAP zahtev/odgo
vor, i on je definisan WSDL-om.Pozivi Java metoda na svakoj strani su proizvoljni iz
perspektive Web servisa.U stvari mozemo da imamo potpis jednog Java metoda na klijent
strani, i TOTALNO drugaciji potpis metoda na server strani.U vecini slucajeva i jeste tako, i
koriste se razliciti programski jezici.JEr ukoliko bi obe strane radile sa istim Java
bibliotekama klasa, invokacija bi mogla da se odradi preko Java RMI(Remote procedure
invocation).
Serijalizacija
Je proces transformisanja primerka Java klase u XML element.Obrnuti proces se naziva
deserijalizacija.Serijalizacija je najvazinija komponenta na bilo kojoj platformi za Java web
servise.Hostovani unutar web servis kontejnera, mogu se nalaziti vise SOAP end-point-ova
gde svaki odgovara grupi web servisa.Endpoint ima asocirani WSDL interfejs koji definise
operacije.Endpointovi su apstrakcija za web servis,nacin na koji klijent vidi web servis. U
stvari, mi imamo neki web servis.Ali on u stvari pruza vise usluga.Te usluge nam obavljaju
neke funkcije, koje pak imaju svoj potpis definisan u WSDL-u.
Sledeca slika oslikava Java interfejs sa jedne i WSDL interfejs sa druge strane.U WSDL
interfejsu imamo elemenat(tag) pod nazivom <types>.Ovaj element sadrzi XML Schema
definicije tipova podataka koji se koriste u web servisima opisanim u ostatku tog WSDL
dokumenta.
Svaki od ovih metoda ima svoje prednosti i mane.Kao dodatak, JWS je obezbedio anotacioni
mehanizam kako bi olaksao programerima da definisu kako se Java tergeti serijalizuju.
Razvoj (Deployment)
Sistem razvoja obezbedjuje alate za podesavalje Java target-a kako bi on bio pozvan kao
web servis putem SOAP poruka.
Odgovornosti sistema razvoja:
-
Razvoj Java targeta Zavisi od kontejnera gde poziv nastane.Moze da oznaci samo
pravljenje klasnih definicija Java tergeta dostupnim class-loaderu sistemu pozivanja
(invocation)
Mapiranje WSDL operacije(a) na Java targete. Omogucava konfigurisanje web servisa
tako da sistem pozivanja moze pravilni da asocira dolazecu SOAP poruku sa njenim Java
targetom.Ova informacija o mapiranju je snimljena kao meta podaci kojima sistem
pozivanja(invocation) moze da pristupi iz sistema uposljavanja kako bi odredio koji java
target da pozove.
Definisanje serijalizacionog konteksta Sistem razvojaa konfigurise serijalizacioni
podsistem serijalizacionim kontekstom potrebnim za preslikavanje.
Objavljivanje WSDL-a Sistem ravoja asocira Java target sa WSDL dokumentom koji
sadrzi WSDL operaciju na koju je prikacen target.Ovaj WSDL dokument je dostupan web
servis klijentima kao URL ili u drugoj formi na primer unutar UDDI registra.
Konfigurisanje SOAP hendlera Ovde spadaju hendleri koje deployment sistem
obezbedjuje za pre ili post invokaciju(pozivanje).Iako sistem pozivanja poziva hendlere,
oni se zapravo konfigurisu u sistemu uposljavanja.
Konfigurisanje endpoint osluskivaca(listener-a) Sistem uposljavanja konfigurise
kontejner tako da postoji transportni osluskivac za SOAP poruke.
Posto smo ceo posao razbili na logcke jedinice,i to u nasem sluaju 2, svaka od njih se moze
opisati ulaznim i izlaznim porukama.
Servis za obradu narudbenica
Ulazna poruka: PO broj i lista artikala koji su naruceni
Obada:Odredjuje da li narudzbenica pokriva artikle koji su naruceni, i koji se metodi placanja
zahtevaju
Izlazna poruka: Potvrda za artikle koji su naruceni i opis nacina placanje za te artikle
Ovaj sistem za obradu narudzbenica implementiran je koriscenjem Java EE5.Drugi sistem
koji se implementira je Sistem za upravljanje magacinom.On je odgovoran za Servis za
upravljanje magacinom.
Servis za upravljanje magacinom
Ulazna poruka: Lista artikala koji se narucuju
Obrada:Odredjuje da li su artikli u magacinu, i kada ce moci da se isporuce
Izlazna poruka:lista artikala i datumi do kojih se isporucuju koji se jednom recju nazivaju
dostupnost sistema(system availibility).
E sad vidimo da je ovaj drugi sistem za magacin implementiran koriscenjem .NET-a.Ceo nas
sistem za upravljanje naruzdbenicama je opisan kao SOA composite aplikacija, zato sto se u
pozadini sastoji o 2 servisa.On procesira narudzbenice pozivanjem sistema za obradu
narudzbenica,a zatim magacina i kombinovanjem informacija kako bi vratio potvrdu o
narucivanju.E sad ceo sistem za upravljanje narudzbenicama je jedan veliki servis.Stoga,
koriscenjem SOA, servis se moze sastojati od vise pozadinskih servisa.
JWS omoguava SOA razvoj
Kada smo razmisljali o dizajnu Upravljanja Narucivanja jasno je da okmpozitne SOA
aplikacije zahtevaju da pozadinske SOA aplikacije koje pozivaju imaju dobro definisane
interfejse.
Zato, interfejs podsistema morada bude lepo definisan.Takodje moraa da zna da enkapsulira
poruku u format koji ce servis za obradu narudzbenica moci da razume.U ovom slucaju Web
servisi omogucavaju strukturu dase naprave zeljeni interfejsi.Iako nije zahtevano sa SOA
programiranje Web servisi imaju set standarda za interfejse i mesaging koji olaksavaju
buildovanje SOA aplikacije u formi nezavisnoj od platforme.Nije bitno, sto je recimo jedan
podservis na primer obrada narudzbenice implementirana u EE 5,a drugi, na primer
Upravljanje magacinom u .NET, jer oba podsistema odrzavaju web servise.Moguce je
uspostaviti saradnju, jer oba podrzavaju web servise, i pozivanjem aplikacija koriscenjem
njihovih webservis interfejsa.
Pri koriscenju web servisa,definicije interfejsa se odredjuju WSDL-om.Zato je svaki servis
prikazan na slizi asociran sa svojim WSDL dokumentom.WSDL se pise koriscenjem XML-a.On
definise ulazne i izlazne parametre web servisa u obliku XML Seme.Ulazni parametri su
isporuceni web servisu koriscenjem mssaging strukture.Takodje, izlazni parametri se primaju
kao poruka.Ponovo, SOA ne definise nikakvu formu poruke.SOAP poruke se koriste kako bi
prenele ulazne i izlazne parametre odredjene u definiciji WSDL intefjsa.Tako da web servisi
daju 2 sastavnadela u razvoju SOA aplikacije: jezik za definiciju interfejsa (WSDL) i messaging
standard (SOAP). SOAP poruke se prenose preko mnostva standarda : HTTP,SMTP i JMS.
HTTP GET zahtevi se upucuju kako bi se dobile definicije WSDL interfejsa od servisa, a HTTP
POST se koristi da prenese SOAP zahteve i odgovore.E to je nacinkako se osnovni Web
framework koristi u SOA razvoju aplikazija.JWS standardi daju alate za rad sa WSDL i
SOAP/HTTP unutar programskoh jezika Java.Postoje server-side alati koji omogucavaju da se
pozovu Java metoodi SOAP porukama, i da se objave WSDL definicije.Takodje postoje clientside alati za citanje WSDL dokumenata i slanje/primanje SOAP poruka.Mozemo zamisliti
klijent i server stranu kao dve strane znaka jednakosti.NA narednoj slici imamo prikazane
razne Java Web servis standarde JSR-ove koji podrzavaju server stranu jednakosti.Kako
bismo objasnili uloge ovih razlicitih JSR-ova na server strani , razvoj i poziv servisa su
propraceni brojevima.U dnu slike je Port komponenta.Ona predstalja upakovani web servis
koji se prosledjuje Java EE5 kontejneru.Ovaj kontejner m dodje kao neko okruzenje sa
pokretanje.Polje u sredini je oznaceno kao Web Service Application i predstavlja run-time
klase(poske razvoja) koje implementiraju web servis.Iznad su polja imenovana kao Java
parametri i jedno polje imenovano kao Java return.Ova polja predstavljaju run time
instance Java objekata koji se prosledjuju metodu jedne od klasa koje se nalaze u Web
Service Application.Ako se vratimo na primer sa narudzbenicama, to mogu da budu PO i broj
artikala na primer.E sad polja iznad ovih su oznacena kao XML Parameters i XML return.Oni
predstavljaju XML formu parametaara funkcije jezgra, i njene povratne vrednosti.Blizu vrha
slike je krug sa nazivom Endpoint.On predstavlja URL gde Web Service application prima
HTTP GET zahtev za WSDL definicijom interfejsa, ili HTTP POST za razmenu input i output
poruka.
Osencene povrsine na slici ilustruju koji Java servis odgovara razlicitim fazama razvoja i
invokacije.
Razvoj i Invokacija Web Servisa na Server-Strani
1. JWS definise Port komponentu(cesto oznacavanu samo kao Port)kao serverski
pogled na Web servis.Port komponenta moze bti upakovana kao WAR ( za razvoj na
endpointu gde je servlet) il ikao EJB JAR(za razvoj kao EJB endpoint).WSEE je
standard koji definise razvojni proces i strukturu pakovanja(ukljucujuci i deskriptore
pakovanja).WS-Metadata opisuje kako anotacije u pakovanim klasama oblikuju
razvoj( na primer WSDL interfejs koji predstavlja port komponentu moze biti
izmenjen(customized) koriscenjem WWS-Metadata anotacija).
2. Pomarajuci se ka vrhu slike, sledi invokacija Web servisa razvijenog po Port
komponenti.Endpoint podrzavaa HTTP GET zahteve za WSDL koji opisuje WEB
Servis.Struktura ovog WSDL-a je odredjena JAX-WS-om,JAXB-om i pomocu WSMetadata.Generalno, JAX-WS anotacije upravljaju stilom WSDL-a koji se koristi.JAXB
anotacije u drugu ruku manipulisu reprezentacijom Java parametara i povratnim
tipovima kao XML Shema komponenata.WS-Metadata anotacije manipulisu
specificnim delovima WSDL iterfejsa( na primer target namespace-om i lokalnim
imenima za bilo koji od elemenata koji su sadrzani u WSDL dokumentu).Handling
WSDL zahteva generalno nije deo WSPA(Web Service Platform Architecture),ipak,
cesto je funkcija koja je ukljucena u invokacioni podsistem platforme web servisa.
3. Invokacioni sistem razvijenog Web Servisa se pokrece kada stigne SOAP zahtev preko
HTTP POST metode na endpoint-u.
4. Endpoint mozemo prosto da zamislimo kao soket koji slusa za neke
podatke.Endpoint Web servisa je obicno implementiran u servletskoj klasi koja slusa
na endpoint URL adresi a specificira se u toku razvoja.Servlet nije specificiran
programerom Port komponenteOn je deo interne Java EE5 implementacije JWSa.Tokom razvoja, anotacije i/ili deskriptori razvoja bivaju ocitani WSEE runtime-om,
Literatura:
Wikipedia
www.w3schools.com
SOA Using Java Web Services Mark D. Hansen
http://help.sap.com/saphelp_nw04/helpdata/en/fa/c7503e1dac5b46e10000000a11
4084/content.htm
Mnotvo internet foruma i drugih izvora na mrei