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