SOAP Simple Object Access Protocol XML-basierter Nachrichtenaustauschmechanismus Projektbeginn 1998 (Microsoft). Heute: SOAP V1.2 W3C Recommendation http://www.w3.org/2002/ws/ Spezifikation umfasst: SOAP envelope Struktur eine SOAP Nachricht SOAP encoding Serialisierungsregeln für strukturierte Datentypen SOAP binding Framework Bindung an ein bestimmtes Transportprotokoll SOAP RPC Realisierung von RPC mittels SOAP Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-21 SOAP: Envelope <xs:element name="envelope" type="tns:envelope" /> <xs:complextype name="envelope" > <xs:sequence> <xs:element ref="tns:header" minoccurs="0" /> <xs:element ref="tns:body" minoccurs="1" /> </xs:sequence> <xs:anyattribute /> </xs:complextype> Header Blöcke optional Body Block zwingend Namensraum: http://www.w3.org/2003/05/soap-envelope. Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-22
SOAP: Verarbeitungsmodell SOAP Knoten sind für die Bearbeitungen der Nachrichten zuständig. SOAP Interaktion kann mehr als zwei Knoten betreffen. Initial SOAP sender (Client), SOAP intermediary, Ultimate SOAP receiver (Web Service) Jeder Knoten verarbeitet die Header Blöcke die seiner Rolle entsprechen und reicht die Nachricht weiter (role, mustunderstand, relay). Empfängerknoten bearbeitet Body und unadressierte Header Blöcke Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-23 SOAP: Header Headerblöcke enthalten Daten für die Bearbeitung auf SOAP Knoten. Header spezifizieren durch role-attribut, wer diesen verarbeiten soll. Reservierte Rollen: http://www.w3.org/2003/05/soap-envelope/role/none http://www.w3.org/2003/05/soap-envelope/role/next http://www.w3.org/2003/05/soapenvelope/role/ultimatereceiver http://www.w3.org/tr/soap12-part1/#tabpredefroles Das mustunderstand Attribut legt fest ob der SOAP Knoten die Nachricht verstehen können muss. Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-24
SOAP: Body Body enthält Anwendungsdaten: Bsp. GoogleSearch <SOAP-ENV:Body> <ns1:dogooglesearch xmlns:ns1="urn:googlesearch" SOAP-ENV:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"> <key xsi:type="xsd:string">00000000000000000000000000000000</key> <q xsi:type="xsd:string">shrdlu winograd maclisp teletype</q> <start xsi:type="xsd:int">0</start> <maxresults xsi:type="xsd:int">10</maxresults> <filter xsi:type="xsd:boolean">true</filter> <restrict xsi:type="xsd:string"></restrict> <safesearch xsi:type="xsd:boolean">false</safesearch> <lr xsi:type="xsd:string"></lr> <ie xsi:type="xsd:string">latin1</ie> <oe xsi:type="xsd:string">latin1</oe> </ns1:dogooglesearch> </SOAP-ENV:Body> Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-25 SOAP: Fehlerbehandlung <xs:element name="fault" type="tns:fault" /> <xs:complextype name="fault" final="extension"> <xs:annotation> <xs:documentation>fault reporting structure </xs:documentation> </xs:annotation> <xs:sequence> <xs:element name="code" type="tns:faultcode" /> <xs:element name="reason" type="tns:faultreason" /> <xs:element name="node" type="xs:anyuri" minoccurs="0" /> <xs:element name="role" type="xs:anyuri" minoccurs="0" /> <xs:element name="detail" type="tns:detail" minoccurs="0" /> </xs:sequence> Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-26
SOAP Protokollbindung Umsetzung der SOAP Konzepte auf darunterliegendes Transportprotokoll Identifikation des Nachrichtenempfängers wird dem Transportprotokoll überlassen. SOAP HTTP SOAP over Email (SMTP) Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-27 SOAP: RPC RPC Daten werden im SOAP Body übertragen Struktur entspricht den unter SOAP encoding vorgestellten Konzepten Voraussetzungen für RPC: URI des Empfängerknotens Funktions/Methoden Name Funktions/Methoden Signatur Funktionsparameter Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-28
SOAP: RPC Beispiel <env:envelope xmlns:env="http://www.w3.org/2001/09/soap-envelope"> <env:body > <tmp:temp.gettemp_request> xmlns:tmp="http://www.temp.ch/2005/temp" > <tmp:plz>4056</tmp:plz> </tmp:temp.gettemp_request> </env:body></env:envelope> <env:envelope xmlns:env="http://www.w3.org/2001/09/soap-envelope"> <env:body > <tmp:temp.gettemp_response> xmlns:tmp="http://www.temp.ch/2005/temp" > <tmp:datumzeit>14.06.2005 14.15</tmp:datumZeit> <tmp:tempcelsius>19.5</tmp:tempcelsius> </tmp:temp.gettemp_response> </env:body> </env:envelope> Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-29 WSDL WSDL = Web Services Description Language XML-basiert Was? Um welchen Webservice handelt es sich, welche Funktionen werrdne erbracht: interface, porttype WIE? Wie erfolgt der Zugriff auf den Service: binding WO? Welcher URL kann eine Funktion aufrufen: service Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-30
WSDL: Dokumentaufbau <definition> <types> <message> <porttype> <binding> <port> <service> Logisches Wurzelelement, in welchem die verschiedenen Namespaces als Attribute definiert werden Datentypdefinitionen Abstrakte Definition der Nutzdatenpakete, die übertragen werden. Eine Nachricht (Message) entspricht auf dieser Ebene noch nicht einer Methode oder Funktion, wie man vielleicht meinen könnte. Fasst eine Menge von Operationen zusammen Erst hier werden konkrete Protokolle (SOAP, http-get, etc.) und Datenformate für Operationen und Nachrichten definiert. Spezifikation einer Adresse für eine Bindung Aggregation von zusammengehörigen Ports Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-31 WSDL: Typen Die Standardtypen aus XML-Schema sind vorgegeben Eigene Typen können in diesem Types-Abschnitt analog zu XML-Schema und SOAP definiert werden. PositionsInfo_Request Temperatur_Response plz datumzeit tempcelsius Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-32
WSDL: Typen - Beispiel <wsdl:types> <xsd:schema targetnamespace= http://beispiel.com xmlns:xsd= http://www.w3.org/2000/10/xmlschema > <xsd:element name= PositionsInfo_Request > <xsd:complextype> <xsd:sequence> <xsd:element name= plz type= string /> </xsd:sequence> </xsd:complextype> </xsd:element> <xsd:element name= Temperatur_Response > <xsd:complextype> <xsd:sequence> <xsd:element name= datumzeit type= datetime /> <xsd:element name= tempcelsius type= /> </xsd:sequence> </xsd:complextype> </xsd:element> </wsdl:types> Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-33 UDDI White Pages Yellow Pages Green Pages Namensregister Anbieter- Auflistung Kontaktinformationen (Telefon, Email,...) Branchenverzeichnis Suche nach Kategorie (Verkäufer,Dienstart,... ) Technische Details zu den Web Service www.uddi.org 7 Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-34
UDDI UBR = UDDI Business Registry Die UBR ist eine logisch zentralisiertes, physisch aber verteiltes Service mit mehreren Wurzelknoten, die regelmäßig untereinander Daten austauschen Es genügt, wenn ein Service an einer beliebigen Instanz registriert wird, da diese die Registrierung nach oben hin weiterreicht. DNS-ähnlicher Aufbau der Informationsstruktur Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-35 AXIS http://ws.apache.org/axis/index.html AXIS ist eine SOAP engine. Läuft als Servlet z.b. unter TOMCAT. Kann Java Klassen aus WSDL generieren. Einfache Webservices können direkt erzeugt werden (.jws). Komplexere mittels Web Service Deployment Descriptor (WSDD). Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-36
Google Web Service Develop Your Own Applications Using Google: http://www.google.com/apis/ 1.Download Developer s Kit 2.Create a Google Account 3.Write Program Using License key Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-37 Google Beispiel String clientkey = args[0]; String directive = args[1]; String directivearg = args[2]; GoogleSearch s = new GoogleSearch(); s.setkey(clientkey); try { if (directive.equalsignorecase("search")) { s.setquerystring(directivearg); GoogleSearchResult r = s.dosearch(); System.out.println("Google Search Results:"); System.out.println("======================"); System.out.println(r.toString()); } else Helmar Burkhart Webtechnologies (CS211) Lektion 11: Webservices 11-38