SOAP. Autor: Piotr Sobczak



Podobne dokumenty
Simple Object Access Protocol

Dostęp do komponentów EJB przez usługi Web Services

Rozproszone systemy Internetowe

1. Uruchomić i skonfigurować środowisko tworzenia aplikacji i serwer aplikacji.

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Tworzenie i wykorzystanie usług

Usługi WWW. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska Opole zlipinski@math.uni.opole.pl

Mydło i spółka. Aplikacje rozproszone. Serwisy sieciowe Broker usług. Serwisy sieciowe. Serwisy sieciowe, WWW (Web Services) Internet

1 Wprowadzenie do J2EE

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Programowanie współbieżne i rozproszone

Komponenty sterowane komunikatami

JAVA I SIECI. MATERIAŁY:

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

XML - wprowadzenie. <message> <text> Dobrze </text> </message> <message> <text> Źle </message> </text> <message> <message> <text> Źle.

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Komunikacja z użyciem gniazd aplikacje klient-serwer

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

XML-RPC: Zdalne wykonywanie procedur

Rozproszone technologie Web Services

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Wywoływanie metod zdalnych

XML w elektronicznej wymianie danych i integracji aplikacji

Zastosowanie informatyki w gospodarce Wykład 4

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

XML w elektronicznej wymianie danych i integracji aplikacji

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Zaawansowany kurs języka Python

Wywoływanie metod zdalnych

prepared by: Programowanie WWW Servlety

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Komunikacja międzysystemowa

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Aplikacja wielowątkowa prosty komunikator

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podejście obiektowe do budowy systemów rozproszonych

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

JAX-RS czyli REST w Javie. Adam Kędziora

Java programowanie w sieci. java.net RMI

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Gatesms.eu Mobilne Rozwiązania dla biznesu

Remote Method Invocation 17 listopada 2010

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Wzorce prezentacji internetowych

Orange Send MMS. Autoryzacja. Metoda HTTP. Parametry wywołania. API wyślij MMS dostarcza wiadomości MMS. Basic POST

Programowanie rozproszone w języku Java

Aplikacje w środowisku Java

Katalog książek cz. 3: Web Service

Komunikacja i wymiana danych

HttpRequest Aplikacja Czat

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Programowanie obiektowe

public interface TravelAgent { public void makereservation(int cruiseid, int cabinid, int customerid, double price); }

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHNICZNA 1

Zaawansowane aplikacje WWW - laboratorium

XML w elektronicznej wymianie danych, integracji aplikacji i bezpieczeństwie

Java wybrane technologie spotkanie nr 3. Serwlety

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Aplikacje RMI

Web Services wykład 9

Zaawansowane aplikacje internetowe laboratorium

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Technologie internetowe laboratorium nr 4. Instalacja i uruchomienie usługi sieciowej w serwerze Tomcat/AXIS

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Programowanie Komponentowe WebAPI

SOAP i alternatywy. 1. WSDL. 2. Protokoły tekstowe XML-RPC. JSON-RPC. SOAPjr. 3. Protokoły binarne Google Protocol Bufers. Apache Thrift.

Zaawansowane aplikacje internetowe laboratorium

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie komponentowe

Web Service y w Javie

Programowanie w języku Java

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 2).

Katalog książek cz. 2

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

Systemy internetowe. Wykład 5 Architektura WWW. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Java JMX. Marcin Werla. Monitorowanie i zarządzanie usługami sieciowymi w Javie. mwerla@man.poznan.pl PCSS/Poznań JUG

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Aplikacja wielow tkowa prosty komunikator

Część I -ebxml. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

WebNotarius. Specyfikacja techniczna komunikacji z usługą WebNotarius. wersja 1.1

Piotr Laskowski Krzysztof Stefański. Java Servlets

Nowoczesne zastosowania XML

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Zaawansowane aplikacje internetowe. Wykład 6. Wprowadzenie do Web Services. wykład prowadzi: Maciej Zakrzewicz. Web Services

Nowoczesne zastosowania XML

Strumienie i serializacja

Transkrypt:

SOAP Autor: Piotr Sobczak

AGENDA: Trochę o Web Services Wprowadzenie do SOAP Anatomia komunikatu SOAP Wysyłanie i otrzymywanie komunikatu SOAP oraz API Javy w przykładach SOAP z załącznikami SOAP-RPC Obsługa błędów w SOAP Podsumowanie i bibliografia

Web Services 1/2 Wyszukiwanie UDDI Opis WSDL, XML Schema Format wiadomości Kodowanie Transport SOAP XML HTTP, SMTP,...

Web Services 2/2 UDDI (Web Service Broker) Publish Find Internet Web Service Provider Bind źródło: MSDN Web Service Consumer

SOAP - podstawy (Simple Object Access Protocol) Definicja: Oparty na języku XML protokół wymiany informacji w rozproszonym środowisku. Silne wspierany przez wielkie koncerny: Microsoft, IBM, Sun Microsystems.

