Webové služby v Java EE (JAX-WS)

Podobné dokumenty
Životní cyklus služby v SOA a popis webových služeb

Webové služby v Java EE (JAX-WS)

Webové služby v Java EE (JAX-WS)

Úvod do Web Services

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.

Servisně orientovaná architektura a její aplikace v systémech sledování a řízení výroby

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Michal Krátký, Miroslav Beneš

Architektura orientovaná na služby Návrh orientovaný na služby. Ing. Petr Weiss. VUT v Brně,, FIT, UIFS

Tvorba informačních systémů

Softwarové komponenty a Internet

Metody integrace aplikací

Komponentový návrh SW

Koordinační středisko pro resortní zdravotnické informační systémy

RESTful API TAMZ 1. Cvičení 11

SOAP & REST služby. Rozdíly, architektury, použití

Web Services na SOAP

Uživatelský manuál pro externí uživatele veřejného webu OTE webové služby

Požadavky pro výběrová řízení TerraBus ESB/G2x

Referenční rozhraní. Jiří Kosek. Ministerstvo informatiky ČR. ISSS 25. března 2003

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Webové služby a XML. Miroslav Beneš

UJO Framework. revoluční architektura beans. verze

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Tvorba informačních systémů

PODMÍNKY POSKYTOVÁNÍ PŘÍSTUPU K PORTÁLU NAMĚŘENÝCH DAT POMOCÍ WEBOVÝCH SLUŽEB SPOLEČNOSTI ČEZ DISTRIBUCE, A. S.

RESTful web service v Javě

Common Object Request Broker Architecture

Příloha: Dodatečné informace, včetně přesného znění žádosti dodavatele o dodatečné informace

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

WCF. IW5 - Programování v.net a C# WCF

Základy objektové orientace I. Únor 2010

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky. Automatizované

InternetovéTechnologie

Webové služby. Martin Sochor

POLOPROVOZ ZNALOSTNÍ DATABÁZE INTERPI DOKUMENTACE

Osnova. GIOP a IIOP IDL IOR POA. IDL Klient Server. 2 Historie. 3 Princip a základní pojmy. 4 Implementace. 5 Aplikace CORBA

Pokročilé Webové služby a Caché security. Š. Havlíček

Popis B2B rozhraní pro elektronickou neschopenku

KIV/PIA 2013 Jan Tichava

Specifikace rozhraní. Oznamovací povinnost podle zákona č. 307/2013 Sb., ve znění pozdějších předpisů. Martin Falc, SW architekt.

TECHNICKÁ SPECIFIKACE VEŘEJNÉ ZAKÁZKY

Verze dokumentu 0.1 duben 2016

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Server-side technologie pro webové aplikace

Obsah prezentace. Co je to XML? Vlastnosti. Validita

Java a XML. 10/26/09 1/7 Java a XML

10 Balíčky, grafické znázornění tříd, základy zapozdření

Systém elektronického rádce v životních situacích portálu

(Enterprise) JavaBeans. Lekce 7

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

Identifikátor materiálu: ICT-3-03

MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY

Testování SOA systémů v Oracle SOA Suite

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

TÉMATICKÝ OKRUH Softwarové inženýrství

Komponenta Human Task v Oracle SOA Suite

Česká správa sociálního zabezpečení

TÉMATICKÝ OKRUH Softwarové inženýrství

Komponentní technologie

Úvod do programovacích jazyků (Java)

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Webové služby. Martin Kuba Superpočítačové centrum Brno Masarykova univerzita

Platformy / technologie. Jaroslav Žáček

SYSTÉM PRO KONFIGURACI KOMUNIKAČNÍCH TERMINÁLŮ A VIZUALIZACI STAVOVÝCH DAT Z KOLEJOVÝCH VOZIDEL

Vhodnost nasazení jednotlivých webových architektur, sdílení dat, perzistence, webové služby a REST, asynchronnost, messaging

Standardy pro Webové služby WSDL, UDDI 1

Úvod. Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne.

Technická dokumentace B2C WS postcode

