Szolgáltatásorientált rendszerintegráció SOA-alapú rendszerintegráció
Web-szolgáltatások: SOAP, WSDL
Tartalom Integrációs feladat Service Oriented Architecture Web-service SOAP WSDL Web-szolgáltatás API-k DEMO
© BME IIT, Simon Balázs
2
Integrációs feladat, Service Oriented Architecture
3 BME IIT, Simon Balázs ©
Feladat: vállalati integráció Vállalatirányítási rendszer SAP
Termékek .NET
SQL Server
?
Ügyfelek JEE
Web-portál PHP
Oracle DB
MySQL © BME IIT, Simon Balázs
4
Feladat: közigazgatási integráció APEH Linux, Oracle
Ügyfélkapu Linux, JBoss
?
OEP Windows, .NET
MÁK Solaris, Sun
© BME IIT, Simon Balázs
5
Feladat Alkalmazások közötti kommunikáció Különböző programnyelvek Különböző operációs rendszerek Különböző szoftvergyártók Sokfajta meglévő, működő rendszer Integráció Üzleti folyamatok elektronizálása
© BME IIT, Simon Balázs
6
Követelmények
Egyszerű Szabványos Programnyelvektől, operációs rendszertől független Széles körű támogatás Middleware feladatok: megbízható
üzenetküldés titkosítás, digitális aláírás tranzakciókezelés
Megoldás: SOA, web-szolgáltatások
© BME IIT, Simon Balázs
7
Service Oriented Architecture Architektúrafejlesztési paradigma Alapegység: szolgáltatás Szereplők (szerepek):
szolgáltató felhasználó
OASIS definíció: paradigma elosztott
erőforrások és képességek szervezésére és hasznosítására © BME IIT,felkínálás, Simon Balázs felderítés, interakció
8
Szolgáltatás
Az architektúra alapegysége Erőforrás vagy képesség publikálása Jól definiált, szabványos interfész Elrejti az implementáció részleteit Lehetőleg minél vékonyabb réteg Fontos a jó tervezés: Külvilág a
kiajánlott funkcionalitás a megfelelő granularitás általánosság újrafelhasználhatóság © BME IIT, Simon Balázs
Szolgáltatás
Alkalmazás 9
Példák: vállalat
szolgáltatások: ügyfél
adatainak lekérdezése ügyfélazonosító alapján termék adatainak lekérdezése termékazonosító alapján új ügyfél felvétele termék készletbe vétele termék eladása
folyamatok: ügyfél
© BME IIT, Simon Balázs
felad egy rendelést 10
Vállalati integráció Vállalatirányítási rendszer SAP
Termékek .NET
SQL Server
?
Ügyfelek JEE
Web-portál PHP
Oracle DB
MySQL © BME IIT, Simon Balázs
11
Példák: közigazgatás
szolgáltatások: lakcím
megváltoztatása adóbevallás fogadása állampolgár adótartozásának lekérdezése anyasági támogatás igénylése
folyamatok: lakcímváltozás
bejelentése adóbevallás benyújtása vállalkozás alapítása © BME IIT, Simon Balázs
12
Közigazgatási integráció APEH Linux, Oracle
Ügyfélkapu Linux, JBoss
?
OEP Windows, .NET
MÁK Solaris, Sun
© BME IIT, Simon Balázs
13
Web-szolgáltatás
14BME IIT, Simon Balázs ©
Web-szolgáltatás Konkrét technológia szolgáltatások megvalósításához Szabványos (OASIS, W3C) Programnyelvektől, operációs rendszerektől független XML alapú Szállító protokoll: tipikusan HTTP Elterjedt, széles körben támogatott Számos szabvány middleware feladatokra
© BME IIT, Simon Balázs
15
Web-szolgáltatás UDDI
szolgáltatáskatalógus
lekérdezés
publikálás
WSDL
felhasználó
kérés SOAP
szolgáltatás
WSDL = Web-Services Description Language SOAP = Simple Object Access Protocol © BME IIT, Simon Balázs UDDI = Universal Description, Discovery and Integration
16
Web-szolgáltatás
Definíció: SOAP
üzeneten keresztül meghívható szolgáltatás
Üzenetformátum: SOAP = Simple Object Access Használt verziók: 1.1 és 1.2
Protocol
Interfészleíró: WSDL = Web-Services Description Használt verziók: 1.1 és 2.0
Language
Szolgáltatáskatalógus: UDDI
= Universal Description Discovery and Integration Használt verziók: 2.0 és 3.0 © BME IIT, Simon Balázs
17
Miért?
Korábban: CORBA, DCOM DCOM: csak Windows CORBA: különböző
gyártók implementációi közti együttműködés kérdéses ha sikerülne is, a biztonság és a tranzakciókezelés problémás
nem XML alapúak adatformátumok túl alacsony szintűek: byte-ok igazításával is foglalkozni kell tűzfalak, proxy szerverek általában korlátozzák ezeket
© BME IIT, Simon Balázs
18
SOAP (Simple Object Access Protocol)
19BME IIT, Simon Balázs ©
SOAP történet
Eredetileg: 1998.
Microsoft SOAP = Simple Object Access Protocol Eredeti cél: XML alapú RPC
Ma: W3C
gondozásában Használt verziók: 1.1 és 1.2 Már csak a SOAP rövidítés maradt meg, mivel a „Simple Object Access Protocol” félrevezető © BME IIT, Simon Balázs
20
SOAP
Kommunikációs protokoll Alkalmazások között XML-re épül Platformfüggetlen Programnyelvfüggetlen Egyszerű Kiterjeszthető ld.
később: WS-* szabványok
Független az alatta lévő kommunikációs csatornától, de általában HTTP felett alkalmazzák (így a tűzfalon is átmegy)
© BME IIT, Simon Balázs
21
SOAP envelope <env:Envelope xmlns:env="[SOAP névtér]"> <env:Header> <myns:MyHeader1 xmlns:myns="[MyNamespace]"/> <myns:MyHeader2 xmlns:myns="[MyNamespace]" env:mustUnderstand="1"/> ... Envelope Header? <env:Body> ... Saját fejléc* <env:Fault> ... Body Saját tartalom? vagy Fault? © BME IIT, Simon Balázs
22
SOAP 1.1
SOAP üzenet névtér: http://schemas.xmlsoap.org/soap/envelope/
WSDL névtér: http://schemas.xmlsoap.org/wsdl/soap/
HTTP fejlécek: POST
[Lokális URL] HTTP/1.1 Content-Type: text/xml; charset="utf-8” SOAPAction: [Action] a SOAPAction kötelező © BME IIT, Simon Balázs
23
SOAP 1.2
SOAP üzenet névtér: http://www.w3.org/2003/05/soap-envelope
WSDL névtér: http://schemas.xmlsoap.org/wsdl/soap12/
A SOAP 1.1-hez képest más a Fault szerkezete HTTP fejlécek: POST
[Lokális URL] HTTP/1.1 Content-Type: application/soap+xml; charset=utf-8; action=“[Action]” az action opcionális a GET is támogatott
© BME IIT, Simon Balázs
24
WSDL (Web-Services Description Language)
25BME IIT, Simon Balázs ©
WSDL Web Services Description Language Leíró web-szolgáltatásokhoz
interfész meta-adatok szolgáltatások
címei
W3C gondozásában Használt verziók: 1.1 és 2.0
© BME IIT, Simon Balázs
26
WSDL 1.1
definitions import* types?
schema*
abstract
definitions: gyökér elem import: más WSDL importálása types: a felhasznált típusok
message*
message: paraméterlista
part*
operation* input? output?
operation: művelet
fault*
binding*
concrete
part: paraméter
portType: interfész
portType*
XML schema (XSD)
operation* input? output? service*
port*
© BME IIT, Simon Balázs
binding: hívási konvenció
fault*
input: bemenő paraméterlista output: kimenő paraméterlista fault: kivétel
protokoll, adatformátum, kódolás
service: implementáció
port: az adott binding alapján hívható szolgáltatás 27 konkrét helye
WSDL 1.1: típusok XSD-ben <xsd:schema targetNamespace="[MyNamespace]" xmlns:myns="[MyNamespace]" elementFormDefault="qualified"> <xsd:import schemaLocation="..." namespace="[MyNamespace]"/>*
<xsd:element name="[ncname]" type="[qname]"/>* <xsd:complexType name="[ncname]"/>*
Jelmagyarázat: [ncname] = név definíció (pl. “Add”) [qname] = név hivatkozás névtérprefixszel együtt (pl. “myns:Add”)28 © BME IIT, Simon Balázs
WSDL 1.1: absztrakt rész
<wsdl:definitions name="PilotTest" targetNamespace="[MyNamespace]" xmlns:myns="[MyNamespace]" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:import location="..." namespace="[MyNamespace]"/>* <wsdl:types>? <xsd:schema targetNamespace="[MyNamespace]" elementFormDefault="qualified">* <xsd:import schemaLocation="..." namespace="[MyNamespace]"/>* definitions <wsdl:message name="[ncname]">* <wsdl:part name="[ncname]" element="[qname]"/>*
<wsdl:portType name="[ncname]">* <wsdl:operation name="[ncname]">* <wsdl:input message="[qname]"/>? <wsdl:output message="[qname]"/>? <wsdl:fault name="[ncname]" message="[qname]"/>* © BME IIT, Simon Balázs
import* types? schema* message* part* portType* operation* input? output?
fault* 29
WSDL 1.1: konkrét rész
<wsdl:definitions name="PilotTest" targetNamespace="[MyNamespace]" xmlns:myns="[MyNamespace]" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"> <wsdl:import location="..." namespace="[MyNamespace]"/>*
<wsdl:binding name="[ncname]" type="[qname]">* <wsdl:operation name="[ncname]">* <wsdl:input>...? <wsdl:output>...? <wsdl:fault name="[ncname]">...*
definitions import* binding* operation* input? output?
fault*
service* port* 30
<wsdl:service name="[ncname]">* <wsdl:port name="[ncname]" binding="[qname]">...*
© BME IIT, Simon Balázs
WSDL 1.1 MEP MEP = Message Exchange Pattern Az input és output operációk meglététől függően
van output
nincs output
van input
request-reply
one-way (aszinkron)
nincs input
solicit-response
-
© BME IIT, Simon Balázs
31
Két szolgáltatás interfészének ekvivalenciája
Egyeznie kell:
a types részben felhasznált XSD típusoknak, elemeknek és ezek XML névterének az Action-nek a binding beállításainak a policy beállításoknak ha az Action nem explicit adott:
a WSDL targetNamespace-ének, a portType, operation, input, output és fault nevének
Nem szükséges egyeznie:
a message nevének, a part nevének a binding nevének a service nevének, címének ha az Action explicit adott:
a WSDL targetNamespace-ének, a portType, operation, input, output és fault nevének
© BME IIT, Simon Balázs
32
WSDL 1.1 összefoglaló
© BME IIT, Simon Balázs
33
WSDL 2.0
Még nem szabvány, csak ajánlás Nem igazán elterjedt, nem nagyon támogatott Egyszerűbb, mint az 1.1-es verzió Gyökérelem: definitions helyett description Van import és include is Csökkent a redundancia: eltűnt a message rész Készíthetők újrahasznosítható binding-ok Jobban hasonlít a hagyományos programnyelvi interfészekhez: portType helyett interface Megjelent az öröklődés interfészek között (többszörös öröklődés is támogatott)
© BME IIT, Simon Balázs
34
WSDL 2.0 összefoglaló
© BME IIT, Simon Balázs
35
Web-szolgáltatás API-k
36BME IIT, Simon Balázs ©
JAX-WS Java API for XML-based Web-Services Célja:
egyszerű implementálása WSDL és Java osztályok közti leképzés Annotációkkal Web-szolgáltatások
Referencia implementáció: Sun:
GlassFish ESB https://jax-ws.dev.java.net/
© BME IIT, Simon Balázs
37
JAX-WS példa: interfész @WebService(name = "ICalculator", targetNamespace = "http://ik.bme.hu/WsApi") public interface ICalculator { @WebMethod(operationName = "Divide”) public double divide( @WebParam(name = "left") double left, @WebParam(name = "right") double right) throws MathFaultFaultMessage; }
© BME IIT, Simon Balázs
38
JAX-WS példa: implementáció @WebService(endpointInterface = "ICalculator") public class Calculator implements ICalculator { @Override public double divide(double left, double right) throws MathFaultFaultMessage { if(right == 0) { MathFault fault = new MathFault(); fault.setReason("Division by zero."); throw new MathFaultFaultMessage("Error", fault); } return left / right; } }
© BME IIT, Simon Balázs
39
JAX-WS példa: szolgáltatás meghívása
A wsimport által generált CalculatorService proxy osztály segítségével Példa: CalculatorService service = new CalculatorService(); Calculator calculator = service.getCalculatorPort(); try { double result = calculator.divide(5, 2); } catch (MathFaultFaultMessage ex) { ex.printStackTrace(); } finally { ((Closeable)calculator).close(); }
© BME IIT, Simon Balázs
40
WCF Windows Communication Foundation (.NET 3.0) Célja:
egyszerű implementálása WSDL és .NET osztályok közti leképzés .NET attribútumokkal Web-szolgáltatások
© BME IIT, Simon Balázs
41
WCF példa: interfész
[ServiceContract(Namespace = "http://ik.bme.hu/WsApi")] public interface ICalculator { [OperationContract] [FaultContract(typeof(MathFault), Name = "MathFault")] double Divide(double left, double right); }
© BME IIT, Simon Balázs
42
WCF példa: implementáció public class Calculator : ICalculator { public double Divide(double left, double right) { if (right == 0) { throw new FaultException<MathFault>( new MathFault() { Reason = "Division by zero." }); } return left / right; } }
© BME IIT, Simon Balázs
43
WCF példa: szolgáltatás meghívása
Az SvcUtil által generált CalculatorClient proxy osztály segítségével Példa: CalculatorClient calculator = new CalculatorClient(); try { double result = calculator.Divide(5, 2); } catch (FaultException<MathFault> ex) { Console.WriteLine(ex); } finally { calculator.Close(); }
© BME IIT, Simon Balázs
44