Wprowadzenie do technologii Web Services: SOAP, WSDL i

Transkrypt

Wprowadzenie do technologii Web Services: SOAP, WSDL i
Wprowadzenie do technologii Web
Services: SOAP, WSDL i UDDI
Maciej Zakrzewicz
PLOUG
[email protected]
Plan prezentacji
• Wprowadzenie do architektury zorientowanej na usługi
• Charakterystyka technologii Web Services
– protokół komunikacyjny SOAP
– języku opisu interfejsu WSDL
– rejestr usług UDDI
• Konstrukcja aplikacji Web Services za pomocą narzędzia
Oracle JDeveloper
Architektura zorientowana
na usługi (SOA)
• Logika biznesowa nie stanowi monolitycznego programu;
rozbita pomiędzy wiele rozproszonych komponentów
usługowych
• Komponenty usługowe koordynowane przez centralną
aplikację sterującą
• Nowy model biznesu IT, bazujący na odpłatnym oferowaniu
dostępu do biznesowych komponentów usługowych
Architektura zorientowana
na usługi (SOA)
dostawca
usług
konsument
usług
aplikacje
usługi
konsument
usług
internet
dostawca
usług
Technologia Web Services
•
•
Technologia konstrukcji rozproszonych komponentów
usługowych, stanowiących podstawę dla realizacji aplikacji
biznesowych w architekturze SOA
Usługa Web Service: zwarty, samodokumentujący się
komponent programowy, który może być przez swojego
twórcę zarejestrowany w sieci komputerowej, a następnie
przez twórcę aplikacji-konsumenta odkryty i wywołany w
trybie zdalnego wykonania
Technologia Web Services
komponent Web Service
klient Web Service
call p1(2,5)
function
function
p1(a,b)
function
p1(a,b)
p1(a,b)
serializacja wywołań
deserializacja wyników
...<p1>
<a>2</a>
<b>5</b>
</p>...
komunikat SOAP
deserializacja wywołań
serializacja wyników
wyślij
żądanie
sieciowe
serwer aplikacji
Internet
HTTP
...<p1>
<a>2</a>
<b>5</b>
</p>...
Protokół SOAP
•
•
•
•
Simple Object Access Protocol
Prosty protokół komunikacyjny oparty na języku XML,
umożliwiający przekazywanie wywołań zdalnych
komponentów Web Services
Może współdziałać z dowolnym niskopoziomowym
sieciowym mechanizmem transportowym, np. HTTP,
HTTPS, SMTP, JMS, RMI
Dwa tryby wywołań: Remote Procedure Call
i dokumentowy (document-oriented)
Protokół SOAP
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
Żądanie:
multiply(2,3)
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="demo">
<m:multiply>
<m:val1>3</m:val1>
<m:val2>2</m:val2>
<?xml version="1.0"?>
</m:multiply>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
</soap:Body>
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
</soap:Envelope>
<soap:Body xmlns:m="demo">
<m:multiplyResponse>
<m:result>6</m:result>
</m:multiplyResponse>
Odpowiedź:
6
</soap:Body>
</soap:Envelope>
Implementacja usługi Web Services
1. Utwórz klasę Java zawierającą metody logiki biznesowej
2. Skorzystaj z kreatora Java web Service
Instalowanie usługi Web Services
Testowanie zainstalowanej usługi
Implementacja klienta Web Services
import org.apache.soap.*;
import oracle.soap.transport.http.*;
...
Call call = new Call();
call.setTargetObjectURI("demo");
call.setMethodName("multiply");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new Vector();
params.addElement(new Parameter("val1", Integer.class, 2, null));
params.addElement(new Parameter("val2", Integer.class, 3, null));
call.setParams(params);
Response resp = call.invoke(new URL("http://miner/demo"), "");
Parameter ret = resp.getReturnValue();
Object value = ret.getValue();
System.out.println(value);
Dokument WSDL
<definitions name="demo" ...>
<message name="multiply0Request">
<part name="val1" type="xsd:int"/>
<part name="val2" type="xsd:int"/>
</message>
<message name="multiply0Response">
<part name="return" type="xsd:int"/>
</message> ...
<binding name="DemoBinding" type="tns:DemoPortType">
<soap:binding style="rpc" ...>
<operation name="multiply">
<input name="multiply0Request"> ... </input>
<output name="multiply0Response"> ... </output>
</operation>
</binding>
<service name="http://miner/Demo">
<port name="DemoPort" binding="tns:DemoBinding">
<soap:address location="http://miner/Demo"/>
</port>
</service>
</definitions>
WSDL to język znaczników
XML służący do opisu
technicznych parametrów
połączenia sieciowego
aplikacji-klienta z
komponentem Web
Service
Generowanie klasy pośrednika
(Stub/Proxy)
Klasa-pośrednik (Stub/Proxy)
public class DemoStub
{
public DemoStub() {...}
public class Demo
{
public int multiply(int val1, int val2) {return val1 * val2;}
public int add(int val1, int val2) {return val1 + val2;}
}
public String getEndpoint() {...}
public void setEndpoint(String endpoint) {...}
public Integer add(Integer val1, Integer val2) throws Exception {...}
public Integer multiply(Integer val1, Integer val2) throws Exception {...}
public void setMaintainSession(boolean maintainSession) {...}
public boolean getMaintainSession() {...}
public void setTransportProperties(Properties props) {...}
public Properties getTransportProperties() {...}
}
public class DemoClient
{
public static void main(String[] args) throws Exception
{
DemoStub ds = new DemoStub();
System.out.println(ds.multiply(new Integer(2),new Integer(3)));
}}
Dynamiczne generowanie klasypośrednika (Stub/Proxy)
WebServiceProxyFactory factory = new WebServiceProxyFactory();
WebServiceProxy proxy =
factory.createWebServiceProxy("http:...demo.wsdl");
WebServiceMethod method = proxy.getMethod("multiply");
String paramNames[] = { "val1", "val2"};
Object paramValues[] = new Integer[2];
paramValues[0] = new Integer(2);
paramValues[1] = new Integer(3);
Object response = method.invoke(paramNames,paramValues);
...
Universal Description, Discovery, and
Integration - UDDI
• Specyfikacja bazy danych, w której twórcy usług Web
Services dokonują ich rejestracji (przy użyciu WSDL)
• Twórcy aplikacji klienta mogą przeszukiwać bazy danych
UDDI w celu znalezienia potrzebnej im usługi sieciowej;
przeszukiwanie jest oparte o nazwy, adresy, klasyfikacje
NAICS, ISO-3166, UNSPSC
• Pobrany z bazy danych UDDI dokument WSDL służy
twórcom aplikacji klienta do wygenerowania Client Proxy,
używanego następnie podczas budowy aplikacji końcowej
• Przykładowe bazy danych UDDI http://uddi.microsoft.com, http://uddi.sap.com,
http://uddi.ibm.com
• Udostępniane usługi obejmują prognozy pogody,
wyszukiwarki, kursy akcji, kursy walut, oferty sklepów
internetowych, itd.
Cykl życia usługi Web Service
UDDI
rejestracja
usługi
komponent
JAXR-API
JAXR-API
wywołanie
usługi
JAX-RPC
wyszukanie
usługi
klient
Zestaw programisty WSDP
• Java API for XML Processing (JAXP): podstawowe biblioteki
przetwarzania danych XML, zgodne z rekomendacją W3C,
• Java API for XML Messaging (JAXM): biblioteka sieciowej komunikacji
opartej na języku XML,
• SOAP with Attachments API for Java (SAAJ): biblioteka sieciowej
komunikacji w oparciu o protokół SOAP,
• Java API for XML-based RPC (JAX-RPC): biblioteka służąca do realizacji
zdalnych wywołań komponentów usługowych w trybie RPC,
• Java API for XML Registries (JAXR): biblioteka służąca do dostępu do
XML-owych rejestrów usług Web Servicesm np. UDDI,
• Tomcat – zredukowany serwer J2EE umożliwiający instalowanie i
uruchamianie komponentów usługowych Web Services,
• JavaServer Pages Standard Tag Library (JSTL): standardowa biblioteka
znaczników JSP,
• Registry Server: rejestr UDDI
Podsumowanie
• Podstawowe kanony implementacji środowisk Web
Services:
– implementację komponentu usługowego w dowolnym języku
programowania
– sporządzenie pliku opisu interfejsu komponentu (WSDL)
– zgłoszenie komponentu do centralnego rejestru (UDDI)
– wyszukanie komponentu w centralnym rejestrze (UDDI)
– wygenerowanie kodu komunikacyjnego dla klienta (Web Service
Stub)
– implementację klienta Web Service