Business Intelligence

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Funkční specifikace ABOKWS. Aplikační rozhraní elektronického bankovnictví ABO-K. Verze 0.5

Architektura aplikace

Schéma e-pošty. UA (User Agent) rozhraní pro uživatele MTA (Message Transfer Agent) zajišťuje dopravu dopisů. disk. odesilatel. fronta dopisů SMTP

Česká správa sociálního zabezpečení

PLATFORMY / TECHNOLOGIE JAROSLAV ŽÁČEK

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

java remote method invocation Kateřina Fricková, Matouš Jandek

Tvorba informačních systémů

Platformy / technologie. Jaroslav Žáček jaroslav.zacek@osu.cz

l Kontakt s klientem SSP Popis automatizované komunikace s ÚP ČR v součinnosti a exekuci

Webové mapové služby. Lukáš Birka

Tvorba podnikových aplikací v jazyce JAVA. Josef Pavlíček KII PEF CZU

X36DSV 3. cvičení. XML (extensible Markup Language) JavaScript. AJAX (Asynchronous JavaScript and XML) X36DSV. 2007/10 ver.2.0 1

Vývoj Internetových Aplikací

Základní zadání IS o ISVS. Sluţba poskytování dat IS o ISVS

RMI Remote Method Invocation

Internet Information Services (IIS) 6.0

Co je to Grid. Martin Kuba Superpočítačové Centrum Brno Seminář CESNET, Třešť

RMI - Distribuované objekty v Javě

HTTP protokol. Zpracoval : Petr Novotný

1. Distribuce Javy. 2. Vlastnosti J2EE aplikace. 3. Fyzická architektura J2EE aplikace. Distribuce Javy se liší podle jejího zamýšleného použití:

INFORMAČNÍ SYSTÉMY NA WEBU

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

Transkript:

Webové služby v Java EE (JAX-WS) Marek Rychlý Vysoké učení technické v Brně Fakulta informačních technologií Ústav informačních systémů Přednáška pro PDI 24. listopadu 2015 Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 1 / 51

Obsah 1 Úvod k SOA a webovým službám 2 Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE 3 Representational State Transfer (REST) architektura Webové služby pomocí JAX-RS Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 2 / 51

