You are on page 1of 33

1

Uvod
IST, Zoran irovi 1
XML servces (Web Services): self-contained i self-describing
WS su samostalne programske komponente. Mogu da budu javnetj. Da
se objavljuju(published). Moguda budu pronadjene kao ve
pripremljene Web-a.
WS omoguavaju da Web aplikacija bude dostupna na Web-u.
Platforma WEB servisa:
J ednostavna, interoperabilna koja se zasniva na razmeni poruka.
Poruke su u XML formatu.
Interoperabilnost, predstavlja najvaniju karakteristiku rada WS.
Predstavlja mogunost interakcije izmeu razliitih platformi.
Upotreba
IST, Zoran irovi 2
Viestruko korienje programskih komponenata (SOA)
Grupisanje specifinog koda. Na pr.
konverzija valuta,
vremenska prognoza,
prevoenje sa jednog na drugi jezik i sl.
Korienje ve pripremljenih komponenata obezbeuju Web servisi.
Povezivanje aplikacija
Omoguavaju razmenu podataka izmeu aplikacija na lak nain putem
http protokola.
2
Definicija Web servisa
IST, Zoran irovi 3
Web servis je softverski sistem identifikovan uz pomo URI,
definisan, opisan i otkriven pomou XML artefakta, koji interaguje
sa drugim softverskim sistemima koristei XML poruke preko
protokola baziranih na Internetu.
(W3C Web Services Architecture Group)
An artifact is one of many kinds of tangible byproduct produced during the development of
software. Some artifacts (e.g., use cases, class diagrams, and other UML models,
requirements and design documents) help describe the function, architecture, and design of
software. Other artifacts are concerned with the process of development itself - such as
project plans, business cases, and risk assessments.
/Wikipedia/
An artifact in the Unified Modeling Language (UML) is the specification of a physical piece of
information that is used or produced by a software development process, or by deployment
and operation of a system.
Examples of artifacts include model files, source files, scripts, and binary executable files, a
table in a database system, a development deliverable, or a word-processing document, a
mail message.
/Wikipedia/
IST, Zoran irovi 4
3
Slojevi
IST, Zoran irovi 5
SOAP (Simple Object Access Protocol)
J ednostavan protokol za komunikaciju putem Internet-a. Zasniva na porukama
XML formata. Platformski i jeziki je nezavisan....
WSDL (Web Services Description Language)
Jezik za opis Web servisa (i lociranje tj. pristupanje). Takoe je XML baziran.
UDDI (Universal Description, Discovery and Integration)
Direktorijum (baza) za smetanje informacija o javnim Web servisima. U njemu
se nalaze interfejsi za Web servise pisani u WSDL jeziku.
Slojevi Web servisa i set protokola
4
ServiceTransport sloj je odgovoran zaprenos
porukaizmeu aplikacijai unjegasuukljueni
sljedei protokoli: HTTP, SMTP, FTP, itd.
XMLMessagingsloj sekoristi zarazumijevanje
poruka za razmenjivanje koje se
implementiraju u XML formatu i ukljuuje
protokoleXML-RPCi SOAP.
ServiceDescriptionsloj definiejavni interfejs
zaodreeni Webservisi opisujesekrozWSDL
protokol.
Service Discovery je odgovoran za
centralizovanje servisa u zajedniki i
jedinstveni registar koji obezbeuje
jednostavno objavljivanje i pronalaenje
servisa. Otkrivanje servisa trenutno se
obrauje krozUDDI protokol.
IST, Zoran irovi 8
5
Uloge Web servisa
IST, Zoran irovi 10
6
Turistika
organizacija
Primer:
IST, Zoran irovi 11
Turistika
organizacija
Automobil
Avion
Hotel
SOAP
SOAP
SOAP
Aplikacija za
rezervacije
UDDI
aplikacija
Hotelski
rezervacioni
sistem
WSDL
WSDL
WSDL
UDDI
Pozivalac servisa
Korisnik
Posrednik servisa
Provajder servisa
SOAP
IST, Zoran irovi 12
Protokol za razmenu informacija (poruka) u distribuiranim,
decentralizovanim okruenjima. Omoguava komunikaciju izmeu
aplikacija koje rade pod razliitim OS i koriste razliite tehnologije i
programske jezike.
SOAP je XML zasnovan protokol. Uz to definie skup pravila za
serijalizaciju tipova podataka i razmenu inforamcija.
Razmenu informacija izmeu aplikacija omoguava korienjem HTTP
protokola koji je podran od svih Internet browser-a i servera.
Stoga se moe rei da je SOAP protokol za pristup Web servisima.
SOAP
vor
SOAP
vor
SOAP
poruka
Internet
7
Sintaksa
IST, Zoran irovi 13
SOAP poruka je XML dokument koji sadri sledee elemente:
Envelope element, koji identifikuje XML dokument kao SOAP poruku. Ovo je
obavezan element.
Header element, koji sadri zaglavlje sa informacijama. Ovo je opcioni
element.
Body element, koji sadri informacije o pozivu i odgovoru. Ovo je obavezan
element.
Fault element, koji daje informacije o grekama koje nastaju tokom
procesiranja poruke. Ovo je opcioni element.
Svi navedeni elementi se deklariu u podrazumevanim (default) prostorima
imena za SOAP envelopu
http//:www.w3.org/2001/12/soap-envelope
i za SOAP kodiranje i tipove podataka
http//:www.w3.org/2001/12/soap-encoding
SOAP poruka (1)
IST, Zoran irovi 14
Header
Body Telosadri
aktuelnu poruku
Omota sadri
ostatak SOAP
poruke, ali ne
i adresu
Zaglavljesadri
instrukcije za isporuku
specifine za aplikaciju
Envelope
8
SOAP poruka (2)
IST, Zoran irovi 15
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
IST, Zoran irovi 16
9
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope"
soap:encodingStyle='http://schemas.xmlsoap.org/soap/
encoding/'>
<soap:Body>
<m:Subtract
xmlns:m="http://example.org/Calcula
tor/Points">
<pt1>
<x>10</x>
<y>20</y>
</pt1>
<pt2>
<x>100</x>
<y>200</y>
</pt2>
</m:Subtract>
</soap:Body>
</soap:Envelope>
IST, Zoran irovi 17
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/
envelope/"
soap:encodingStyle='http://schemas.xmlsoap.o
rg/soap/
encoding/'>
<soap:Body>
<method:SubtractResponse
xmlns:method="http://example.org/
Calculator/Points">
<ptret>
<x>-90</x>
<y>-180</y>
</ptret>
</method:SubtractResponse>
</soap:Body>
</soap:Envelope>
Envelope element
IST, Zoran irovi 18
Envel ope element je osnovni (root) element u SOAP poruci. On definie XML
dokument kao SOAP poruku.
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
...
</soap:Envelope>
Envelope element MORA biti kvalifikovan imenskim prostorom sa odgovarajucom
verzijom SOAP-a : http://www.w3.org/2001/12/soap-envelope. U sluaju korienja
drugog prostora imena, aplikacija e generisati greku i obrisati poruku.
SOAP encodingStyle atribut slui za definisanje tipova podataka koji se koriste u
dokumentu. Sintaksa za definisanje ovog atributa je:
soap:encodingStyle=URI"
SOAP poruka nema predefinisan (default) ovaj atribut.
Envelope element moe da sadri samo dva neposredna podelementa: Header
i Body.
10
Header element
IST, Zoran irovi 19
Sadri informacije o SOAP poruci specifine za aplikaciju (na pr. instrukcije za
isporuku). To je opcioni element, koji, ukoliko postoji u poruci, mora biti prvi
(dete) element u okviru Envelope elementa.
U okviru Header elementa mogu se pojaviti samo elementi koji koriste prostore
imena.
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234</m:Trans>
</soap:Header>
...
</soap:Envelope>
Primer
Header element (2)
IST, Zoran irovi 20
U okviru prostora imena http://www.w3.org/2001/12/soap-
envelope
SOAP definie tri atributa:
actor,
mustUnderstand i
encodingStyle.
Atributi actor i mustUnderstand u okviru SOAP Header
elementa definiu kako primalac treba da procesira SOAP
poruku.
11
actor
IST, Zoran irovi 21
Na svom putu od poiljaoca do primaoca, SOAP poruka moe da
prolazi kroz razliite vorove (endpoints). Za obradu poruke ne mora
biti odgovoran samo poslednji vor na putu, ve mogu biti zadueni i
drugi vorovi. Tako pojedini vorovi mogu imati razliite uloge u
obradi poruke (na pr. autentifikator, loger, ruter i dr.). Header
element sadri informacije o ulogama prisutnim tokom puta poruke.
Atribut actor definie URI koji specificira ulogu vora za obradu
zaglavlja. Sintaksa za definisanje ovog atributa je:
soap:actor=URI"
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<soap:Header>
<x:xxmlns:x='http://example.org/Extensions/
soap:actor='http://example.org/Nodes/Fireball/XL5'>
<!-- extension detail goes here -->
</x:x>
</soap:Header>
<soap:Body>
<!-- message payload goes here -->
</soap:Body>
</soap:Envelope>
IST, Zoran irovi 22
12
EncodingStyle
Oznaava format za primaoca poruke u kome su serializovani
podaci. Moe se pojaviti na bilokom elementu i nova vrednost
prekriva onu od roditeljskih elemenata.
IST, Zoran irovi 23
<soap:Envelope
xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'
soap:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<!-- header and body go here -->
</soap:Envelope>
mustUnderstand
IST, Zoran irovi 24
Ovaj atribut se koristi da indicira da li vor mora da razume tj. obradi informacije
ili ne.
Atribut mustUnderstand moe da ima samo dve vrednosti, pa je sintaksa za
njegovo definisanje:
soap:mustUnderstand=0|1"
Ako je vrednost atributa mustUnderstand u okviru elementa koji se nalazi unutar
Header elementa postavljena na 1, to znai da vor koji procesira Header mora
prepoznati element. Ako pomenuti vor ne prepozna element, pojavie se
greka pri procesiranju zaglavlja.
13
Body element
IST, Zoran irovi 25
Body element sadri aktuelnu SOAP poruku i stoga je obavezan. On
mora koristiti prostor imena i to isti kao i Header element.
Body element moe imati proizvoljan broj podelemenata. Kao
podelementi se mogu pojaviti:
Fault element za upravljanje grekama
Ovaj element je definisan SOAP specifikacijom.
Ukoliko je prisutan, ovaj element moe biti jedini u okviru Body
elementa.
podelemenati vezani za aplikaciju
Ovi elementi nisu definisani SOAP specifikacijom, jer su specifini
za aplikaciju.
Ovi elementi bi trebalo da budu u vezi sa prostorom imena
specifinim za aplikaciju.
Body element (2)
IST, Zoran irovi 26
<soap:Body>
<m:GetPrice xmlns:m="http://www.w3schools.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body> Ovo su elementi specifini za aplikaciju i nisu deo SOAP standarda.
<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
SOAP zahtev: poruka u kojoj se zahteva cena jabuka
SOAP odgovor: poruka u kojoj je navedena cena jabuka
14
Fault element
IST, Zoran irovi 27
Ukoliko tokom obrade SOAP zahteva doe do neke greke, to se signalizira
poiljaocu pomou poruke - SOAP fault, koja je definisana u SOAP specifikaciji
kao standardni mehanizam za prijavljivanje greaka.
Nastala greka se obrauje tako to se umesto elementa odgovora uvodi Fault
element. Fault element sadri informacije o grekama i statusne informacije
koje se odnose na SOAP poruku.
opcioni element
ako postoji, mora biti u okviru Body elementa.
Fault element se moe pojaviti samo jednom u SOAP poruci.
Fault element ima podelemente:
<faultcode>- kod greke
<faultstring>- opis greke
<faultactor>- uzronik greke
<detail>- sadri informacije o aplikacijski specifinim grekama u vezi sa
Body elementom
IST, Zoran irovi 28
<faultcode>element koristi etiri koda za obradu najeih greaka:
VersionMismatch naen je nevalidan prostor imena za SOAP Envelope
element
mustUnderstand podelement Header elementa koji je imao setovan
mustUnderstand atribut na 1 nije prepoznat
Client poruka nije korektno formirana, ili sadri nekorektne informacije
Server postoje problemi sa serverom, tako da poruka ne moe biti obraena
Element <detail> sadri informacije o grekama koje su se desile unutar tela
(Body elementa) SOAP poruke. Greke koje su se dogodile tokom procesiranja
zaglavlja (Header element) ili pri transportu poruke do sledeeg vora se ne
prijavljuju u okviru <detail> elementa.
15
Fault element
IST, Zoran irovi 29
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/
xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault xmlns=>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Client Error</faultstring>
<faultactor>Some-URI</faultactor>
<detail>
<e:myfaultdetails xmlns:e="Some-URI">
<e:message>Stock symbol not found.</e:message>
<e:errorcode>404</e:errorcode>
</e:myfaultdetails>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Primer:
vor gde se
desila greka
Vrednost iz prostora
imena.
Objanjenje
greke
Element detail se koristi
samo ako se greka
desila tokom obrade
tela poruke.
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle='http://schemas.xmlsoap.org/soap/
encoding/'>
<soap:Body>
<soap:Fault>
<faultcode>soap:Client.InvalidRequest</faultcode>
<faultstring>Invalid Request: Divide operation not supported</faultstring>
<faultactor>http://marting.develop.com/soap/calcxslt.asp</faultactor>
<detail>
<m:MethodError xmlns:m='uuid:361C5CDE-FC66-4B17-A2C1-EB221DEFFD66'>
<request>Divide</request>
<reason>Operation not supported</reason>
</m:MethodError>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
IST, Zoran irovi 30
16
Razmena SOAP poruka
IST, Zoran irovi 31
Postoje dva naina razmene SOAP poruka:
razmena dokumenata
SOAP telo poruke sadri jedan ili vie podelemenata koji mogu da
potuju bilo koji format (specifian za aplikaciju). Na pr. SOAP telo
moe sadravati XML formatiranu narudbenicu.
poziv udaljene procedure (RPC-Remote Procedure Call)
SOAP poruka identifikuje ime operacije podrane u prijemnom
voru i ukljuuje parametre potrebne za njeno izvrenje (na pr.
zahtev za najnovijom cenom akcije).
Razmena dokumenata
IST, Zoran irovi 32
Format i nformaci j e j e
specifian za aplikaciju i nije
pokriven SOAP
specifikacijom.
Aplikaciji koja obrauje
SOAP poruku potreban je
pristup XML emi koja
definie strukturu i sintaksu
poruke.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<purchaseOrder xmlns="http://purchaseorder.beans>
<orderInfo>
<orderId>9876</orderId>
<itemName>Car</itemName>
</orderInfo>
<custInfo>
<customerId>9876</customerId>
<customerName>J ohn Doe</customerName>
</custInfo>
</purchaseOrder>
</soapenv:Body>
</soapenv:Envelope>
17
SOAP serijalizacija
SOAP definie pravila serijalizacije za prebacivanje tipova podataka u XML.
Atributi se koriste samo za strukturapje metapodatke, na primer kada su
potrebne reference. Za jednostavne tipove, kao to su stringovi, brojevi,
datumi... Koriste definicije iz XML Scheme Za tipove kao to su klase ili
strukture, svako polje se serijalizuje koristei isto ime kao ime polja. Za
nizove, svaki element niza se tipino serijalizuje koristei element sa istim
imenom kao to je tip.
IST, Zoran irovi 33
******
// Java class definition
package example.org.People;
class Person
{
String name;
float age;
short height;
}
IST, Zoran irovi 34
// VB Type definition
Public Type Person
name As String
age As Single
height As Integer
End Type
<p:Person
xmlns:p='urn:example-org:people'>
<name>Martin</name>
<age>33</age>
<height>64</height>
</p:Person>
18
// Java class definition
package example.org.Num;
class Numbers
{
long[5] data;
}
IST, Zoran irovi 35
// VB Type definition
Public Type Numbers
data(5) As Long
End Type
<p:Numbers
xmlns:p='urn:example-org:num'>
<data enc:arrayType='xsd:long[5]'
xmlns:enc='http://schemas.xmlsoap.org/s
oap/encoding/'>
<enc:long>2</enc:long>
<enc:long>3</enc:long>
<enc:long>5</enc:long>
<enc:long>7</enc:long>
<enc:long>9</enc:long>
</data>
</p:Numbers>
SOAP reprezentacija struktuiranih podataka
Serijalizacija podataka, kada je svako polje referisano jednom, je pravolinijska. Svako polje
se serijalizuje kao neki ugraeni element, podelement elementa Body, ne kao neposredni
podelement. Takava element nazivamo jednoreferencni.
IST, Zoran irovi 36
package example.org.People;
class PersonName
{
String givenName;
String familyName;
}
class Person
{
PersonNamename;
float age;
short height;
public static void AddPerson ( Person person );
}
// VB Type definitions
Public Type PersonName
givenNameAs String
familyNameAs String
End Type
Public Type Person
name As PersonName
age As Single
height As Integer
End Type
Public Sub AddPerson ( ByRef person
As Person )
End Sub
19
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<soap:Body>
<p:AddPerson xmlns:p='urn:example-org:people'>
<person>
<name>
<givenName>Martin</givenName>
<familyName>Gudgin</familyName>
</name>
<age>33</age>
<height>64</height>
</person>
</p:AddPerson>
</soap:Body>
</soap:Envelope>
IST, Zoran irovi 37
SOAP reprezentacija viestruko referenciranih
podataka
Akoje nekopoljeu strukturi podataka referisano na nekoliko mesta, tada se
to polje serijalizuje kao nezavistan element, kao neposredni podelement od
Body elementa. Takav element naziva se viereferencijalni.
IST, Zoran irovi 38
package example.org.People;
// Javaclass definition
class PersonName
{
StringgivenName;
StringfamilyName;
}
class Person
{
PersonName name;
float age;
short height;
public static boolean
Compare ( Person p1, Person p2 );
}
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle='http://schemas.xmlsoap.org/soap/
encoding/'>
<soap:Body xmlns:p='urn:example-org:people'>
<p:Compare>
<p1 href='#pid1' />
<p2 href='#pid1' />
</p:Compare>
<p:Person id='pid1' >
<name>
<givenName>Martin</givenName>
<familyName>Gudgin</familyName>
</name>
<age>33</age>
<height>64</height>
</p:Person>
</soap:Body>
</soap:Envelope>
20
SOAP i null reference
SOAP poruke koristenil atribut u nsin the http://www.w3.org/2001/
IST, Zoran irovi 39
package example.org.Nodes;
// J ava class definition
class Node
{
String val;
Node next;
public static long
ListLength( Node node);
}
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle='http://schemas.xmlsoap.org/soap/
encoding/'>
<next xmlns:xsi='http://www.w3.org/2001/XMLSchema'
-instance xsi:nil='1' />
<soap:Body >
<n:ListLength xmlns:n='urn:example-org:nodes'>
<node>
<val>New York</val>
<next>
<val>Paris</val>
<next>
<val>London</val>
</next>
</next>
</node>
</n:ListLength>
</soap:Body>
</soap:Envelope>
RPC (1)
IST, Zoran irovi 40
RPC je framework za izvoenje udaljenih poziv procedura.
Definisan u okviru SOAP specifikacije.
Da bi se izveo poziv udaljene procedure potrebno je:
u telu poruke imati jedan podelement predstavlja koren (root) dokumenta zahteva
u korenu dokumenta zahteva nevesti naziv udaljene procedure
svaki argument procedure ukljuiti kao ugnjeden tag u koren dokumenta zahteva
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:q0="http://calculator.ibm.com">
<soapenv:Body>
<q0:addOp>
<q0:input1 type="xsd:int">5</q0:input1>
<q0:input2 type="xsd:int">3</q0:input2>
</q0:addOp>
</soapenv:Body>
</soapenv:Envelope>
21
RPC (2)
IST, Zoran irovi 41
Na RPC zahtev, odgovor u vidu poruke se vraa u dva sluaja:
okada RPC vraa neku vrednost, jer operacija koja se izvrava ima povratnu vrednost
okada se pojave izuzeci (exceptions) pri izvrenju RPC operacije
Da bi se dobio odgovor na SOAP RPC zahtev, potrebno je:
u telu poruke imati koren dokumenta odgovora koji sadri rezultate
da naziv korena dokumenta odgovora imenu RPC zahteva kome je dodat sufiks
Response
da podelement korena dokumenta zahteva sadri rezultat koji vraa RPC
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:q0="http://calculator.ibm.com">
<soapenv:Body>
<addOpResponse xmlns="http://calculator.ibm.com">
<return>8</return>
</addOpResponse>
</soapenv:Body>
</soapenv:Envelope>
RPC (3)
IST, Zoran irovi 42
Uzorak RPC poruke
return =8
Input1 =5
Input2 =3
Procesor 1 Procesor 2
public int addOp(int input1, int input2);
addOp
v
r
e
m
e
22
SOAP povezivanje
IST, Zoran irovi 43
SOAP povezivanje se odnosi na protokol koji se koristi za prenos
poruka izmeu SOAP vorova.
SOAP metodologija doputa da se izmeu svakog para vorova na
putanji moe koristiti drugi protokol.
SOAP poruke ne sadre informacije o povezivanju.
Za SOAP razmenu poruka, uobiajeno je da se koristi HTTP protokol.
SOAP
vor
SOAP
vor
SOAP
vor
HTTP protokol
IST, Zoran irovi 44
HTTP (Hypertext Transport Protocol) radi tako to se klijent konektuje na HTTP
server korienjem TCP. Nakon uspostavljanja konekcije, klijent alje serveru
HTTP poruku sa odreenim zahtevom. Server procesira zahtev i alje HTTP
odogovor klijentu. Odgovor sadri statusni kod koji ukazuje na status zahteva.
Primer:
HTTP zahtev HTTP odgovor (uspeno obraen zahtev, kod 200)
POST /item HTTP/1.1 200 OK
Host: 189.123.345.239 Content-Type: text/plain
Content-Type: text/plain Content-Length: 200
Content-Length: 200
HTTP odgovor (zahtev nije obraen)
400 Bad Request
Content-Length: 0
23
SOAP preko HTTP-a (1)
IST, Zoran irovi 45
SOAP metod radi na principu HTTP zahteva i odgovora koji su u skladu sa
SOAP pravilima kodiranja.
HTTP poruka zahteva je podeljena u dve sekcije:
zaglavlje poruke sadri informacije o adresi primaoca SOAP poruke
telo poruke sadri samu SOAP poruku
SOAP zahtev je tipa HTTP POST. HTTP POST zahtev sadri najmanje dva
elementa:
Content-Type (MIME tip) definie tip poruke i nain kodovanja karaktera u
XML telu poruke (bilo zahteva ili odgovora). Uvek je text/xml , odnosno
appl i cati on/soap+xml;
Content-Length specificira broj bajtova u telu zahteva ili odgovora
HTTP zaglavlje sadri atribut SOAPAction koji identifikuje zahtev na Web
serveru kao SOAP zahtev.
SOAP preko HTTP-a (2)
IST, Zoran irovi 46
Primer
Serveru se alje zahtev GetStockPrice.
Zahtev ima parametar StockName.
Parametar koji se vraa u odgovoru je
Price. Prostor imena za ovu funkciju je
definisan na
http://www.example.org/stock
adresi.
24
WSDL
IST, Zoran irovi 47
WSDL (Web Services Description Language) je XML zasnovan jezik
koji slui za opisivanje samih Web servisa, kao i naina pristupa Web
servisima.
WSDL omoguava:
dinamiko otkrivanje i povezivanje servisa
opis servisa se nalazi u WSDL fajlu
registar servisa ukazuje na WSDL fajlove da bi omoguio
njihovo dinamiko otkrivanje i upotrebu
da industrija definie standardne interfejse za servise
na ovaj nain se prua normalizovani opis heterogenih aplikacija
WSDL dokument (1)
IST, Zoran irovi 48
WSDL dokument je XML dokument koji
sadri skup definicija za opisivanje Web
servisa.
Osnovni elementi u strukturi WSDL
dokumenta su:
<types>- definie tipove podataka koje
Web servis koristi
<message>- definie poruke koje Web
servis koristi
<portType>- definie operacije koje Web
servis izvrava
<binding>- definie komunikacione
protokole koje Web servis koristi
<definitions>
<types>
definition of types........
</types>
<message>
definition of a message....
</message>
<portType>
definition of a port.......
</portType>
<binding>
definition of a binding....
</binding>
</definitions>
Osnovna struktura WSDL dokumenta
osnovni (root)
element
25
WSDL dokument (2)
IST, Zoran irovi 49
Element portType daje apstraktnu definiciju Web servisa, opisuje operacije
koje mogu biti izvrene i poruke koje su ukljuene.
Element message definie elemente sa podacima operacije.
Element types definie tipove podataka koje Web servis koristi.
Da bi se postigla potpuna nezavisnost od koriene platfrome, WSDL obino
koristi XML Schema sintaksu za definisanje tipova podatka.
Element bi ndi ng kazuje kako treba pristupiti portu. On definie format poruke i
detalje protokola za svaki port.
WSDL dokument
IST, Zoran irovi 50
Primer
<messagename="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<messagename="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portTypename="glossaryTerms">
<operationname="getTerm">
<inputmessage="getTermRequest"/>
<outputmessage="getTermResponse"/>
</operation>
</portType>
26
WSDL port (1)
IST, Zoran irovi 51
WSDL port opisuje interfejse legalnih operacija koje su dostupne preko Web
servisa. Port definie taku pristupa Web servisu.
WSDL definie etiri tipa operacija:
1) One-way operacija moe primiti poruku, ali ne vraa odgovor
2) Request-response operacija moe primiti poruku i vraa odgovor; ovo je
najee koriseni tip operacije
3) Sol i ci t-response operacija moe poslati zahtev i ekati na odgovor
4) Noti fi cati on operacija moe poslati zahtev, ali ne eka odgovor
WSDL port (2)***
IST, Zoran irovi 52
Primer One-way operacije
<message name="newTermValues">
<part name="term" type="xs:string"/>
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="setTerm">
<input name="newTerm message="newTermValues"/>
</operation>
</portType >
U ovom primeru port glossaryTermsdefinie one-way operaciju nazvanu
setTerm.
Operacija setTermdoputa unos novih termova u renik korienjem ulazne
poruke newTermValueskoja ima ulazne parametre termi value. Izlaz
operacije nije definisan.
27
WSDL port (3)
IST, Zoran irovi 53
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
Primer Request-response operacije
U ovom primeru port glossaryTermsdefinie request-response operaciju nazvanu
getTerm.
Operacija getTermzahteva ulaznu poruku getTermRequestkoja ima parametar
term. Operacija vraa izlaznu poruku getTermResponsesa parametrom value.
Generisanje WSDL fajlova
IST, Zoran irovi 54
WSDL fajlovi sadre nekoliko sekcija koje se mogu ponovo (vie puta) koristiti.
Ponovno korienje je olakano formiranjem vie posebnih fajlova. Ovi
odvojeni fajlovi mogu biti korisni ako treba ponovo upotrebiti:
tipove
definicije poruka
portType
WSDL fajlovi se mogu sklopiti iz vie delova korienjem elementa import.
WSDL fajlovi se mogu generisati:
runo obino se koristi ako je netipian dizajn; neka okruenja daju grafiki
prikaz WSDL fajla (na pr. Rational Application Developer)
automatski postoji vie mehanizama za automatsko generisanje WSDl
fajla
28
WSDL povezivanje
IST, Zoran irovi 55
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
<binding type="glossaryTerms" name="b1">
<soap:binding style="documenttransport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation soapAction="http://example.com/getTerm"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
P
r
i
m
e
r
:

p
o
v
e
z
i
v
a
n
j
e

r
e
q
u
e
s
t
-
r
e
s
p
o
n
s
e

o
p
e
r
a
c
i
j
e

s
a

S
O
A
P
-
o
m
Element <binding>ima dva atributa:
type ukazuje na port za vezivanje
name definie ime veze
Element <soap:binding>ima dva atributa:
style vrednost moe biti rpc ili document
transport definie SOAP protokol koji se
koristi
Element <operation>definie sve
operacije koje port doputa. Za svaku
operaciju mora biti definisan
SOAPAction atribut. Takoe mora biti
specificirano kako su ulazi i izlazi
kodovani.
UDDI
IST, Zoran irovi 56
UDDI (Universal Description, Discovery and Integration) je platformaski
nezavisan usluni direktorijum (registar, repozitorijum) na kome se mogu
registrovati, odnosno traiti Web servisi. UDDI serveri su replicirani kako bi se
obezbedila redundantnost. Sve informacije su dostupne na svakom repliciranom
voru.
UDDI omoguava sledee:
uvanje informacija o Web servisima
pristup interfejsima Web servisa definisanih WSDL-om
komunikaciju preko SOAP-a
integraciju razliitih Web servisa korienjem Internet-a
UDDI je omoguio reavanje sledeih problema:
nalaenje odgovarajue usluge u mnotvu trenutno raspoloivih
pronalaenje novih klijenata i poboljanje pristupa trenutnim klijentima
proirivanje ponude i trita
uklanjanje barijera za brzo prikljuivanje globalnoj Internet ekonomiji
programsko opisivanje usluga i poslovnih procesa u jednom otvorenom i
sigurnom okruenju
29
Korienje UDDI-ja
IST, Zoran irovi 57
Industrija
Publikuje
UDDI
standard za
rezervaciju
letova.
Avioprevoznici
Registruju
svoje usluge u
UDDI
direktorijum.
Turistike agencije
Pretrauju UDDI direkrtorijum kako
bi nale interfejs za rezervacije
avioprevoznika.
Nakon nalaenja interfejsa, mogu
neposredno komunicirati sa
servisom.
UDDI
Primer
Sadraj UDDI registra
IST, Zoran irovi 58
Business Entity
discoveryURLs
name
description
businessKey
contacts
operator
categoryBag
identifierBag
authorizedName
Business Service
name
serviceKey
description
categoryBag
Binding Template
description
accessPoint
hostingRedirector
serviceKey
bidingKey
tModel
name
description
overviewDoc
identifierBag
categoryBag
tModelKey
operator
authorizedName
Oglaava servisa
Objavljeni servisi
Otisak objavljenog interfejsa
(slui za razne vrste klasifikacija)
Naini povezivanja servisa
sadri
sadri
referencira
30
Pretraivanje UDDI registra (1)
IST, Zoran irovi 59
Runa pretraga
Automatska pretraga
Bele
strane
ute
strane
Zelene
strane
Registar
Web servisa
Nai poslovne projeke
po detaljima
Nai servis po
kategoriji
Nai servis
preko interfejsa
Registar je logiki organizovan u tri sekcije, od kojih
je svaka nemenjana specifinoj vrsti upotrebe.
Vrste
pretrage
Pretraivanje UDDI registra (2)
IST, Zoran irovi 60
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope">
<Body>
<find_business generic="2.0" xmlns="urn:uddi-org:api_v2">
<name>IBM Corporation</name>
</find_business>
</Body>
</Envelope>
Zahtev za nalaenje poslovnog projekta
U ovom primeru treba nai sve registrovane poslovne projekte ije ime
poinje sa IMP Corporation.
UDDI verzija 2.0 UDDI verzija 2.0 prostor imena
31
Pretraivanje UDDI registra (3)
IST, Zoran irovi 61
<?xml version="1.0" encoding="UTF-8" ?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<businessList generic="2.0" xmlns="urn:uddi-org:api_v2"
operator="www.ibm.com/services/uddi" truncated="false">
<businessInfos>
<businessInfo businessKey="D2033110-3AAF-11D5-80DC-002035229C64">
<name xml:lang="en">IBM Corporation</name>
<description xml:lang="en">At IBM, ... microelectronics.</description>
<serviceInfos>
<serviceInfo serviceKey="894B5100-3AAF-11D5-80DC-002035229C64"
businessKey="D2033110-3AAF-11D5-80DC-002035229C64">
<name xml:lang="en">Buy from IBM</name>
</serviceInfo>
...
</serviceInfos>
</businessInfo>
</businessInfos>
</businessList>
</Body>
</Envelope>
Odgovor na zahtev za nalaenje poslovnog projekta
raspoloivi servisi
jedinstveni servis key
jedinstveni business key
Publikovanje informacija u UDDI registru (1)
IST, Zoran irovi 62
Auriranje UDDI registra zahteva autorizaciju korisnika pre publikovanja
informacija. Autorizacija se radi pozivanjem get_authToken.
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope">
<Body>
<get_authToken generic="2.0" xmlns="urn:uddi-org:api_v2"
userID="aUserID" cred="someValue"/>
</Body>
</Envelope>
Autorizacija korisnika
32
Publikovanje informacija u UDDI registru (2)
IST, Zoran irovi 63
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope">
<Body>
<save_business generic="2.0" xmlns="urn:uddi-org:api_v2">
<authInfo>token</authInfo>
<businessEntity businessKey="">
<name>Sample Business</name>
</businessEntity>
</save_business>
</Body>
</Envelope>
Zahtev za objavljivanje poslovnog projekta
Prilikom publikovanja, prvi argument za sve operacije je element <authInfo>koji
sadri autorizacioni token prethodno odobren od strane strane repozitorijuma.
Struktura tokena je specifina za implementaciju , ali je obino jednostavan niz
karaktera.
Element save_business prihvata vie
businessEntity elemenata. Ako je neka
vrednost kljua unutar strukture prazna,
server pretpostavlja da je element o kome
je re nov i generie klju za njega.
Publikovanje informacija u UDDI registru (3)
IST, Zoran irovi 64
...
<businessDetail generic="2.0" xmlns="urn:uddi-org:api_v2"
operator="www.mycompany.com/uddi">
<businessEntity businessKey="142426F1-14B9-443B-8A7C-2A3213FF28C6"
operator="www.mycompany.com/uddi" authorizedName="uddiUser">
<discoveryURLs>
<discoveryURL useType="businessEntity">
http:/.../get?businessKey=142426F1-14B9-443B-8A7C-2A3213FF28C6
</discoveryURL>
</discoveryURLs>
<name xml:lang="en-US">Sample Business</name>
</businessEntity>
</businessDetail>
...
Odgovor na zahtev za objavljivanje poslovnog projekta
jedina dostupna
informacija
generisani
business key
operator
repozitorijuma
URL koji se moze koristiti za
dobijanje businessEntity
elementa
y
33
Prikaz izvrnog okruenja Web servisa
IST, Zoran irovi 65
Izvrno okruenje Web servisa radi na sledei nain:
oslukuje zahteve upuene Web servisu
parsira dolazee poruke
mapira poruku u implementacionu klasu i metodu u skladu sa
podacima o postavljanju servisa
mapira SOAP poruku u odgovarajue objekte (JAX-RPC)
poziva obradu koja se odnosi na servis
prihvata odgovor
pravi SOAP poruku na osnovu odgovora
pravi omota poruke potreban za transport
alje poruku odgovarajuem Web servis klijentu