Anatomia komunikatu SOAP Cztery najważniejsze składniki to: koperta SOAP (envelope) wiązanie z protokołem zasady kodowania mechanizm wywołań zdalnych procedur

Koperta SOAP Składa się z nagłówka (header) - opcjonalnego oraz treści (body) obowiązkowej <?xml version= 1.0 encoding= UTF-8?> <soap-env:envelope xmlns:soap-env=http://www.w3.org/2001/06/soapenvelope <soap-env:header> </soap-env:header> <soap-env:body> </soap-env:body> </soap-env:envelope>

Nagłówek SOAP Nagłówek i treść są syntaktycznie podobne. Komunikujące się ze sobą strony powinny ustalić zawartość nagłówka. ebxml Message Service oparty o SOAP formalizuje użycie nagłówka: <soap-env:header> <MessageHeader> <From>ME </From> <To> YOU </To> <MessageId>9999</MessageId> </MessageHeader> </soap-env:header> Przy wykorzystaniu SOAP do RPC, nagłówek służy do opisania infrastruktury natomiast treść do wywołania metody i parametrów,

Wiązanie SOAP z protokołem Wiązanie z protokołem HTTP: SOAPAction = urn:soaphttpclient-action-uri Host = localhost Content-Type= text/xml; charset=utf-8 Content-Length= 701 <?xml version= 1.0 encoding= UTF-8?> <soap-env:envelope xmlns:soap-env=http://www.w3.org/2001/06/soapenvelope </soap-env:envelope>

Przykład nadajnik SOAP 1/3 Import java.org.apache.soap.*; public class SimpleGenericHTTPSoapClient { public static void main(string args[]) { private String hosturl ; private String datafilename; try { SimpleGenericHTTPSoapClient soapclient = new SimpleGenericHTTPSoapClient(hostURL, datafilename); soapclient.sendsoapmessage(); } } } catch(exception e) { System.out.println(e.getMessage()); }

