Webové služby v Java EE (JAX-WS) Marek Rychlý Vysoké uˇcení technické v Brneˇ Fakulta informaˇcních technologií Ústav informaˇcních systému˚
Pˇrednáška pro PDI 24. listopadu 2015
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
1 / 51
Obsah 1
Úvod k SOA a webovým službám Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
2
Java API for XML Web Services (JAX-WS) Poskytovatel webové služby pomocí JAX-WS Spotˇrebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikaˇcním serveru a podpora v IDE
3
Java API for RESTful Web Services (JAX-RS) Representational State Transfer (REST) architektura Webové služby pomocí JAX-RS
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
2 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Servisneˇ orientovaná architektura (SOA) Definice (Service-Oriented Architecture, OASIS SOA RefModel) SOA je paradigma pˇredepisující zpusob ˚ uspoˇrádání a použití distribuovaných služeb, které mohou být spravovány ruznými ˚ vlastníky. Definuje jednotný zpusob ˚ inzerce, hledání, vzájemné komunikace a spotˇreby služeb s cílem ˇ ritelnými pˇredpoklady a dosáhnout požadovaných výsledku˚ v souladu s meˇ oˇcekáváním. SOA je paradigma – kompozice služeb (architektonický styl a zpusob ˚ analýzy, návrhu, integrace a údržby systému) ˚
SOA je distribuovaná – autonomní, ale spolupracující služby (systém realizován jako kompozice úˇcelové spolupracujících služeb)
SOA je heterogenní prostˇredí – služba pˇrístupná pˇres své rozhraní (služby mohou mít ruzné ˚ životní cykly, vlastníky, implementaˇcní technologie, atd.)
SOA je standardizovaná – popis rozhraní a zpusob ˚ komunikace služeb (ˇrešení nezávislé na dodavateli, možnost náhrady služby, její outsourcing, atp.)
SOA podporuje business – služby realizují konkrétní business procesy (služby zpracovávají a produkují dokumenty, spravují zdroje, atd.) Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
4 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Architektura orientovaná na služby (SOA) SOA: architektura orientovaná na služby (Service-Oriented Architecture), obecný koncept spolupracujících služeb, WS: webové služby (Web Services), technologie pro implementaci SOA, spravuje W3C skupina Web Services Architectures. Role komunikujících stran: poskytovatel služeb implementuje a nabízí služby (service provider), služba je specifikovaná svým popisem (URI, rozhraním a protokolem), spotˇrebitel služeb na základeˇ popisu vyhledá službu v registru služeb a použije ji (service consumer).
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
5 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Konceptuální model SOA
model interakce mezi poskytovatelem služeb a spotˇrebitelem služeb
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
6 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Struktura SOA SOA je cˇ ásteˇcneˇ vrstevnatá architektura (vrstva = úrovenˇ abstrakce) 1
vrstva business procesu˚ – BP je posloupnost kroku˚ respektující business pravidla a vedoucí k zisku (hmotnému i nehmotnému), ˇ reprezentován sekvencí provedení nekolika služeb (choreografie služeb),
2
vrstva služeb – rozhraní jednotlivých komponent sjednocena do ˇ služeb, služba za behu sestavuje komponenty a pˇreposílá jim ˇ požadavky, služba na rozhraní zpˇrístupnuje své funkce (popis služby),
3
vrstva komponent – základní stavební kameny služeb, realizace ˇ požadované kvality služeb (QoS), funkˇcnosti služeb a zajištení ˇ a jejich funkce jsou pˇrístupné komponenty jsou cˇ erné skˇrínky pouze pˇres rozhraní.
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
7 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Informaˇcní systém – bez architektury SOA podsystémy jsou monolitické (komplikovaný pˇrístup k jednotlivým funkcím, nejasné rozhraní, obtížná integrace celých podsystému) ˚
podsystémy jsou striktneˇ ˇ oddelené, každý má samostatný životní cyklus (implementací, správou, možností modifikace, atd.)
komunikace podsystému˚ pˇres spoleˇcné úložišteˇ dat
(diagram pˇrevzat z „Sun: Service-Oriented Architecture – Overview“)
Marek Rychlý
(problematická návaznost procesu, ˚ napˇr. „Order Status“, ˇ nejasná zodpovednost za data)
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
8 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Informaˇcní systém – s architekturou SOA dekompozice na úrovenˇ jednotlivých služeb (jasneˇ definovaná rozhraní služeb, podsystémy vznikají kompozicí)
podsystémy se prolínají sdílenými službami, každá má samostatný životní cyklus (sdílení spoleˇcných cˇ ástí podsystému, ˚ napˇr. „Check Order Status“)
pˇrímá komunikace služeb, úložišteˇ dat pro dokumenty
(diagram pˇrevzat z „Sun: Service-Oriented Architecture – Overview“)
Marek Rychlý
(služby komunikují napˇríˇc podsystémy, s daty manipuluje služba reprezentující k datum ˚ pˇríslušný business proces)
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
9 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Spolupráce mezi službami v SOA služby poskytují své prostˇredky bud’ pˇrímo cílovému spotˇrebiteli anebo jiným službám, služby mezi sebou spolupracují (komunikují) zasíláním zpráv. Spolupráce mezi službami: kooperace – služba využívá prostˇredky jiné (rovnocenné) služby pro realizaci nabízených funkcí, agregace – služba sestavená ze dvou (nebo více, podˇrízených) služeb nabízí kombinaci funkcí dílˇcích služeb, choreografie – služby potom spolupracují za úˇcelem provedení konkrétního business procesu, orchestrace – služba ˇrídí souˇcinost ostatních služeb za úˇcelem provedení své cˇ ásti business procesu.
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
10 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Principy SOA standardizace (jednotný zpusob ˚ popisu služeb)
volné vázání
! ! ! ! ! ! ! !
kompatibilita, nezávislost ˇ údržba služeb snadnejší
(minimum závislostí mezi službami, okolí služby závisí pouze na jejím rozhraní)
abstrakce
jednoznaˇcný zpusob ˚ použití
(služby pˇrístupné pouze pˇres rozhraní, zbytek zapouzdˇren)
znovupoužitelnost
ˇ zisk vývoj služby pˇrinese vetší
(služba použitelná v ruzných ˚ kontextech/systémech)
nezávislost
ˇ ritelnost funkˇcnosti oveˇ
(služby autonomní jednotky, nezávisí skryteˇ na svém okolí)
bezstavovost
pˇredvídatelnost chování
ˇ uchovávat viditelnou stavovou informaci) (služba by nemela
dohledatelnost
implementaˇcní nezávislost
(navazovány úˇceloveˇ poskytovatel služby dle potˇreby dohledatelný v adresáˇri)
kompozice
ˇ tvorba složitejších služeb
ˇ (kompozice služeb do vetších funkˇcních celku˚ dle potˇreby) Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
11 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Porovnání SOA s jinými architekturami a principy SOA vs. klient-server architektura
klient–server = rozhraní a apl. logika apl. logika, stav a sdílené zdroje, spotˇrebitel–poskytovatel = potˇrebuje nabízí funkˇcnost,
ˇ dekompozice (napˇr. menší nároky na zdroje), SOA je jemnejší ˇ výpoˇcetní logiky), SOA je více distribuovaná (rozmístení ˇ služby se snaží být bezstavové z vnejšího pohledu.
SOA vs. objektoveˇ orientovaný pˇrístup
SOA pˇrístup preferuje volném provázání entit (služeb) OO pˇrístup ˇ ejší ˇ vazby entit (objektu), pˇresneˇ vztahy mezi tˇrídami, tesn ˚
ˇ cnost SOA pˇrístup s dediˇ ˇ cností základní vlastností OO pˇrístupu je dediˇ nepoˇcítá, preferuje delegaci, základní vlastností SOA pˇrístupu je bezstavovost entit zapouzdˇrení dat do objektu˚ v OO pˇrístupu, ˇ aktivita služeb v SOA pˇrístupu je vyvolána až pˇríchodem nejaké zprávy, podobný pohled na abstrakci entit (rozhraní). Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
12 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Webové služby (Web Services) ˇ a nejpoužívanejší ˇ technologie pro implementaci SOA Neznámejší Webové služby postaveny na „webových“ standardech: HTTP protokol a SOAP protokol (Simple Object Access Protocol), (komunikaˇcní spojení, obálku a adresace zpráv pˇri volání konkrétních služeb)
jazyky XML (eXtensible Markup Language) a XML Schema (XSD), ˇ (popis struktury a vlastní zápis informací behem pˇrenosu pˇri volání služeb)
registr UDDI (Universal Description, Discovery and Integration) (mechanismus registru˚ pro vyhledávání webových služeb)
jazyk WSDL (Web Services Description Language) ˇ služeb a zpusobu (popis funkcí a umístení ˚ komunikace v XML)
definice Web Service zahrnuje tvorbu XSD a WSDL dokumentu˚ (tj. popis datových typu, ˚ operací, zpusobu ˚ volání rozhraní služby)
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
13 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Další standardy kolem Web Services
(diagram pˇrevzat z „Vinod Krishnan: SOA – a quick view“) Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
14 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
XML Schema Definition (XSD) Jazyk od W3C pro popis struktury/schéma XML dokumentu. ˚ (dalšími jazyky jsou napˇr. DTD, Relax NG, Schematron, atd.)
„W3C XML Schema Definition Language (XSD) 1.1“ popsaná v Part 1: Structures Part 2: Datatypes
Popis schéma je XML dokument s elementem <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:my="http://mycompany.com/hr/schemas" targetNamespace="http://mycompany.com/hr/schemas" elementFormDefault="qualified"> ...
Obsahuje pˇreddefinované jednoduché typy, další lze zadefinovat. (pˇreddefinované jsou napˇr. string, integer nebo date)
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
15 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Definice dokumentu˚ v XSD (pˇríklady uvedeny bez prefixu˚ jmených prostoru) ˚
elementy a atributy jednoduchých typu˚ <element name="..." type="..."/>
elementy složených typu˚ nebo samotné složené typy <element name="...">...
ˇ restrikce (omezení, výbery) jako jednoduché typy <simpleType name="..."> <xs:pattern value="[0-9][0-9]"/> <simpleType name="..."> <enumeration value="one"/>...
sekvence elementu˚ jako složené typy (ˇrazené) <sequence><element name="..." type="..."/> <element name="..." type="..."/>
množiny elementu˚ jako složené typy (neˇrazené) <element name="..." type="..."/> <element name="..." type="..."/>
. . . a další (vizte XML Schema Reference) Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
16 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Pˇríklad popisu v XSD <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:my="http://mycompany.com/hr/schemas" targetNamespace="http://mycompany.com/hr/schemas" elementFormDefault="qualified"> <xs:element name="HolidayRequest"> <xs:complexType><xs:all> <xs:element name="Holiday" type="my:HolidayType"/> <xs:element name="Employee" type="my:EmployeeType"/> <xs:complexType name="HolidayType"> <xs:sequence> <xs:element name="StartDate" type="xs:date"/> <xs:element name="EndDate" type="xs:date"/> <xs:complexType name="EmployeeType"> <xs:sequence> <xs:element name="Number" type="xs:integer"/> <xs:element name="FirstName" type="xs:string"/> <xs:element name="LastName" type="xs:string"/> Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
17 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Pˇríklad XML dokumentu podle uvedeného popisu Uvedenému popisu vyhovuje napˇr. následující dokument <StartDate>2006-07-03 <EndDate>2006-07-07 <Employee> 42 Arjen Poutsma
ˇ Holiday a Employee. Libovolné poˇradí elementu˚ umístení (ale pevné poˇradí jejich pod-elementu) ˚
Platné datum formátované jako YYYY-MM-DD. (datový typ definovaný ve specifikace XML Schema)
..................................................................... Pˇríklady XSD a WSDL pˇrevzaty z „Spring Web Services: Reference Documentation“. Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
18 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Web Services Description Language (WSDL) W3C zavedla WSDL jako standard pro XML popis webových služeb. Jaké funkce poskytuje daná služba? Jak muže ˚ být s danou službou navázána komunikace? Kde/kým je daná služba poskytována? Každá služba jako množina koncových bodu˚ (service endpoints). ˇ v techto bodech komunikuje s okolím pomocí zasílání zpráv, (pro jednoduchost si lze koncový bod pˇredstavit jako rozhraní služby)
WSDL poskytuje formální definici koncových bodu: ˚ 1
abstraktní popis koncového bodu, (popis rozhraní služby bez ohledu na konkrétní technologie a protokoly)
2
konkrétního popis koncového bodu. (navázání abstraktního popisu na reálnou implementaci a komunikace na konkrétní protokol)
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
19 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Abstraktní a konkrétní popis ve WSDL Abstraktní popis koncového bodu: popis rozhraní služby bez ohledu na konkrétní technologie a protokoly, tˇri základní oddíly: message: popis zpráv, které pˇredstavují operace a jejich parametry. operation: popis operací, jejich vstupní a výstupní parametry, interface: rozhraní služby, tj. poskytované operace, Konkrétní popis koncového bodu: navázání abstraktního popisu na reálnou implementaci a komunikace na konkrétní protokol, tˇrí základních oddíly: binding: formát volání služby, popis protokolu (napˇr. v SOAP) pro jednotlivé operation nebo celé interface, service: popis služby jako seskupení prvku˚ „endpoints“, endpoint: fyzická adresa, na které je služba pˇrístupná. Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
20 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Ukázka WSDL popisu služby I Definujeme jmenné prostory pro jednotlivé cˇ ásti dokumentu: soap: WSDL popisuje službu pro protokol SOAP, tns: názvy používané v naší aplikaci, xsd: popis protokolu volání služby jako XML dokumentu, <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:schema="http://mycompany.com/hr/schemas" xmlns:tns="http://mycompany.com/hr/definitions" targetNamespace="http://mycompany.com/hr/definitions"> <wsdl:types> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:import namespace="http://mycompany.com/hr/schemas" schemaLocation="hr.xsd"/>
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
21 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Ukázka WSDL popisu služby II
Definujeme zprávy pˇrijímané a navracené danou službou1 : message: definice vlastní zprávy pˇrenášené pˇri komunikaci, operation: pˇriˇrazení zpráv k operacím posytovaným službou. <wsdl:message name="HolidayRequest"> <wsdl:part element="schema:HolidayRequest" name="HolidayRequest"/> <wsdl:portType name="HumanResource"> <wsdl:operation name="Holiday"> <wsdl:input message="tns:HolidayRequest" name="HolidayRequest"/>
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
22 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Ukázka WSDL popisu služby III ˇ služby2 : Popis formátu volání operací pro SOAP a umístení <wsdl:binding name="HumanResourceBinding" type="tns:HumanResource"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="Holiday"> <soap:operation soapAction="http://mycompany.com/RequestHoliday"/> <wsdl:input name="HolidayRequest"> <soap:body use="literal"/> <wsdl:service name="HumanResourceService"> <wsdl:port binding="tns:HumanResourceBinding" name="HumanResourcePort"> <soap:address location="http://localhost:8080/holidayService/"/>
1 Elementy 2 Element Marek Rychlý
types, message a portType popisují, co služba poskytuje. binding popisuje, jak služba komunikuje, a service, kde ji kontaktovat. Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
23 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Simple Object Access Protocol (SOAP)
ˇ základní vrstva WS technologie, výmena XML zpráv, ˇ patˇrí do aplikaˇcní vrstvy petivrstvého TCP/IP modelu, bezstavový protokol, nezávislé na protokolu a implementaci, (jedním z protokolu˚ komunikace je HTTP/HTTPS protokol)
ˇ podporuje nekolik typu˚ volání funkcí služeb, ˇ je implementované Remote (kde klient posílá XML zprávu na server, nejznámejší Procedure Call (RPC), SOAP vychází ze staršího XML-RPC)
ˇ definuje strukturu zprávy (obálka kolem hlaviˇcky a tela). ˇ (pravdepodobn eˇ vychází ze staršího Web Distributed Data eXchange (WDDX))
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
24 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Struktura SOAP zprávy
(diagram pˇrevzat z „The Java EE 5 Tutorial“)
zpráva = ˇ obálka s hlaviˇckami (nepovinné) a telem + pˇrílohy (nepovinné) Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
25 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Ukázka struktury SOAP zprávy v HTTP protokolu MIME-Version: 1.0 Content-Type: text/xml; charset=UTF-8 Content-Transfer-Encoding: 8bit <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> 2006-07-03 2006-07-07 42 Arjen Poutsma
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
26 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Architektura orientovaná na služby (SOA) Webové služby (Web Services) Technologie webových služeb (XSD, WSDL a SOAP)
Existuje mnoho scénáˇru˚ volání služeb pˇres SOAP Fire-and-forget (one-way) (klient odešle požadavek na službu a déle se neˇceká, nic nevrací)
Request/Response ˇ (odešle požadavek a cˇ eká na odpoved’)
Request with acknowledgement (odešle požadavek a cˇ eká na potvrzení pˇríjmu)
Remote Procedure Call (RPC) (odešle požadavek se serializovanými parametry volané procedury ˚ a cˇ eká na ˇ opet ˇ v podobeˇ serializovaných návratových hodnot) odpoved’
. . . a další (vizte „SOAP Version 1.2 Usage Scenarios“) Synchronní/asynchronní komunikace záleží na transportním protokolu. ˇ napˇr. narozdíl od emailových zpráv) (napˇr. HTTP(s) synchronní, umí odpovedi,
Samozˇrejmeˇ je možno implemntovat asynchronicitu na úrovni služby. ˇ adresu vlastní (požadavek pošle klient metodou fire-and-forget, ale pˇriloží v nem ˇ služby, která je pˇripravena pˇrijmout odpoved’) Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
27 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Poskytovatel webové služby pomocí JAX-WS Spotˇrebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikaˇcním serveru a podpora v IDE
Java API for XML Web Services (JAX-WS) pro realizaci XML webových služeb a jejich klientu˚ v Java EE, (poskytovatelu˚ a spotˇrebitelu˚ služeb dle SOA)
používá pˇrenos XML zpráv SOAP protokolem pˇres HTTP, (pˇres knihovny SOAP with Attachments API for Java, SAAJ)
podporuje ruzné ˚ modely komunikace3 : (implicitneˇ se použije „Document/literal“, nastavitelné pomocí anotace) 1
RPC/encoded ˇ (jednoduché WSDL s názvem operace a typy parametru˚ pˇrímo ve zpráve)
2
RPC/literal ˇ (podobneˇ jako pˇredchozí, ale bez typu˚ ve zpráve)
3
Document/encoded (nepoužívá se, není podporováno „standardy“ organizace WS-I)
4
ˇ používaný Document/literal – nejˇcasteji (WSDL popis obsahuje definici typu˚ v XML Schema, lehce validovatelné)
3 http: //www.ibm.com/developerworks/webservices/library/ws-whichwsdl/ Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
29 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Poskytovatel webové služby pomocí JAX-WS Spotˇrebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikaˇcním serveru a podpora v IDE
Implementace JAX-WS
webové služby jsou definovány jako Java tˇrídy s poskytovanými metodami oznaˇcenými pomocí anotací, (automatický pˇrevod definice rozhraní tˇrídy do popisu pomocí WSDL)
spotˇrebitel vytvoˇrí pomocí JAX-WS lokální proxy pro vzdálenou webovou službu a tu transparentneˇ používá, (proxy má stejné rozhraní jako tˇrída implementující webovou službu u poskytovatele, pˇrevod volání metod proxy na SOAP zprávy je automatický),
respektuje nezávislost na platformeˇ – lze komunikovat s libovolneˇ implementovanými službami. ˇ pomocí JAX-WS, apod.) (tzn. se službami neimplementovanými v Jave,
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
30 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Poskytovatel webové služby pomocí JAX-WS Spotˇrebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikaˇcním serveru a podpora v IDE
Technologie JAX-WS v Java EE podle [Oracle, 2014]
tenký/tlustý klient – Java EE aplikaˇcní server – databáze Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
31 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Poskytovatel webové služby pomocí JAX-WS Spotˇrebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikaˇcním serveru a podpora v IDE
Komunikace pˇres JAX-WS podle [Oracle, 2014]
JAX-WS tvoˇrí abstrakci nad SOAP komunikací webových služeb
Marek Rychlý
Webové služby v Java EE (JAX-WS) — Pˇrednáška pro PDI, 24. listopadu 2015
32 / 51
Úvod k SOA a webovým službám Java API for XML Web Services (JAX-WS) Java API for RESTful Web Services (JAX-RS)
Poskytovatel webové služby pomocí JAX-WS Spotˇrebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikaˇcním serveru a podpora v IDE
Implementace poskytovatele WS pomocí JAX-WS Použití anotací @javax.jws.WebService a @javax.jws.WebMethod: webová služba je realizována jako rozhraní/tˇrída s anotací @WebService, (service endpoint interface/service endpoint implementation (SEI)) ˇ implicitní je definice rozhraní služby spoleˇcneˇ s implementací (ve tˇríde), (pˇrímo u implementace metod tˇrídy pomocí anotace @WebMethod)
ˇ ˇ definici rozhraní služby, parametr endpointInterface umožnuje oddelit (rozhraní musí rozšiˇrovat rozhraní Remote a oznaˇcit metody pomocí @WebMethod) tˇrída implementující službu nesmí být final nebo abstract, musí mít implicitní bezparametrický konstruktor, (metody s anotací @PostConstruct a @PreDestroy obslouží vznik a zánik)
metody rozhraní/tˇrídy pro webovou službu (anotace @WebMethod) musí být public a nesmí být static nebo final, typy parametru˚ a návratových hodnot metod rozhraní/tˇrídy pro webovou službu jsou omezeny Java Architecture for XML Data Binding (JAXB), z tˇrídy (tj. z implementace služby) lze generovat popis služby. (wsgen -d