Servisně orientovaná architektura (SOA) Definice (Service-Oriented Architecture, OASIS SOA RefModel) SOA je paradigma předepisující způsob uspořádání a použití distribuovaných služeb, které mohou být spravovány různými vlastníky. Definuje jednotný způsob inzerce, hledání, vzájemné komunikace a spotřeby služeb s cílem dosáhnout požadovaných výsledků v souladu s měřitelnými předpoklady a očekáváním. SOA je paradigma kompozice služeb (architektonický styl a způsob analýzy, návrhu, integrace a údržby systémů) SOA je distribuovaná autonomní, ale spolupracující služby (systém realizován jako kompozice účelové spolupracujících služeb) SOA je heterogenní prostředí služba přístupná přes své rozhraní (služby mohou mít různé životní cykly, vlastníky, implementační technologie, atd.) SOA je standardizovaná popis rozhraní a způsob komunikace služeb (řeš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řednáška pro PDI, 24. listopadu 2015 4 / 51

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řebitel služeb na základě 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řednáška pro PDI, 24. listopadu 2015 5 / 51

Konceptuální model SOA model interakce mezi poskytovatelem služeb a spotřebitelem služeb Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 6 / 51

Struktura SOA Úvod k SOA a webovým službám SOA je částečně vrstevnatá architektura (vrstva = úroveň abstrakce) 1 vrstva business procesů BP je posloupnost kroků respektující business pravidla a vedoucí k zisku (hmotnému i nehmotnému), reprezentován sekvencí provedení několika služeb (choreografie služeb), 2 vrstva služeb rozhraní jednotlivých komponent sjednocena do služeb, služba za běhu sestavuje komponenty a přeposílá jim požadavky, služba na rozhraní zpřístupňuje své funkce (popis služby), 3 vrstva komponent základní stavební kameny služeb, realizace funkčnosti služeb a zajištění požadované kvality služeb (QoS), komponenty jsou černé skříňky a jejich funkce jsou přístupné pouze přes rozhraní. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 7 / 51

Informační systém bez architektury SOA podsystémy jsou monolitické (komplikovaný přístup k jednotlivým funkcím, nejasné rozhraní, obtížná integrace celých podsystémů) podsystémy jsou striktně oddělené, každý má samostatný životní cyklus (implementací, správou, možností modifikace, atd.) (diagram převzat z Sun: Service-Oriented Architecture Overview ) komunikace podsystémů přes společné úložiště dat (problematická návaznost procesů, např. Order Status, nejasná zodpovědnost za data) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 8 / 51

Informační systém s architekturou SOA dekompozice na úroveň jednotlivých služeb (jasně 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čných částí podsystémů, např. Check Order Status ) (diagram převzat z Sun: Service-Oriented Architecture Overview ) přímá komunikace služeb, úložiště dat pro dokumenty (služby komunikují napříč podsystémy, s daty manipuluje služba reprezentující k datům příslušný business proces) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 9 / 51

Spolupráce mezi službami v SOA služby poskytují své prostředky bud přímo cílovému spotřebiteli 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ředky jiné (rovnocenné) služby pro realizaci nabízených funkcí, agregace služba sestavená ze dvou (nebo více, podřízených) služeb nabízí kombinaci funkcí dílčích služeb, choreografie služby potom spolupracují za účelem provedení konkrétního business procesu, orchestrace služba řídí součinost ostatních služeb za účelem provedení své části business procesu. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 10 / 51

Principy SOA Úvod k SOA a webovým službám standardizace! kompatibilita, nezávislost (jednotný způsob popisu služeb) volné vázání! snadnější údržba služeb (minimum závislostí mezi službami, okolí služby závisí pouze na jejím rozhraní) abstrakce! jednoznačný způsob použití (služby přístupné pouze přes rozhraní, zbytek zapouzdřen) znovupoužitelnost! vývoj služby přinese větší zisk (služba použitelná v různých kontextech/systémech) nezávislost! ověřitelnost funkčnosti (služby autonomní jednotky, nezávisí skrytě na svém okolí) bezstavovost! předvídatelnost chování (služba by neměla uchovávat viditelnou stavovou informaci) dohledatelnost! implementační nezávislost (navazovány účelově poskytovatel služby dle potřeby dohledatelný v adresáři) kompozice! tvorba složitějších služeb (kompozice služeb do větších funkčních celků dle potřeby) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 11 / 51

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řebitel poskytovatel = potřebuje nabízí funkčnost, SOA je jemnější dekompozice (např. menší nároky na zdroje), SOA je více distribuovaná (rozmístění výpočetní logiky), služby se snaží být bezstavové z vnějšího pohledu. SOA vs. objektově orientovaný přístup SOA přístup preferuje volném provázání entit (služeb) OO přístup přesně vztahy mezi třídami, těsnější vazby entit (objektů), základní vlastností OO přístupu je dědičnost SOA přístup s dědičností nepočítá, preferuje delegaci, základní vlastností SOA přístupu je bezstavovost entit zapouzdření dat do objektů v OO přístupu, aktivita služeb v SOA přístupu je vyvolána až příchodem nějaké zprávy, podobný pohled na abstrakci entit (rozhraní). Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 12 / 51

Neznámější a nejpoužívanější technologie pro implementaci SOA Webové služby postaveny na webových standardech: HTTP protokol a SOAP protokol (Simple Object Access Protocol), (komunikační spojení, obálku a adresace zpráv při volání konkrétních služeb) jazyky XML (extensible Markup Language) a XML Schema (XSD), (popis struktury a vlastní zápis informací během přenosu při volání služeb) registr UDDI (Universal Description, Discovery and Integration) (mechanismus registrů pro vyhledávání webových služeb) jazyk WSDL (Web Services Description Language) (popis funkcí a umístění služeb a způsobu komunikace v XML) definice Web Service zahrnuje tvorbu XSD a WSDL dokumentů (tj. popis datových typů, operací, způsobu volání rozhraní služby) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 13 / 51

Další standardy kolem Web Services (diagram převzat z Vinod Krishnan: SOA a quick view ) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 14 / 51

XML Schema Definition (XSD) Jazyk od W3C pro popis struktury/schéma XML dokumentů. (dalšími jazyky jsou např. 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">... </xs:schema> Obsahuje předdefinované jednoduché typy, další lze zadefinovat. (předdefinované jsou např. string, integer nebo date) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 15 / 51

Definice dokumentů v XSD (příklady uvedeny bez prefixů jmených prostorů) elementy a atributy jednoduchých typů <element name="..." type="..."/> <attribute name="..." type="..." use="required"/> elementy složených typů nebo samotné složené typy <element name="..."><complextype>...</complextype></element> restrikce (omezení, výběry) jako jednoduché typy <simpletype name="..."><restriction base="integer"> <xs:pattern value="[0-9][0-9]"/></restriction></simpletype> <simpletype name="..."><restriction base="string"> <enumeration value="one"/>...</restriction></simpletype> sekvence elementů jako složené typy (řazené) <sequence><element name="..." type="..."/> <element name="..." type="..."/></sequence> množiny elementů jako složené typy (neřazené) <all><element name="..." type="..."/> <element name="..." type="..."/></all>... a další (vizte XML Schema Reference) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 16 / 51

Příklad popisu v XSD <?xml version="1.0" encoding="utf-8"?> <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:all></xs:complextype> </xs:element> <xs:complextype name="holidaytype"> <xs:sequence> <xs:element name="startdate" type="xs:date"/> <xs:element name="enddate" type="xs:date"/> </xs:sequence> </xs:complextype> <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"/> </xs:sequence> </xs:complextype> </xs:schema> Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 17 / 51

Příklad XML dokumentu podle uvedeného popisu Uvedenému popisu vyhovuje např. následující dokument <?xml version="1.0" encoding="utf-8"?> <HolidayRequest xmlns="http://mycompany.com/hr/schemas"> <Holiday> <StartDate>2006-07-03</StartDate> <EndDate>2006-07-07</EndDate> </Holiday> <Employee> <Number>42</Number> <FirstName>Arjen</FirstName> <LastName>Poutsma</LastName> </Employee> </HolidayRequest> Libovolné pořadí elementů umístění Holiday a Employee. (ale pevné pořadí jejich pod-elementů) Platné datum formátované jako YYYY-MM-DD. (datový typ definovaný ve specifikace XML Schema)..................................................................... Příklady XSD a WSDL převzaty z Spring Web Services: Reference Documentation. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 18 / 51

Web Services Description Language (WSDL) W3C zavedla WSDL jako standard pro XML popis webových služeb. Jaké funkce poskytuje daná služba? Jak můž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 bodů (service endpoints). v těchto bodech komunikuje s okolím pomocí zasílání zpráv, (pro jednoduchost si lze koncový bod představit jako rozhraní služby) WSDL poskytuje formální definici koncových bodů: 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řednáška pro PDI, 24. listopadu 2015 19 / 51

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ři základní oddíly: message: popis zpráv, které představují 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ří základních oddíly: binding: formát volání služby, popis protokolu (např. v SOAP) pro jednotlivé operation nebo celé interface, service: popis služby jako seskupení prvků endpoints, endpoint: fyzická adresa, na které je služba přístupná. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 20 / 51

Ukázka WSDL popisu služby I Definujeme jmenné prostory pro jednotlivé čá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, <?xml version="1.0" encoding="utf-8"?> <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"/> </xsd:schema> </wsdl:types> Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 21 / 51

Ukázka WSDL popisu služby II Definujeme zprávy přijímané a navracené danou službou 1 : message: definice vlastní zprávy přenášené při komunikaci, operation: přiřazení zpráv k operacím posytovaným službou. <wsdl:message name="holidayrequest"> <wsdl:part element="schema:holidayrequest" name="holidayrequest"/> </wsdl:message> <wsdl:porttype name="humanresource"> <wsdl:operation name="holiday"> <wsdl:input message="tns:holidayrequest" name="holidayrequest"/> </wsdl:operation> </wsdl:porttype> Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 22 / 51

Ukázka WSDL popisu služby III Popis formátu volání operací pro SOAP a umístění služby 2 : <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:input> </wsdl:operation> </wsdl:binding> <wsdl:service name="humanresourceservice"> <wsdl:port binding="tns:humanresourcebinding" name="humanresourceport"> <soap:address location="http://localhost:8080/holidayservice/"/> </wsdl:port> </wsdl:service> </wsdl:definitions> 1 Elementy types, message a porttype popisují, co služba poskytuje. 2 Element binding popisuje, jak služba komunikuje, a service, kde ji kontaktovat. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 23 / 51

Simple Object Access Protocol (SOAP) základní vrstva WS technologie, výměna XML zpráv, patří do aplikační vrstvy pětivrstvého TCP/IP modelu, bezstavový protokol, nezávislé na protokolu a implementaci, (jedním z protokolů komunikace je HTTP/HTTPS protokol) podporuje několik typů volání funkcí služeb, (kde klient posílá XML zprávu na server, nejznámější je implementované Remote Procedure Call (RPC), SOAP vychází ze staršího XML-RPC) definuje strukturu zprávy (obálka kolem hlavičky a těla). (pravděpodobně vychází ze staršího Web Distributed Data exchange (WDDX)) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 24 / 51

Struktura SOAP zprávy (diagram převzat z The Java EE 5 Tutorial ) zpráva = obálka s hlavičkami (nepovinné) a tělem + přílohy (nepovinné) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 25 / 51

Ukázka struktury SOAP zprávy v HTTP protokolu MIME-Version: 1.0 Content-Type: text/xml; charset=utf-8 Content-Transfer-Encoding: 8bit <?xml version="1.0" encoding="utf-8"?> <env:envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:header/> <env:body> <r:holidayrequest xmlns:r="http://mycompany.com/hr/schemas"> <r:holiday> <r:startdate>2006-07-03</r:startdate> <r:enddate>2006-07-07</r:enddate> </r:holiday> <r:employee> <r:number>42</r:number> <r:firstname>arjen</r:firstname> <r:lastname>poutsma</r:lastname> </r:employee> </r:holidayrequest> </env:body> </env:envelope> Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 26 / 51

Existuje mnoho scénářů volání služeb přes SOAP Fire-and-forget (one-way) (klient odešle požadavek na službu a déle se nečeká, nic nevrací) Request/Response (odešle požadavek a čeká na odpověd ) Request with acknowledgement (odešle požadavek a čeká na potvrzení příjmu) Remote Procedure Call (RPC) (odešle požadavek se serializovanými parametry volané procedůry a čeká na odpověd opět v podobě serializovaných návratových hodnot)... a další (vizte SOAP Version 1.2 Usage Scenarios ) Synchronní/asynchronní komunikace záleží na transportním protokolu. (např. HTTP(s) synchronní, umí odpovědi, např. narozdíl od emailových zpráv) Samozřejmě je možno implemntovat asynchronicitu na úrovni služby. (požadavek pošle klient metodou fire-and-forget, ale přiloží v něm adresu vlastní služby, která je připravena přijmout odpověd ) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 27 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE pro realizaci XML webových služeb a jejich klientů v Java EE, (poskytovatelů a spotřebitelů služeb dle SOA) používá přenos XML zpráv SOAP protokolem přes HTTP, (přes knihovny SOAP with Attachments API for Java, SAAJ) podporuje různé modely komunikace 3 : (implicitně se použije Document/literal, nastavitelné pomocí anotace) 1 RPC/encoded (jednoduché WSDL s názvem operace a typy parametrů přímo ve zprávě) 2 RPC/literal (podobně jako předchozí, ale bez typů ve zprávě) 3 Document/encoded (nepoužívá se, není podporováno standardy organizace WS-I) 4 Document/literal nejčastěji používaný (WSDL popis obsahuje definici typů 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řednáška pro PDI, 24. listopadu 2015 29 / 51

Implementace JAX-WS Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE webové služby jsou definovány jako Java třídy s poskytovanými metodami označenými pomocí anotací, (automatický převod definice rozhraní třídy do popisu pomocí WSDL) spotřebitel vytvoří pomocí JAX-WS lokální proxy pro vzdálenou webovou službu a tu transparentně používá, (proxy má stejné rozhraní jako třída implementující webovou službu u poskytovatele, převod volání metod proxy na SOAP zprávy je automatický), respektuje nezávislost na platformě lze komunikovat s libovolně implementovanými službami. (tzn. se službami neimplementovanými v Javě, pomocí JAX-WS, apod.) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 30 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Technologie JAX-WS v Java EE podle [Oracle, 2014] tenký/tlustý klient Java EE aplikační server databáze Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 31 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Komunikace přes JAX-WS podle [Oracle, 2014] JAX-WS tvoří abstrakci nad SOAP komunikací webových služeb Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 32 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikační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řída s anotací @WebService, (service endpoint interface/service endpoint implementation (SEI)) implicitní je definice rozhraní služby společně s implementací (ve třídě), (přímo u implementace metod třídy pomocí anotace @WebMethod) parametr endpointinterface umožňuje oddělit definici rozhraní služby, (rozhraní musí rozšiřovat rozhraní Remote a označit metody pomocí @WebMethod) tří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řídy pro webovou službu (anotace @WebMethod) musí být public a nesmí být static nebo final, typy parametrů a návratových hodnot metod rozhraní/třídy pro webovou službu jsou omezeny Java Architecture for XML Data Binding (JAXB), z třídy (tj. z implementace služby) lze generovat popis služby. (wsgen -d <output dir> -classpath <cp dir> <SEI class>) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 33 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Ukázka implementace poskytovatele v JAX-WS import javax.jws.* @WebService() public class math { private double memory = 0; private String ver = "Math Service v0.1"; @WebMethod(operationName = "getmemory") public double getmemory() { return this.memory; } @WebMethod(operationName = "setmemory") @Oneway public void setmemory(@webparam(name = "newvalue") double newvalue) { this.memory = newvalue; } @WebMethod(operationName = "addtomemory") public double addtomemory(@webparam(name = "addvalue") double addvalue) { return this.memory = this.memory + addvalue; } @WebMethod(operationName = "getversion") public String getversion() { return this.ver; } } Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 34 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Zprovoznění poskytovatele WS pomocí JAX-WS Postup zprovoznění poskytovatele webové služby: 1 tvorba kódu třídy s implementací služby, 2 kompilace třídy s implementací služby, 3 použití nástroje wsgen pro generování popisu služby, 4 zabalení zkompilované implementace a popisu do WAR archivu, 5 umístění WAR archivu na aplikační server. (apl. server automaticky generuje popis služby vyžadovaný spotřebitelem) Většina aplikačních serverů umožňuje poskytuje pomocné akce: Tomcat informace o webové službě na adrese http://localhost:8080/ws-demo/math?tester a WSDL popis na adrese http://localhost:8080/ws-demo/math?wsdl SUN testování webové služby na adrese http://localhost:8080/ws-demo/math?tester Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 35 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Implementace spotřebitele WS pomocí JAX-WS Použití anotace @WebServiceRef: klient deklaruje odkaz na webovou službu anotací @WebServiceRef, (parametr wsdllocation udává URI na WSDL odkazované služby) anotace se použije s deklarací proměnné zastupující objekt poskytovatele proxy, (proměnná se deklaruje jako static a bez přiřazení hodnoty, typ proměnné, tj. třída objektu, je třída implementující službu doplněná v názvu slovem Service ) objekt poskytovatele proxy se použije k získání proxy (portu služby), (metoda getnameport, kde slovo Name je název třídy implementující službu) proxy se používá jako klasický objekt třídy implementující službu. (práce s webovou službou zastupovanou proxy je plně transparentní, jako práce s lokálním objektem třídy implementující webovou službu) z WSDL lze generovat zdroje pro referenci služby v kódu klienta. (voláním wsimport -d <output dir> <WSDL file>) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 36 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Ukázka implementace spotřebitele v JAX-WS import javax.xml.ws.webserviceref; import cz.vutbr.fit.rychly.wsdemo.service.mathservice; import cz.vutbr.fit.rychly.wsdemo.service.math; public class MathClient { @WebServiceRef(wsdlLocation="http://localhost:8080/ws-demo/math?wsdl") static MathService service; public static void main(string[] args) { try { (new MathClient).doTest(args); } catch(exception e) { e.printstacktrace(); } } public void dotest(string[] args) { try { System.out.println("retrieving the port from" + service); Math port = service.getmathport(); System.out.println("invoking the operation on the port"); Sestem.out.println(port.getMemory()); } catch(exception e) { e.printstacktrace(); } } } Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 37 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Zprovoznění spotřebitele WS pomocí JAX-WS Postup zprovoznění spotřebitele webové služby: 1 tvorba kódu tříd spotřebovávajících webovou službu, 2 použití nástroje wsimport s WSDL pro generování zdrojů, 3 kompilace tříd s spotřebovávajících webovou službu, 4 spuštění spotřebitele webové služby. Celý proces může být usnadněn vývojovým prostředím (IDE). Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 38 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Kombinace JAX-WS s doplňujícími technologiemi Speciální použití webových služeb: Streaming API for XML (StAX) postupné zpřístupnění XML dokumentu pomocí webové služby (toto není Document Object Model (DOM)), SOAP with Attachments API for Java (SAAJ) volání s přílohami. Autentizace a autorizace: anotace javax.annotation.security.rolesallowed umožňuje specifikovat role, které mohou přistupovat ke službě (SEI třídě) nebo jejím metodám, anotace javax.annotation.security.declareroles umožňuje nastavit role, ve kterých bude služba (SEI třída) vystupovat, (užitečné při (oboustranném) použití certifikátů) apl. server autentizuje uživatele a autorizuje je pro přístup k webovým komponentám s definovanými rolemi, (autentizační mechanismy Basic, Digest, Form, Client-Cert, a jiné) webová služba je webová komponenta, přístup k ní lze zabezpečit podobně jako např. k servletu. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 39 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Zabezpečení webové komponenty [Oracle, 2014] Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 40 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Použití JAX-WS v aplikačním serveru Tomcat Nebudeme využívat zabudovaný apl. server v IDE, použijeme 1 Apache Tomcat 6.0 je Servlet-2.5/JSP-2.1 webový kontejner, (nepodporuje JavaBeans, jako např. Sun Java System Application Server), 2 stáhneme z http://tomcat.apache.org/ a nainstalujeme, 3 přidáme účet správce serveru do tomcat-users.xml <?xml version= 1.0 encoding= utf-8?> <tomcat-users> <role rolename="manager"/> <role rolename="admin"/> <role rolename="host-manager"/> <user username="x" password="y" roles="admin,manager,host-manager"/> </tomcat-users> 4 spustíme a spravujeme webovým rozhraním na http://x:y@localhost:8080/manager/html Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 41 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Podpora JAX-WS ve vývojovém prostředí NetBeans 1 v menu Tools: Servers přidáme server Tomcat příslušné verze, 2 založíme nový projekt typu Web Application, 3 v Project Properties: Run nastavíme server a cestu ke komponentě, 4 z kontextové nabídky projektu vybereme typ nové komponenty (viz vlevo), 5 po implementaci dáme Build a Deploy. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 42 / 51

Poskytovatel webové služby pomocí JAX-WS Spotřebitel webové služby pomocí JAX-WS Použití JAX-WS v aplikačním serveru a podpora v IDE Konfigurace služby ve vývojovém prostředí NetBeans Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 43 / 51

Representational State Transfer (REST) architektura Webové služby pomocí JAX-RS pro webové služby arch. REST mapující web-resources na Java objekty, (přístup k objektům spravovaným třídou služby via HTTP) součást Java EE od verze JAX-RS v1.1 (v Java EE 6). Representational State Transfer (REST) architektura: vzdálený přístup k datům (zdrojům, resources ), nikoli k procedurám, (ke vzdáleným procedurám přistupuje např. XML-RPC nebo SOAP) každý zdroj má unikátní identifikátor (URL nebo URN), (např. http://example.com/resources/ nebo urn:isbn:0451450523 ) HTTP přístup ke zdrojům metodami PUT, GET, POST a DELETE, (obecně metody reprezentují čtyři operací CRUD: Create, Read, Update, Delete) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 45 / 51

Representational State Transfer (REST) architektura Webové služby pomocí JAX-RS Přístupové metody v architektuře REST pro kolekci zdrojů slouží metoda (např. v případě přístupu k http://example.com/resources/ ) PUT k uložení/nahrazení celé kolekce, GET k výpisu URI a další detailů prvků kolekce, POST k vložení prvku do kolekce, automatické přiřazení URL (URL je obvykle vráceno v odpovědi), DELETE ke smazání celé kolekce, pro jednotlivý zdroj (prvek kolekce) slouží metoda (např. v případě přístupu k http://example.com/resources/123 ) PUT k uložení/nahrazení p5istupovaného prvku, GET k získání přistupovaného prvku ve formátu dle MIME, POST k reprezentaci přistupovaného prvku jako kolekce a vložení jejího vlastního prvku, DELETE ke smazání přistupovaného prvku (DELETE). Metody PUT, GET a DELETE jsou idempotentní (stejná volání vracejí stejné výsledky). Metoda GET je navíc bezpečná (tj. no side-effect ). Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 46 / 51

Representational State Transfer (REST) architektura Webové služby pomocí JAX-RS Implementace poskytovatele a spotřebitele v JAX-RS Použití anotací @javax.jws.webservice a @javax.jws.webmethod: webová služba je realizována jako třída s anotací @Path, (anotace ma jako parametr URI zdroje, přesné nebo jako vzor, např. @Path("users/username")) metody reprezentující operace anotovány @GET, @PUT, @POST @DELETE, (typ reprezentující operace je dán anotací, samotná metoda může mít libovolný název, narozdíl od např. HTTP servletů) na třídu a metody platí podobná omezení, jako u JAX-WS, (třída nesmí být final nebo abstract a musí mít implicitní bezparametrický konstruktor, metody musí být public a nesmí být static nebo final) typy předávaných dat lze specifikovat pomocí @Produces a @Consumes. (podle druhu operace, GET data produkuje a PUT je konzumuje; typ je v MIME) jednotlivé parametry HTTP dotazu lze zpřístupnit pomocí @PathParam, @QueryParam, @HeaderParam, @CookieParam, @MatrixParam, @FormParam. (pro URL zdroje, URL v HTTP dotazu, hlavičky a cookies v dotazu, atd.) Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 47 / 51

Representational State Transfer (REST) architektura Webové služby pomocí JAX-RS Ukázka implementace poskytovatele v JAX-RS import javax.ws.rs.*; @Path("/helloworld") public class HelloWorldResource { @GET @Produces("text/plain") public String getclichedmessage() { return "Hello World"; } } Více v [Oracle, 2014], část 6, kapitola 29 Building RESTful Web Services with JAX-RS. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 48 / 51

Shrnutí a závěr Shrnutí a závěr SOA umožňuje dekomponovat a rozmístit informační systém, webové služby (WS) jsou standardizovanou implementací SOA, Java EE usnadňuje realizaci WS pomocí JAX-WS a JAX-RS, WS jsou webové komponenty se vším, co k tomu patří. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 50 / 51

Literatura Literatura Monson-Haefel, R. (2003). J2EE Web Services: XML SOAP WSDL UDDI WS-I JAX-RPC JAXR SAAJ JAXP. Addison-Wesley Professional. 7th Printing, March 2007. Oracle (2014). The Java EE 7 Tutorial. https://docs.oracle.com/javaee/7/tutorial/. Marek Rychlý Webové služby v Java EE (JAX-WS) Přednáška pro PDI, 24. listopadu 2015 51 / 51