Przykład nadajnik SOAP 2/3 public void sendsoapmessage() { try { FileReader fr = new FileReader (m_datafilename); javax.xml.parsers.documentbuilder xdb = org.apache.soap.util.xml.xmlparserutils.getxmldocbuilder(); Document doc = xdb.parse (new org.xml.sax.inputsource (fr)); if (doc == null) { throw new org.apache.soap.soapexception(); } Envelope envelope = new Envelope(); Vector headerelements = new Vector(); Element headerelement=doc.createelementns(uri,"jaws:messageheader"); //dodajemy elementy do naglowka headerelements.add(headreelement); Header header = new Header(); header.setheaderentries(headerelements); envelope.setheader(header); Vector bodyelements = new Vector(); bodyelements.add(doc.getdocumentelement ());

Body body = new Body(); body.setbodyentries(bodyelements); envelope.setbody(body); org.apache.soap.messaging.message msg = new org.apache.soap.messaging.message(); msg.send (new java.net.url(m_hosturl), URI, envelope); System.out.println("Sent SOAP Message with Apache HTTP SOAP Client."); System.out.println("Waiting for response..."); org.apache.soap.transport.soaptransport st = msg.getsoaptransport (); BufferedReader br = st.receive (); String line = br.readline(); if(line == null) { System.out.println("HTTP POST was successful. \n"); } else { while (line!= null) { System.out.println (line); line = br.readline(); } } } catch(exception e) { e.printstacktrace(); }

Serwlet odbiornik- przykład 1/3 public class HTTPReceive extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { System.out.println("Received GET request"); response.setstatus(httpservletresponse.sc_bad_request); } public void dopost(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { for(enumeration enum = request.getheadernames(); enum.hasmoreelements(); ) { String header = (String)enum.nextElement(); String value = request.getheader(header); System.out.println(" " + header + " = " + value); } if(request.getcontentlength() > 0) { try{

Serwlet odbiornik- przykład 2/3 java.io.bufferedreader reader = request.getreader(); javax.xml.parsers.documentbuilder xdb = org.apache.soap.util.xml.xmlparserutils.getxmldocbuilder(); Document doc = xdb.parse (new org.xml.sax.inputsource (reader)); if (doc == null) { System.out.println("Doc is null!"); throw new org.apache.soap.soapexception (org.apache.soap.constants.fault_code_client, "parsing error"); } else { Envelope env = Envelope.unmarshall(doc.getDocumentElement()); Body body = env.getbody(); Vector bodyentries = body.getbodyentries(); StringWriter writer = new StringWriter();

Serwlet odbiornik- przykład 3/3 for (Enumeration e = bodyentries.elements(); e.hasmoreelements();) { Element el = (Element) e.nextelement(); org.apache.soap.util.xml.dom2writer. serializeasxml( (Node)el, writer); } System.out.println(writer.toString()); } } catch(exception e) { System.out.println(e); } }

SOAP z załącznikami 1/3 SOAP with attatchments (SwA) Niektóre dane niezbyt odpowiadają językowi XML np. pliki binarne SwA łączy SOAP z formatem MIME Przyjęty model jest dokładnie taki sam, jak model umieszczania załączników w poczcie. Do SwA wykorzystuje się Apache SOAP i zestaw funkcji JavaMail API.

SOAP z załącznikami 2/3 import javax.mail.internet.mimebodypart; if (m_attachment!= null) { BufferedReader attachmentreader = new BufferedReader(new FileReader(m_attachment)); StringBuffer buffer = new StringBuffer(); for (String line = attachmentreader.readline(); line!= null; line = attachmentreader.readline() ) { buffer.append(line); } } MimeBodyPart attachment = new MimeBodyPart(); attachment.settext(buffer.tostring()); attachment.setheader("content-id", "the-attachment"); msg.addbodypart(attachment); msg.send (new java.net.url(m_hosturl), URI, envelope);

SOAP z załącznikami 3/3 W przesyłanym dokumencie znajduje się element z identyfikatorem załącznika np: <attachment href= cid:theattachment /> Kod odbiornika obsługujący załącznik: public void PurchaseOrderWithAttachment(Envelope requestenvelope, SOAPContext requestcontext, SOAPContext responsecontext) Element attachmentel = (Element) el.getelementsbytagname("attachment").item(0); cid = attachmentel.getattribute("href").substring(4); MimeBodyPart attachment = requestcontext.getbodypart(cid);

SOAP-RPC Definiuje model reprezentujący wywołania zdalne RPC Jest niezależny od używanego protokołu W protokole SOAP-RPC treść koperty zawiera nazwę metody i parametry np: <soap-env:body> <ns1:getprice xmlns:ns1= urn:xmethods-bnpricecheck > <isbn xsi:type= xsd:string > 12345</isbn> </ns1:getprice> </soap-env:body>

Typy danych w SOAP-RPC typy proste: int, float, bool, string typy złożone: tablice, struktury

Nadajnik SOAP-RPC 1/2 public static float sendsoaprpcmessage (String url, String isbn) throws Exception { org.apache.soap.rpc.call call = new org.apache.soap.rpc.call (); String encodingstyleuri = org.apache.soap.constants.ns_uri_soap_enc; call.setencodingstyleuri(encodingstyleuri); call.settargetobjecturi ("urn:xmethods-bnpricecheck"); call.setmethodname ("getprice"); Vector params = new Vector (); params.addelement (new org.apache.soap.rpc.parameter("isbn", String.class, isbn, null));

Nadajnik SOAP-RPC 2/2 call.setparams (params); org.apache.soap.rpc.response resp = call.invoke (new java.net.url (url),""); if (resp.generatedfault ()) { org.apache.soap.fault fault = resp.getfault(); System.err.println("Generated fault "); return 0; } else { org.apache.soap.rpc.parameter result = resp.getreturnvalue (); Float FL = (Float) result.getvalue(); return FL.floatValue(); }

SOAP-RPC na serwerze Usługę na serwerze opisuje deskryptor wdrożenia: <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:stock-onhand"> <isd:provider type="java" scope="application" methods="getprice"> <isd:java class= Bank"/> </isd:provider> <isd:faultlistener>org.apache.soap.server.domfaultlistener</isd:f aultlistener> </isd:service>

Obsługa błędów w SOAP Zwracane przez SOAP błędy są obsługiwane za pomocą wyspecjalizowanej koperty SOAP. <soap-env:body> <soap-env:fault> <faultcode> Server </faultcode> <faultstring> </faultstring> <faultactor> </faultactor> <detali> <stactrace> </stactrace> </detail> </soap-env:fault> </soap-env:body>

Wartości błędów zwracanych przez SOAP VersionMismatch (nastąpił konflikt wersji, zgodność wersji determinuje przestrzeń nazw koperty SOAP) MustUnderstand (podelementowi elementu Header nadano taki atrybut= true, a procesor SOAP tego nie rozumie) DTDNotSuported (koperta nie może zawierać definicji DTD) DataEncodingUnknown (nieznana wartość atrybutu encodingstyle) Client (błąd po stronie klienta) Sender w SOAP 1.2 Server (błąd po stronie serwera) Receiver w SOAP 1.2

PODSUMOWANIE SOAP jest prostym uniwersalnym protokołem opartym o XML. Stosuje się go do wymiany dokumentów i zdalnych wywołań RPC. Jest podstawowym elementem Web Services. Jedni uważają, że zaspokaja większość potrzeb, inni że nie zaspokaja nawet minimum.

Materiały David A. Chappell, Tyler Jewell JAVA. Usługi sieciowe O Reilly 2002 http://www.w3.org/tr/soap http://java.sun.com/webservices/

Dziękuję za uwagę.