XML-Protocols Stand und weitere Arbeiten Mario Jeckle DaimlerChrysler Forschungszentrum Ulm [email protected] [email protected] www.jeckle.de Research and Technology Gliederung I Herausforderung: Kommunikation in heterogenen Umgebungen II Lösungsansatz: XML basierter Remote Procedure Call Implementierung: Simple Object Access Protocol (SOAP) III Ausblick auf den standardisierten SOAP-Nachfolger: W3C's SOAP v1.2 M. Jeckle – XML-Protocols 2001-10-05 2 Research and Technology Die Herausforderung ... CORBA GIOP/IIOP A Proxy-Server RPC Firewall DC OM RD Internet TCP/ IP 0101010101 DHCP-Server COR BA Sockets Mail-Server Internet RM I Mainframe Web-Server DNS-Server FTP Host M. Jeckle – XML-Protocols 2001-10-05 3 Research and Technology Die Herausforderung ... CORBA GIOP/IIOP CORBA GIOP/IIOP 0101010101 DC OM DNS-Server RPC Firewall-Server n I n t t e e r n e r t n e DC OM Proxy-Server RPC I 0101010101 Internet Internet FTP Host Mainframe Web-Server DNS-Server Sockets Mail-Server Mainframe Web-Server RD A RPC Proxy-Server RM I t DHCP-Server COR BA TCP/ IP TCP/ IP Firewall-Server Proxy-Server Firewall-Server Internet DC OM RD A I Internet 0101010101 CORBA DHCP-Server TCP/ IP COR BA DHCP-Server RD A RM Sockets Mail-Server Sockets Mail-Server GIOP/IIOP RM I COR BA CORBA FTP Mainframe GIOP/IIOPHost RM COR BA Sockets Mail-Server Web-Server DHCP-Server I DNS-Server FTP Host Internet Internet DC OM Proxy-Server CORBA GIOP/IIOP RD A RPC Mainframe DNS-Server RM COR BA Sockets I Host DHCP-Server 0101010101 Internet Internet Firewall-Server Internet Internet RD A Mainframe Web-Server CORBA I GIOP/IIOP Web-Server DNS-Server FTP RM Mainframe COR BA Socke ts Host Mail-Server I n I n t t e e r Host t GIOP/IIOP RM I 0101010101 DC OM RPC Firewall-Server Proxy-Server FTP M. Jeckle – XML-Protocols DHCP-Server COR BA Sockets Mail-Server RD A RPC DNS-Server e CORBA Mainframe Web-Server t FTP TCP/ IP Firewall-Server DC OM n Internet TCP/ IP 0101010101 e DHCP-Server Internet Proxy-Server n r DNS-Server RD A DC OM Proxy-Server RPC Firewall-Server TCP/ IP 0101010101 DC OM Proxy-Server DHCP-Server TCP/ IP GIOP/IIOP Mail-Server Sockets Mail-Server CORBA FTP RPC Web-Server RM I COR BA RD A Firewall-Server TCP/ IP 0101010101 Mainframe Host Web-Server DNS-Server FTP Host 2001-10-05 4 Research and Technology Lösungsidee ... Internettechnologie Firewall M. Jeckle – XML-Protocols Firewall 2001-10-05 5 Research and Technology Internettechnologie ... HTTP und XML POST /soap/servlet/rpcrouter HTTP/1.0 POST /soap/servlet/rpcrouter HTTP/1.0 Host: alice:8081 Host: alice:8081 Content-Type: text/xml; charset=utf-8 Content-Type: text/xml; charset=utf-8 Content-Length: 474 Content-Length: 474 SOAPAction: "" SOAPAction: "" <?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> </ns1:add> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> HTTP-Port Web-Server Web-Server HTTP-Port Request Firewall M. Jeckle – XML-Protocols Firewall 2001-10-05 6 Research and Technology Internettechnologie ... HTTP und XML HTTP/1.0 200 OK HTTP/1.0 200text/xml; OK Content-Type: charset=utf-8 Content-Type: text/xml; charset=utf-8 Content-Length: 529 Content-Length: 529 Set-Cookie2: JSESSIONID=tibpjehn11;Version=1;Discard;Path="/soap" Set-Cookie2: JSESSIONID=tibpjehn11;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=tibpjehn11;Path=/soap Set-Cookie: JSESSIONID=tibpjehn11;Path=/soap Servlet-Engine: Tomcat Web Server/3.2.1 Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows 2000 5.0 x86; java.vendor=Sun Microsystems Inc.) (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows 2000 5.0 x86; java.vendor=Sun Microsystems Inc.) <?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:addResponse <ns1:addResponse xmlns:ns1="urn:NumberAdder" xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xmlns:ns2="http://xml.apache.org/xml-soap" <return xmlns:ns2="http://xml.apache.org/xml-soap" xsi:type="ns2:Vector"> <itemxsi:type="ns2:Vector"> xsi:type="xsd:int">3</item> <item xsi:type="xsd:int">3</item> </return> </return> </ns1:addResponse> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> HTTP-Port Web-Server Web-Server HTTP-Port Response Firewall M. Jeckle – XML-Protocols Firewall 2001-10-05 7 Research and Technology Datentypen (über String hinaus) Lesbarer Text (human readable) XM L-S unabhängigkeit ch ProgrammiermodellUnabhängiges neutral Datenschema Plattform- em a CORBA vs. SOAP Gemeinsames Datenschema IDL SOAP IDL Skalierbarkeit (data shipping) Schemaversionierung M. Jeckle – XML-Protocols Objektorientiert Transportprotokoll unabhängigkeit Verteilungsunterstützung 2001-10-05 8 Research and Technology CORBA vs. SOAP Kriterium Plattformunabhängigkeit: CORBA SOAP Realisierung von Client und Server in (nahezu) beliebiger Programmiersprache auf beliebigem Betriebssystem Lesbarer Inhalt: Ausgetauschte Dateninhalte mit Low-End Werkzeugen (wie Texteditoren) verarbeitbar Datentypen: Verarbeitung von programmiersprachlichen Datentypen Definition eigener Inhaltstypen M. Jeckle – XML-Protocols 2001-10-05 9 Research and Technology CORBA vs. SOAP Kriterium CORBA SOAP Verarbeitung großer Datenmengen: Datenbestände größer als der zur Verfügung stehende Hauptspeicher können verarbeitet werden Schemaversionierung: Verarbeitung von Instanzen verschiedener Schemaversionen durch die Applikation Verteilungsunterstützung: •Verteilungstransparenz •Lookup-Funktionalität •Authentifizierung und Sicherheit •Transaktionsunterstützung M. Jeckle – XML-Protocols 2001-10-05 10 Research and Technology CORBA vs. SOAP Kriterium CORBA SOAP Nachrichtenübermittlung Informationstransfer im Stile von Datagrammen (keine RPC-Semantik) Programmiermodellunabhängigkeit Einsetzbarkeit in verschiedenen Programmiersprachen; Paradigmenneutralität Transportprotokollunabhängigkeit Transparente Verwendung verschiedener (Transport- oder Sitzungs-)Protokolle M. Jeckle – XML-Protocols 2001-10-05 11 Research and Technology SOAP vs. CORBA – Antwortzeitverhalten (WAN) 60 sec #Objekte: 100 Objektgröße: 512 Byte Roundtrip-Zeit: 300ms Antwortzeit 50 40 30 20 10 200 M. Jeckle – XML-Protocols 400 600 Datentransferrate 800 1000 kBit/sec 2001-10-05 12 Research and Technology SOAP vs. CORBA – Antwortzeitverhalten (LAN) 60 sec #Objekte: 100 Objektgröße: 512 Byte Roundtrip-Zeit: 170ms Antwortzeit 50 40 30 20 10 200 M. Jeckle – XML-Protocols 400 600 Datentransferrate 800 1000 kBit/sec 2001-10-05 13 Research and Technology XML-basierte RPC-Mechanismen: SOAP/XMLP vs. RMI Programmiermodellneutral Sprachunabhängig LS XM Lesbarer Text (human readable) Firewallüberwindung Hauptnutzung: B2B asynchron Zentrale Registrierungsinstanz synchron ch em a Plattformunabhängigkeit Typsystem Hauptnutzung: A2A SOAP/ XMLP Objektorientiert Transportprotokoll Verbosität unabhängigkeit M. Jeckle – XML-Protocols Effiziente Binärrepräsentation Verteilungsunterstützung 2001-10-05 14 Research and Technology Was ist SOAP? "The Simple Object Access Protocol is a protocol specification for invoking methods on servers, services, components and objects. SOAP codifies the existing practice of using XML and HTTP as a method invocation mechanism. The SOAP specification mandates a small number of HTTP headers that facilitate firewall/proxy filtering. The SOAP specification also mandates an XML vocabulary that is used for representing method parameters, return values, and exceptions." (DevelopMentor) Ziele: •einfacher offener Kommunikationsmechanismus auf Basis von Internet-Standards •Erweiterbares XML-Format M. Jeckle – XML-Protocols 2001-10-05 15 Research and Technology Von SOAP zu XML-Protocols ... 1st Working Draft W3C Workshop web services SOAP v1.2 Working Draft W3C's XML Protocol Activity -- Protocol Working Group SOAP/1.1 SOAP W3C Note SOAP/1.0 XML-RPC 1999-06 1999-11 M. Jeckle – XML-Protocols 2000-05 2001-04 2000-09 2001-03 2001-04 2001-06 2001-10-05 16 Research and Technology SOAP-Architektur SOAP-Envelope Beschreibung einer XML-codierten Nachricht Envelope Header Body ANY ANY (XML-Namensräume, etc.) SOAP-Transport (Binding Framework) Richtlinien zur Nutzung von Transportprotokollen (Protokollunabhängigkeit) SOAP-Codierungsrichtlinien Mechanismus zur Überführung der Applikationsdatenstrukturen in XML SOAP-Nachrichtendarstellung Richtlinien für die Darstellung aufgerufener Dienste M. Jeckle – XML-Protocols 2001-10-05 17 Research and Technology SOAP und XML Transportprotokoll (z.B. HTTP) Serialisierung und Encoding des Aufrufs SOAP Envelope W3C's XML-Schema XML v1.0, 2nd edition + Namespaces M. Jeckle – XML-Protocols 2001-10-05 18 Research and Technology Ablauf eines SOAP-Aufrufs NumberAdderCall Parameters number1 value = 1 DienstNutzer SOAP Endpoint number2 value = 2 <?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <?xml version='1.0' encoding='UTF-8'?> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" <SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <SOAP-ENV:Body> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" <ns1:add xmlns:ns1="urn:NumberAdder" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <number1 xsi:type="xsd:int">1</number1> <ns1:add xmlns:ns1="urn:NumberAdder" <number2 xsi:type="xsd:int">2</number2> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> </ns1:add> <number1 xsi:type="xsd:int">1</number1> </SOAP-ENV:Body> <number2 xsi:type="xsd:int">2</number2> </SOAP-ENV:Envelope> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <?xml version='1.0' encoding='UTF-8'?> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" <SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <SOAP-ENV:Body> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" <ns1:add xmlns:ns1="urn:NumberAdder" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <number1 xsi:type="xsd:int">1</number1> <ns1:add xmlns:ns1="urn:NumberAdder" <number2 xsi:type="xsd:int">2</number2> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> </ns1:add> <number1 xsi:type="xsd:int">1</number1> </SOAP-ENV:Body> <number2 xsi:type="xsd:int">2</number2> </SOAP-ENV:Envelope> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope> NumberAdderCall Parameters number1 value = 1 SOAP-Schicht number2 value = 2 SOAP-Schicht Transportprotokoll (z.B. HTTP) Transportprotokoll (z.B. HTTP) Serialisierung und Encoding des Aufrufs Serialisierung und Encoding des Aufrufs SOAP Envelope SOAP Envelope W3C's XML-Schema W3C's XML-Schema XML v1.0, 2nd edition + Namespaces XML v1.0, 2nd edition + Namespaces M. Jeckle – XML-Protocols DienstErbringer 2001-10-05 19 Research and Technology SOAP am Beispiel ... ... ein einfacher Rechner NumberAdderCall Parameters number1 value = 1 DienstNutzer number2 value = 2 11++22 <?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <?xml version='1.0' encoding='UTF-8'?> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" <SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <SOAP-ENV:Body> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" <ns1:add xmlns:ns1="urn:NumberAdder" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <number1 xsi:type="xsd:int">1</number1> <ns1:add xmlns:ns1="urn:NumberAdder" <number2 xsi:type="xsd:int">2</number2> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> </ns1:add> <number1 xsi:type="xsd:int">1</number1> </SOAP-ENV:Body> <number2 xsi:type="xsd:int">2</number2> </SOAP-ENV:Envelope> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <?xml version='1.0' encoding='UTF-8'?> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" <SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <SOAP-ENV:Body> xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" <ns1:add xmlns:ns1="urn:NumberAdder" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <number1 xsi:type="xsd:int">1</number1> <ns1:add xmlns:ns1="urn:NumberAdder" <number2 xsi:type="xsd:int">2</number2> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> </ns1:add> <number1 xsi:type="xsd:int">1</number1> </SOAP-ENV:Body> <number2 xsi:type="xsd:int">2</number2> </SOAP-ENV:Envelope> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope> NumberAdderCall SOAP-Schicht 33 Parameters number1 value = 1 number2 value = 2 SOAP-Schicht Transportprotokoll (z.B. HTTP) Transportprotokoll (z.B. HTTP) Serialisierung und Encoding des Aufrufs Serialisierung und Encoding des Aufrufs SOAP Envelope SOAP Envelope W3C's XML-Schema W3C's XML-Schema XML v1.0, 2nd edition + Namespaces XML v1.0, 2nd edition + Namespaces M. Jeckle – XML-Protocols DienstErbringer 2001-10-05 20 Research and Technology Anforderungen an XML Protocols (SOAP v1.2) Anforderungen berücksichtigte Allgemeines Einfachheit und Stabilität Datenkapselung und Erweiterbarkeit RPC-Vermittler Datenrepräsentation Protokollbindung RPC-Konvention M. Jeckle – XML-Protocols unberücksichtigte Direkte Behandlung binärer Daten Kompaktifizierung und Kompression Transport- und Vermittlungsspezifika Applikationssemantik (Transaktionen, Sicherheit) Dienst-Metadaten (Service Directory) 2001-10-05 21 Research and Technology Anforderungen an XML Protocols: Allgemeines •Keine Festlegung auf •Programmiermodell (Sprache oder Paradigma) •Kommunikationsmechanismus (protocol binding) •Kommunikationsszenarien (one-way, request-response, RPC, ...) •Leichtgewichtige Spezifikation •minimale Anzahl zwingender Eigenschaften •Orthogonalität optionaler Eigenschaften •Kommunikation zwischen Partnern ohne vorheriges Wissen übereinander M. Jeckle – XML-Protocols 2001-10-05 22 Research and Technology Anforderungen an XMLP: Einfachheit und Stabilität •XML-Schemabeschreibung eines Umschlages (envelope) zur Kapselung der transportierten Daten •Definition eines Verarbeitungsmodells für den Umschlag; Berücksichtigung möglicher Fehlersituationen •Einbettungsszenarien für Applikationsinformation in den Umschlag: •Umschlag enthält Applikationsinformation physisch •Applikationsinformation wird extern gehalten und durch den Inhalt des Umschlages referenziert •Umschlag kann mehrere Verarbeitungsanweisungen enthalten •Umschlag kann mehrere Nutzinformationsblöcke enthalten M. Jeckle – XML-Protocols 2001-10-05 23 Research and Technology Anforderungen an XMLP: Datenkapselung und Erweiterbarkeit •Einsetzbarkeit über Organisationsgrenzen hinweg •Modularität und Erweiterbarkeit durch Schichtenbildung als Basis einer langlebigen und zukunftssicheren Spezifikation •Formulierung der Spezifikation so, daß Konformitätstests einfach durchzuführen sind; somit für Implementierer einfache Möglichkeit zur Gewährleistung der Konformität •Dezentrale unabgestimmte Erweiterungsmöglichkeit •Einfache Einsetzbarkeit in Systemen die bereits XML (insbesondere XML-Schema und XML-Namensräume) unterstützen •Einsetzbarkeit auf Endgeräten mit beschränkten Ressourcen M. Jeckle – XML-Protocols 2001-10-05 24 Research and Technology Anforderungen an XMLP: RPC-Vermittler •Vermittler (intermediaries / actors) können verschiedene Rollen auf dem Weg der SOAP-Nachricht zwischen Sender und Empfänger erfüllen •Standardisierte Rollen: • none keine Verarbeitung des Inhalts durch den Prozessor, außer eine andere schon durch ihn verarbeitete Nachricht verweist auf diese Transportvermittler (transport intermediary), operiert als Teil der Bindung an das Transportprotokoll • next Verarbeitung des Inhalts durch jeden Prozessor (zwingend) Verarbeitender Vermittler (processing intermediary), vollständiger SOAP-Prozessor • anonymous Verarbeitung des Inhalts durch den Ziel-Prozessor M. Jeckle – XML-Protocols 2001-10-05 25 Research and Technology Anforderungen an XMLP: Datenrepräsentation •Orthogonalität zwischen Datendarstellung (data representation) und Dateneinbettung (data encapsulation) in eine SOAP-Nachricht •Unterstützung der XML-Schematypen simple-types und complex-types für die Datenrepräsentation •Datenrepräsentation muß Instanzen von nicht XML-Schema-basierenden Modellen (z.B.: Objektgraphen, gerichtete Graphen) encodieren können •Referenzierung von nicht-serialisierten Daten durch Uniform Resource Identifier (URI) •Darstellung geschachtelter Arrays M. Jeckle – XML-Protocols 2001-10-05 26 Research and Technology Anforderungen an XMLP, Verwirklichung in SOAP v1.2 XML protocol binding Sitzungsschicht (Session Layer) Transportschicht (Transport Layer) Netzschicht (Network Layer) Sicherungsschicht (Data Link Layer) Bitübertragungsschicht (Physical Layer) M. Jeckle – XML-Protocols XML Protocol MIME HTTP BEEP SMTP HTTPS TCP UDP IP (v4, v6), X.25, SPX, IPX HDLC, SLIP, PPP, Ethernet, IEEE 802.x analoges Modem, V. 90, ISDN, ADSL 2001-10-05 27 Research and Technology Anforderungen an XMLP: Protokoll-Bindung •HTTP-Binding wird durch XMLP-Arbeitsgruppe erarbeitet •Beliebige andere Protokollbindungen sind jedoch ohne weiteres möglich •Mapping auf existierende Leitungsprotokolle (z.B.: HTTP, BEEP) kann zu Problemen hinsichtlich Sicherheit, Skalierbarkeit oder Semantik führen •SOAP-Nachricht kann durch Vermittlungsinstanzen über verschiedene Protokolle transportiert werden •Nutzung von gesicherten Protokollen (z.B.: secure HTTP, SSL, S/MIME) explizit möglich M. Jeckle – XML-Protocols 2001-10-05 28 Research and Technology Anforderungen an XMLP: RPC-Konventionen •Vollständige und eindeutige Identifikation des aufgerufenen Dienstes, Objektes oder Methode durch eine URI •Unterstützung des Zusammenfügens von Aufruf und Antwort, falls dies nicht durch das gebundene Protokoll erledigt wird •Parameterübergabe und Transport •Protokollunabhäniger Mechanismus zur Fehlerrückgabe in Ergebnisnachricht M. Jeckle – XML-Protocols 2001-10-05 29 Research and Technology Anatomie einer SOAP/1.1-Nachricht SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope SOAP-Header .. . Individuelle SOAP-Header SOAP-Body (XML-Nachricht) M. Jeckle – XML-Protocols 2001-10-05 30 Research and Technology Ausblick auf die SOAP-Standardisierung: SOAP v1.2 Anatomie einer XML-Nachricht SOAP-Nachricht SOAP-Header .. . .. . SOAP-Block SOAP-Body .. . SOAP-Block M. Jeckle – XML-Protocols 2001-10-05 31 Research and Technology Abstraktes Modell der XML Protocols (XMLP) XML-Knoten (Ursprungssender) XML-Knoten (Empfänger und Sender) XML-Knoten (endgültiges Ziel) XMLP Applikation1 XMLP Applikation1 XMLP Applikation1 Actor1 Actor2 XMLP Block1 XMLP Block2 Actor6 Actor3 Actor4 XMLP Block3 XMLP Block4 Actor7 Actor8 Actor5 XMLP Processor M. Jeckle – XML-Protocols XMLP Nachricht XMLP Processor XMLP Nachricht XMLP Processor 2001-10-05 32 Research and Technology Kritik am Ansatz •XML zur Inhaltsdarstellung •zusätzlicher Verarbeitungsaufwand beim Empfänger (XML-Parsing) •Informationsdarstellung platzraubender als optimierte Binärformate •HTTP als Transportprotokoll •Probleme bei Transaktionsverarbeitung durch fehlende Zustandsinformation Lösung: anderes Transportprotokoll verwenden (seit SOAP/1.1 möglich) •Keine explizite Berücksichtigung von Sicherheit •... nicht im durch SOAP angesprochenen Problembereich •Lösung: Nutzung von HTTPS, S-HTTP möglich M. Jeckle – XML-Protocols 2001-10-05 33 Research and Technology Referenzen Allgemeines: •http://xml.coverpages.org/soap.html •http://www.sun.com/software/xml/developers/xp/;$sessionid$XIBMMEQAAE1XRAMTA1LU5YQ •http://www.w3.org/TR/SOAP/ •http://www.w3.org/2000/03/29-XML-protocol-matrix Artikel: •SOAP – die Lösung aller Interoperabilitätsprobleme? OBJEKTspektrum, Nr. 6, Nov./Dez. 2000. •Kommunikation mit dem Simple Object Access Protocol Java Spektrum, Nr. 2, Mrz./Apr. 2001. SOAP-Implementierungen: •http://xml.apache.org/soap/index.html •http://xml.apache.org/axis/index.html •http://msdn.microsoft.com/xml/general/soaptemplate.asp •http://msdn.microsoft.com/net/ •http://alphaworks.ibm.com •Vergleich MS SOAP vs. IBM/Apache SOAP: http://windows.oreilly.com/news/soap_0800.html M. Jeckle – XML-Protocols 2001-10-05 34 Research and Technology M. Jeckle – XML-Protocols 2001-10-05 35 Research and Technology Anhang Realisierung eines SOAP-basierten Dienstes M. Jeckle – XML-Protocols 2001-10-05 36 Research and Technology SOAP am Beispiel ... ... ein einfacher Rechner. Design des Dienst-Anbieters. Add add (number1 : int, number2 : int) : int M. Jeckle – XML-Protocols 2001-10-05 37 Research and Technology SOAP am Beispiel ... Apache SOAP Architektur M. Jeckle – XML-Protocols 2001-10-05 38 Research and Technology SOAP am Beispiel ... Lebenszyklus eines SOAP-Services execute deploy service undeployed M. Jeckle – XML-Protocols deployed undeploy service 2001-10-05 39 Research and Technology SOAP am Beispiel ... Lebenszyklus eines SOAP-Services Dienst-Nutzer Dienst-Erbringer SOAP-Management Service deploy use response response undeploy response M. Jeckle – XML-Protocols 2001-10-05 40 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Erbringers import importjava.util.*; java.util.*; import importjava.lang.*; java.lang.*; public publicclass classAdd Add {{ public publicVector Vectoradd(int add(intnumber1, number1,int intnumber2) number2) {{ System.out.println("adding System.out.println("adding..."); ..."); return return(number1 (number1++number2); number2); } }//add() //add() } }//class //classAdd Add M. Jeckle – XML-Protocols 2001-10-05 41 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers import importjava.util.*; java.util.*; import importjava.net.*; java.net.*; import importorg.apache.soap.*; org.apache.soap.*; import importorg.apache.soap.rpc.*; org.apache.soap.rpc.*; public publicclass classCallAdd CallAdd {{ public publicstatic staticvoid voidmain(String[] main(String[]args) args)throws throwsException Exception {{ URL URLurl url==new newURL("http://alice:8081/soap/servlet/rpcrouter"); URL("http://alice:8081/soap/servlet/rpcrouter"); Call CallmyCall myCall==new newCall(); Call(); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add"); myCall.setMethodName("add"); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector Vectorparams params==new newVector(); Vector(); params.addElement(new params.addElement(newParameter("number1", Parameter("number1",Integer.class, Integer.class,"1", "1",null)); null)); params.addElement(new params.addElement(newParameter("number2", Parameter("number2",Integer.class, Integer.class,"2", "2",null)); null)); myCall.setParams(params); M. JecklemyCall.setParams(params); – XML-Protocols 2001-10-05 42 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs import importjava.util.*; java.util.*; import importjava.net.*; java.net.*; import importorg.apache.soap.*; org.apache.soap.*; import importorg.apache.soap.rpc.*; org.apache.soap.rpc.*; SOAP Endpoint / Adresse des Dienst-Erbringers public publicclass classCallAdd CallAdd {{ public publicstatic staticvoid voidmain(String[] main(String[]args) args)throws throwsException Exception {{ URL URLurl url==new newURL("http://alice:8081/soap/servlet/rpcrouter"); URL("http://alice:8081/soap/servlet/rpcrouter"); Call CallmyCall myCall==new newCall(); Call(); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add"); myCall.setMethodName("add"); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector Vectorparams params==new newVector(); Vector(); params.addElement(new params.addElement(newParameter("number1", Parameter("number1",Integer.class, Integer.class,"1", "1",null)); null)); params.addElement(new params.addElement(newParameter("number2", Parameter("number2",Integer.class, Integer.class,"2", "2",null)); null)); myCall.setParams(params); M. JecklemyCall.setParams(params); – XML-Protocols 2001-10-05 43 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs import importjava.util.*; java.util.*; import importjava.net.*; java.net.*; import importorg.apache.soap.*; org.apache.soap.*; import importorg.apache.soap.rpc.*; org.apache.soap.rpc.*; Das Aufruf-Objekt public publicclass classCallAdd CallAdd {{ public publicstatic staticvoid voidmain(String[] main(String[]args) args)throws throwsException Exception {{ URL URLurl url==new newURL("http://alice:8081/soap/servlet/rpcrouter"); URL("http://alice:8081/soap/servlet/rpcrouter"); Call CallmyCall myCall==new newCall(); Call(); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add"); myCall.setMethodName("add"); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector Vectorparams params==new newVector(); Vector(); params.addElement(new params.addElement(newParameter("number1", Parameter("number1",Integer.class, Integer.class,"1", "1",null)); null)); params.addElement(new params.addElement(newParameter("number2", Parameter("number2",Integer.class, Integer.class,"2", "2",null)); null)); myCall.setParams(params); M. JecklemyCall.setParams(params); – XML-Protocols 2001-10-05 44 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs import importjava.util.*; java.util.*; import importjava.net.*; java.net.*; import importorg.apache.soap.*; org.apache.soap.*; import importorg.apache.soap.rpc.*; org.apache.soap.rpc.*; Definition des benutzten Dienstes public publicclass classCallAdd CallAdd {{ public publicstatic staticvoid voidmain(String[] main(String[]args) args)throws throwsException Exception {{ URL URLurl url==new newURL("http://alice:8081/soap/servlet/rpcrouter"); URL("http://alice:8081/soap/servlet/rpcrouter"); Call CallmyCall myCall==new newCall(); Call(); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add"); myCall.setMethodName("add"); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector Vectorparams params==new newVector(); Vector(); params.addElement(new params.addElement(newParameter("number1", Parameter("number1",Integer.class, Integer.class,"1", "1",null)); null)); params.addElement(new params.addElement(newParameter("number2", Parameter("number2",Integer.class, Integer.class,"2", "2",null)); null)); myCall.setParams(params); M. JecklemyCall.setParams(params); – XML-Protocols 2001-10-05 45 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs import importjava.util.*; java.util.*; import importjava.net.*; java.net.*; import importorg.apache.soap.*; org.apache.soap.*; import importorg.apache.soap.rpc.*; org.apache.soap.rpc.*; Definition der benutzten Methode public publicclass classCallAdd CallAdd {{ public publicstatic staticvoid voidmain(String[] main(String[]args) args)throws throwsException Exception {{ URL URLurl url==new newURL("http://alice:8081/soap/servlet/rpcrouter"); URL("http://alice:8081/soap/servlet/rpcrouter"); Call CallmyCall myCall==new newCall(); Call(); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add"); myCall.setMethodName("add"); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector Vectorparams params==new newVector(); Vector(); params.addElement(new params.addElement(newParameter("number1", Parameter("number1",Integer.class, Integer.class,"1", "1",null)); null)); params.addElement(new params.addElement(newParameter("number2", Parameter("number2",Integer.class, Integer.class,"2", "2",null)); null)); myCall.setParams(params); M. JecklemyCall.setParams(params); – XML-Protocols 2001-10-05 46 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs import importjava.util.*; java.util.*; import importjava.net.*; java.net.*; import importorg.apache.soap.*; org.apache.soap.*; import importorg.apache.soap.rpc.*; org.apache.soap.rpc.*; Auswahl der Codierungsrichtline public publicclass classCallAdd CallAdd {{ public publicstatic staticvoid voidmain(String[] main(String[]args) args)throws throwsException Exception {{ URL URLurl url==new newURL("http://alice:8081/soap/servlet/rpcrouter"); URL("http://alice:8081/soap/servlet/rpcrouter"); Call CallmyCall myCall==new newCall(); Call(); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add"); myCall.setMethodName("add"); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector Vectorparams params==new newVector(); Vector(); params.addElement(new params.addElement(newParameter("number1", Parameter("number1",Integer.class, Integer.class,"1", "1",null)); null)); params.addElement(new params.addElement(newParameter("number2", Parameter("number2",Integer.class, Integer.class,"2", "2",null)); null)); myCall.setParams(params); M. JecklemyCall.setParams(params); – XML-Protocols 2001-10-05 47 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs import importjava.util.*; java.util.*; import importjava.net.*; java.net.*; import importorg.apache.soap.*; org.apache.soap.*; import importorg.apache.soap.rpc.*; org.apache.soap.rpc.*; Objekt zur Aufnahme der Übergabeparameter public publicclass classCallAdd CallAdd {{ public publicstatic staticvoid voidmain(String[] main(String[]args) args)throws throwsException Exception {{ URL URLurl url==new newURL("http://alice:8081/soap/servlet/rpcrouter"); URL("http://alice:8081/soap/servlet/rpcrouter"); Call CallmyCall myCall==new newCall(); Call(); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add"); myCall.setMethodName("add"); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector Vectorparams params==new newVector(); Vector(); params.addElement(new params.addElement(newParameter("number1", Parameter("number1",Integer.class, Integer.class,"1", "1",null)); null)); params.addElement(new params.addElement(newParameter("number2", Parameter("number2",Integer.class, Integer.class,"2", "2",null)); null)); myCall.setParams(params); M. JecklemyCall.setParams(params); – XML-Protocols 2001-10-05 48 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs import importjava.util.*; java.util.*; import importjava.net.*; java.net.*; import importorg.apache.soap.*; org.apache.soap.*; import importorg.apache.soap.rpc.*; org.apache.soap.rpc.*; Erzeugung der Übergabeparameter als Objekte public publicclass classCallAdd CallAdd {{ public publicstatic staticvoid voidmain(String[] main(String[]args) args)throws throwsException Exception {{ URL URLurl url==new newURL("http://alice:8081/soap/servlet/rpcrouter"); URL("http://alice:8081/soap/servlet/rpcrouter"); Call CallmyCall myCall==new newCall(); Call(); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add"); myCall.setMethodName("add"); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector Vectorparams params==new newVector(); Vector(); params.addElement(new params.addElement(newParameter("number1", Parameter("number1",Integer.class, Integer.class,"1", "1",null)); null)); params.addElement(new params.addElement(newParameter("number2", Parameter("number2",Integer.class, Integer.class,"2", "2",null)); null)); myCall.setParams(params); M. JecklemyCall.setParams(params); – XML-Protocols 2001-10-05 49 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs import importjava.util.*; java.util.*; import importjava.net.*; java.net.*; import importorg.apache.soap.*; org.apache.soap.*; import importorg.apache.soap.rpc.*; org.apache.soap.rpc.*; Übergabeparameter-Objekt dem Aufruf hinzufügen public publicclass classCallAdd CallAdd {{ public publicstatic staticvoid voidmain(String[] main(String[]args) args)throws throwsException Exception {{ URL URLurl url==new newURL("http://alice:8081/soap/servlet/rpcrouter"); URL("http://alice:8081/soap/servlet/rpcrouter"); Call CallmyCall myCall==new newCall(); Call(); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add"); myCall.setMethodName("add"); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector Vectorparams params==new newVector(); Vector(); params.addElement(new params.addElement(newParameter("number1", Parameter("number1",Integer.class, Integer.class,"1", "1",null)); null)); params.addElement(new params.addElement(newParameter("number2", Parameter("number2",Integer.class, Integer.class,"2", "2",null)); null)); myCall.setParams(params); M. JecklemyCall.setParams(params); – XML-Protocols 2001-10-05 50 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Durchführung des Aufrufs Response Responseresp; resp; try try {{ resp resp==myCall.invoke(url, myCall.invoke(url,null); null); } }//try //try catch(SOAPException catch(SOAPExceptione)e) {{ System.err.println("Caught System.err.println("CaughtSOAPException SOAPException("("++ e.getFaultCode e.getFaultCode()()++"):"):""++ e.getMessage e.getMessage()); ()); return; return; } }//catch //catch ifif(!resp.generatedFault()) (!resp.generatedFault()) {{ Parameter Parameterret ret==resp.getReturnValue(); resp.getReturnValue(); Object Objectvalue value==ret.getValue(); ret.getValue(); System.out.println("result:" System.out.println("result:"++value); value); } }//if //if ...... M. Jeckle – XML-Protocols 2001-10-05 51 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Durchführung des Aufrufs Response Responseresp; resp; try try {{ Rückgabeobjekt resp = myCall.invoke(url, null); resp = myCall.invoke(url, null); } }//try //try catch(SOAPException catch(SOAPExceptione)e) {{ System.err.println("Caught System.err.println("CaughtSOAPException SOAPException("("++ e.getFaultCode e.getFaultCode()()++"):"):""++ e.getMessage e.getMessage()); ()); return; return; } }//catch //catch ifif(!resp.generatedFault()) (!resp.generatedFault()) {{ Parameter Parameterret ret==resp.getReturnValue(); resp.getReturnValue(); Object Objectvalue value==ret.getValue(); ret.getValue(); System.out.println("result:" System.out.println("result:"++value); value); } }//if //if ...... M. Jeckle – XML-Protocols 2001-10-05 52 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Durchführung des Aufrufs Response Responseresp; resp; try try {{ Aufruf des Dienstes resp = myCall.invoke(url, null); resp = myCall.invoke(url, null); } }//try //try catch(SOAPException catch(SOAPExceptione)e) {{ System.err.println("Caught System.err.println("CaughtSOAPException SOAPException("("++ e.getFaultCode e.getFaultCode()()++"):"):""++ e.getMessage e.getMessage()); ()); return; return; } }//catch //catch ifif(!resp.generatedFault()) (!resp.generatedFault()) {{ Parameter Parameterret ret==resp.getReturnValue(); resp.getReturnValue(); Object Objectvalue value==ret.getValue(); ret.getValue(); System.out.println("result:" System.out.println("result:"++value); value); } }//if //if ...... M. Jeckle – XML-Protocols 2001-10-05 53 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Durchführung des Aufrufs Response Responseresp; resp; try try {{ Fehlerbehandlung falls resp = myCall.invoke(url, null); resp = myCall.invoke(url, null); } }//try //try catch(SOAPException catch(SOAPExceptione)e) {{ System.err.println("Caught System.err.println("CaughtSOAPException SOAPException("("++ e.getFaultCode e.getFaultCode()()++"):"):""++ e.getMessage e.getMessage()); ()); return; return; } }//catch //catch ifif(!resp.generatedFault()) (!resp.generatedFault()) {{ Parameter Parameterret ret==resp.getReturnValue(); resp.getReturnValue(); Object Objectvalue value==ret.getValue(); ret.getValue(); System.out.println("result:" System.out.println("result:"++value); value); } }//if //if ...... M. Jeckle – XML-Protocols notwendig 2001-10-05 54 Research and Technology SOAP am Beispiel ... Implementierung des Dienst-Nutzers. Durchführung des Aufrufs Response Responseresp; resp; try try Extraktion des Ergebnisses {{ und Ausgabe resp resp==myCall.invoke(url, myCall.invoke(url,null); null); } }//try //try catch(SOAPException catch(SOAPExceptione)e) {{ System.err.println("Caught System.err.println("CaughtSOAPException SOAPException("("++ e.getFaultCode e.getFaultCode()()++"):"):""++ e.getMessage e.getMessage()); ()); return; return; } }//catch //catch ifif(!resp.generatedFault()) (!resp.generatedFault()) {{ Parameter Parameterret ret==resp.getReturnValue(); resp.getReturnValue(); Object Objectvalue value==ret.getValue(); ret.getValue(); System.out.println("result:" System.out.println("result:"++value); value); } }//if //if ...... M. Jeckle – XML-Protocols 2001-10-05 55 Research and Technology SOAP am Beispiel ... Dienst-Nutzer Dienst-Erbringer SOAP-Management Service deploy Aufruf des Dienstes POST POST/soap/servlet/rpcrouter /soap/servlet/rpcrouterHTTP/1.0 HTTP/1.0 Host: Host:alice:8081 alice:8081 Content-Type: Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 Content-Length: Content-Length:474 474 SOAPAction: SOAPAction:"""" <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:add <ns1:addxmlns:ns1="urn:NumberAdder" xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 <number1xsi:type="xsd:int">1</number1> xsi:type="xsd:int">1</number1> <number2 <number2xsi:type="xsd:int">2</number2> xsi:type="xsd:int">2</number2> </ns1:add> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 </SOAP-ENV:Envelope> use response response undeploy response 56 Research and Technology SOAP am Beispiel ... Aufruf des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope POST POST /soap/servlet/rpcrouter HTTP/1.0 POST/soap/servlet/rpcrouter /soap/servlet/rpcrouterHTTP/1.0 HTTP/1.0 SOAP-Header Host: Host: alice:8081 Individuelle Host:alice:8081 alice:8081 Ausgewählte Codierungsrichtline SOAP-Header Content-Type: Content-Type: text/xml; charset=utf-8 Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 SOAP-Body Content-Length: 474 Content-Length: 474 (XML-Nachricht) Content-Length: 474 SOAPAction: SOAPAction: SOAPAction:"""" "" <?xml version='1.0' encoding='UTF-8'?> <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> </ns1:add> </ns1:add> </ns1:add> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 </SOAP-ENV:Envelope> 57 Research and Technology SOAP am Beispiel ... Aufruf des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope POST POST /soap/servlet/rpcrouter HTTP/1.0 POST/soap/servlet/rpcrouter /soap/servlet/rpcrouterHTTP/1.0 HTTP/1.0 SOAP-Header Host: Host: alice:8081 Individuelle Host:alice:8081 alice:8081 Name, Typ und Wert der SOAP-Header Content-Type: Content-Type: text/xml; charset=utf-8 Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 SOAP-Body Übergabeparameter Content-Length: 474 Content-Length: 474 (XML-Nachricht) Content-Length: 474 SOAPAction: SOAPAction: SOAPAction:"""" "" <?xml version='1.0' encoding='UTF-8'?> <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> </ns1:add> </ns1:add> </ns1:add> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 </SOAP-ENV:Envelope> 58 Research and Technology SOAP am Beispiel ... Ergebnis des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope SOAP-Header HTTP/1.0 HTTP/1.0200 200OK OK Individuelle Content-Type: Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 SOAP-Header Content-Length: 447 Content-Length: 447 SOAP-Body Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" (XML-Nachricht) Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: Set-Cookie:JSESSIONID=9ekj42d5b1;Path=/soap JSESSIONID=9ekj42d5b1;Path=/soap Servlet-Engine: Servlet-Engine:Tomcat TomcatWeb WebServer/3.2.1 Server/3.2.1(JSP (JSP1.1; 1.1;Servlet Servlet2.2; 2.2;Java Java1.3.0; 1.3.0; Windows WindowsNT NT4.0 4.0x86; x86;java.vendor=Sun java.vendor=SunMicrosystems MicrosystemsInc.) Inc.) <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <SOAP-ENV:Envelope <SOAP-ENV:Envelopexmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" <ns1:addResponse xmlns:ns1="urn:NumberAdder" <ns1:addResponse xmlns:ns1="urn:NumberAdder" <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> <return xsi:type="xsd:int">3</return> <return xsi:type="xsd:int">3</return> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </ns1:addResponse> </ns1:addResponse> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 59 Research and Technology SOAP am Beispiel ... Ergebnis des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope SOAP-Header HTTP/1.0 HTTP/1.0200 200OK OK Individuelle Content-Type: charset=utf-8 Content-Type:text/xml; text/xml; charset=utf-8 Dienst-Erbringer SOAP-Header Content-Length: 447 Content-Length: 447 SOAP-Body Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" (XML-Nachricht) Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: Set-Cookie:JSESSIONID=9ekj42d5b1;Path=/soap JSESSIONID=9ekj42d5b1;Path=/soap Servlet-Engine: Servlet-Engine:Tomcat TomcatWeb WebServer/3.2.1 Server/3.2.1(JSP (JSP1.1; 1.1;Servlet Servlet2.2; 2.2;Java Java1.3.0; 1.3.0; Windows WindowsNT NT4.0 4.0x86; x86;java.vendor=Sun java.vendor=SunMicrosystems MicrosystemsInc.) Inc.) <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <SOAP-ENV:Envelope <SOAP-ENV:Envelopexmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" <ns1:addResponse xmlns:ns1="urn:NumberAdder" <ns1:addResponse xmlns:ns1="urn:NumberAdder" <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> <return xsi:type="xsd:int">3</return> <return xsi:type="xsd:int">3</return> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </ns1:addResponse> </ns1:addResponse> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 60 Research and Technology SOAP am Beispiel ... Ergebnis des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope SOAP-Header HTTP/1.0 HTTP/1.0200 200OK OK Individuelle Content-Type: charset=utf-8 Content-Type:text/xml; text/xml; charset=utf-8 Typ und Wert des SOAP-Header Content-Length: 447 Content-Length: 447 SOAP-Body Übergabeparameters Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" (XML-Nachricht) Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: Set-Cookie:JSESSIONID=9ekj42d5b1;Path=/soap JSESSIONID=9ekj42d5b1;Path=/soap Servlet-Engine: Servlet-Engine:Tomcat TomcatWeb WebServer/3.2.1 Server/3.2.1(JSP (JSP1.1; 1.1;Servlet Servlet2.2; 2.2;Java Java1.3.0; 1.3.0; Windows WindowsNT NT4.0 4.0x86; x86;java.vendor=Sun java.vendor=SunMicrosystems MicrosystemsInc.) Inc.) <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" <SOAP-ENV:Envelope <SOAP-ENV:Envelopexmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" <ns1:addResponse xmlns:ns1="urn:NumberAdder" <ns1:addResponse xmlns:ns1="urn:NumberAdder" <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> <return xsi:type="xsd:int">3</return> <return xsi:type="xsd:int">3</return> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </ns1:addResponse> </ns1:addResponse> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 61 Research and Technology SOAP am Beispiel ... Aufruf des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope POST POST/soap/servlet/rpcrouter /soap/servlet/rpcrouterHTTP/1.0 HTTP/1.0 SOAP-Header Host: Individuelle Host:alice:8081 alice:8081 SOAP-Header Content-Type: Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 SOAP-Body Content-Length: 474 (XML-Nachricht) Content-Length: 474 SOAPAction: SOAPAction:"""" <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:add <ns1:addxmlns:ns1="urn:NumberAdder" xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 <number1xsi:type="xsd:int">1</number1> xsi:type="xsd:int">1</number1> <number2 <number2xsi:type="xsd:int">2</number2> xsi:type="xsd:int">2</number2> </ns1:add> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 </SOAP-ENV:Envelope> 62 Research and Technology SOAP am Beispiel ... Aufruf des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope POST POST /soap/servlet/rpcrouter HTTP/1.0 POST/soap/servlet/rpcrouter /soap/servlet/rpcrouterHTTP/1.0 HTTP/1.0 SOAP-Header Host: Host: alice:8081 Individuelle Host:alice:8081 alice:8081 SOAP-Header Content-Type: Content-Type: text/xml; charset=utf-8 Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 SOAP-Body Content-Length: 474 Content-Length: 474 (XML-Nachricht) Content-Length: 474 SOAPAction: SOAPAction: SOAPAction:"""" "" <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:add <ns1:addxmlns:ns1="urn:NumberAdder" xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 <number1xsi:type="xsd:int">1</number1> xsi:type="xsd:int">1</number1> <number2 <number2xsi:type="xsd:int">2</number2> xsi:type="xsd:int">2</number2> </ns1:add> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 </SOAP-ENV:Envelope> 63 Research and Technology SOAP am Beispiel ... Aufruf des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope POST POST /soap/servlet/rpcrouter HTTP/1.0 POST/soap/servlet/rpcrouter /soap/servlet/rpcrouterHTTP/1.0 HTTP/1.0 SOAP-Header Host: Host: alice:8081 Individuelle Host:alice:8081 alice:8081 SOAP-Header Content-Type: Content-Type: text/xml; charset=utf-8 Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 SOAP-Body Content-Length: 474 Content-Length: 474 (XML-Nachricht) Content-Length: 474 SOAPAction: SOAPAction: SOAPAction:"""" "" <?xml version='1.0' encoding='UTF-8'?> <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add <ns1:addxmlns:ns1="urn:NumberAdder" xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number1 <number1xsi:type="xsd:int">1</number1> xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> <number2 <number2xsi:type="xsd:int">2</number2> xsi:type="xsd:int">2</number2> </ns1:add> </ns1:add> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 </SOAP-ENV:Envelope> 64 Research and Technology SOAP am Beispiel ... Aufruf des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope POST POST /soap/servlet/rpcrouter HTTP/1.0 POST/soap/servlet/rpcrouter /soap/servlet/rpcrouterHTTP/1.0 HTTP/1.0 SOAP-Header Host: Host: alice:8081 Individuelle Host:alice:8081 alice:8081 SOAP-Header Content-Type: Content-Type: text/xml; charset=utf-8 Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 SOAP-Body Content-Length: 474 Content-Length: 474 (XML-Nachricht) Content-Length: 474 SOAPAction: SOAPAction: SOAPAction:"""" "" <?xml version='1.0' encoding='UTF-8'?> <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> </ns1:add> </ns1:add> </ns1:add> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 </SOAP-ENV:Envelope> 65 Research and Technology SOAP am Beispiel ... Aufruf des Dienstes SOAP-Nachricht Protokoll-spezifische Information SOAP-Envelope POST POST /soap/servlet/rpcrouter HTTP/1.0 POST/soap/servlet/rpcrouter /soap/servlet/rpcrouterHTTP/1.0 HTTP/1.0 SOAP-Header Host: Host: alice:8081 Genutzter Dienst Individuelle Host:alice:8081 alice:8081 SOAP-Header Content-Type: Content-Type: text/xml; charset=utf-8 Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 SOAP-Body Content-Length: 474 Content-Length: 474 (XML-Nachricht) Content-Length: 474 SOAPAction: SOAPAction: SOAPAction:"""" "" <?xml version='1.0' encoding='UTF-8'?> <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelope <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> <number2 xsi:type="xsd:int">2</number2> </ns1:add> </ns1:add> </ns1:add> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 </SOAP-ENV:Envelope> 66 Research and Technology SOAP am Beispiel ... Registrierung eines SOAP-Services execute deploy service undeployed deployed undeploy service <isd:service <isd:servicexmlns:isd="http://xml.apache.org/xml-soap/deployment" xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder"> id="urn:NumberAdder"> <isd:provider <isd:providertype="java" type="java" scope="Application" scope="Application" methods="add"> methods="add"> <isd:java <isd:javaclass="Add" class="Add"static="false"/> static="false"/> </isd:provider> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service> </isd:service> M. Jeckle – XML-Protocols 2001-10-05 67 Research and Technology SOAP am Beispiel ... Registrierung eines SOAP-Services Identifikation des Dienstes innerhalb des SOAP-Endpunktes execute deploy service undeployed deployed undeploy service <isd:service <isd:servicexmlns:isd="http://xml.apache.org/xml-soap/deployment" xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder"> id="urn:NumberAdder"> <isd:provider <isd:providertype="java" type="java" scope="Application" scope="Application" methods="add"> methods="add"> <isd:java <isd:javaclass="Add" class="Add"static="false"/> static="false"/> </isd:provider> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service> </isd:service> M. Jeckle – XML-Protocols 2001-10-05 68 Research and Technology SOAP am Beispiel ... Registrierung eines SOAP-Services Über SOAP erreichbare Methoden execute deploy service undeployed deployed undeploy service <isd:service <isd:servicexmlns:isd="http://xml.apache.org/xml-soap/deployment" xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder"> id="urn:NumberAdder"> <isd:provider <isd:providertype="java" type="java" scope="Application" scope="Application" methods="add"> methods="add"> <isd:java <isd:javaclass="Add" class="Add"static="false"/> static="false"/> </isd:provider> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service> </isd:service> M. Jeckle – XML-Protocols 2001-10-05 69 Research and Technology SOAP am Beispiel ... Registrierung eines SOAP-Services Dienst erbringende Klasse execute deploy service undeployed deployed undeploy service <isd:service <isd:servicexmlns:isd="http://xml.apache.org/xml-soap/deployment" xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder"> id="urn:NumberAdder"> <isd:provider <isd:providertype="java" type="java" scope="Application" scope="Application" methods="add"> methods="add"> <isd:java <isd:javaclass="Add" class="Add"static="false"/> static="false"/> </isd:provider> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service> </isd:service> M. Jeckle – XML-Protocols 2001-10-05 70 Research and Technology SOAP am Beispiel ... Dienst-Nutzer Dienst-Erbringer deploy Registrierung eines SOAP-Services <?xml <?xmlversion="1.0" version="1.0"encoding="UTF-8"?> encoding="UTF-8"?> SOAP-Management Service use response <SOAP-ENV:Envelope response <SOAP-ENV:Envelope[...] [...]>> <SOAP-ENV:Body> undeploy <SOAP-ENV:Body> <ns1:deploy <ns1:deployxmlns:ns1="urn:xml-soap-service-management-service" xmlns:ns1="urn:xml-soap-service-management-service" response SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <descriptor <descriptorxmlns:ns2="http://xml.apache.org/xml-soap" xmlns:ns2="http://xml.apache.org/xml-soap"xsi:type="ns2:DeploymentDescriptor"> xsi:type="ns2:DeploymentDescriptor"> <faultListener xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" <faultListener xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/"xsi:type="ns3:Array" xsi:type="ns3:Array"ns3:arrayType="xsd:string[1]"> ns3:arrayType="xsd:string[1]"> <item <itemxsi:type="xsd:string">org.apache.soap.server.DOMFaultListener</item> xsi:type="xsd:string">org.apache.soap.server.DOMFaultListener</item> </faultListener> </faultListener> <providerClass <providerClassxsi:type="xsd:string">Add</providerClass> xsi:type="xsd:string">Add</providerClass> <serviceType xsi:type="xsd:int">0</serviceType> <serviceType xsi:type="xsd:int">0</serviceType> <serviceClass <serviceClassxsi:type="xsd:string" xsi:type="xsd:string"xsi:null="true"/> xsi:null="true"/> <methods xmlns:ns4="http://schemas.xmlsoap.org/soap/encoding/" <methods xmlns:ns4="http://schemas.xmlsoap.org/soap/encoding/"xsi:type="ns4:Array" xsi:type="ns4:Array"ns4:arrayType="xsd:string[1]"> ns4:arrayType="xsd:string[1]"> <item xsi:type="xsd:string">add</item> <item xsi:type="xsd:string">add</item> </methods> </methods> <providerType <providerTypexsi:type="xsd:byte">0</providerType> xsi:type="xsd:byte">0</providerType> <scriptLanguage <scriptLanguagexsi:type="xsd:string" xsi:type="xsd:string"xsi:null="true"/> xsi:null="true"/> <mappings <mappingsxmlns:ns5="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns5="http://schemas.xmlsoap.org/soap/encoding/"xsi:type="ns5:Array" xsi:type="ns5:Array"ns5:arrayType="ns2:TypeMapping[]" ns5:arrayType="ns2:TypeMapping[]"xsi:null="true"/> xsi:null="true"/> <defaultSMRClass <defaultSMRClassxsi:type="xsd:string" xsi:type="xsd:string"xsi:null="true"/> xsi:null="true"/> <ID xsi:type="xsd:string">urn:NumberAdder</ID> <ID xsi:type="xsd:string">urn:NumberAdder</ID> <props <propsxsi:type="ns2:Map" xsi:type="ns2:Map"xsi:null="true"/> xsi:null="true"/> <isStatic xsi:type="xsd:boolean">false</isStatic> <isStatic xsi:type="xsd:boolean">false</isStatic> <scriptFilenameOrString <scriptFilenameOrStringxsi:type="xsd:string" xsi:type="xsd:string"xsi:null="true"/> xsi:null="true"/> <scope xsi:type="xsd:int">2</scope> <scope xsi:type="xsd:int">2</scope> </descriptor> </descriptor> </ns1:deploy> </ns1:deploy> </SOAP-ENV:Body> </SOAP-ENV:Body> M. Jeckle – XML-Protocols </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> 2001-10-05 71 Research and Technology SOAP am Beispiel ... Dienst-Nutzer Dienst-Erbringer Registrierung eines SOAP-Services use HTTP/1.0 HTTP/1.0200 200OK OK response Content-Type: Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 Content-Length: Content-Length:438 438 Set-Cookie2: Set-Cookie2:JSESSIONID=e0llx5hlg1;Version=1;Discard;Path="/soap" JSESSIONID=e0llx5hlg1;Version=1;Discard;Path="/soap" Set-Cookie: Set-Cookie:JSESSIONID=e0llx5hlg1;Path=/soap JSESSIONID=e0llx5hlg1;Path=/soap Servlet-Engine: Servlet-Engine:Tomcat TomcatWeb WebServer/3.2.1 Server/3.2.1(JSP (JSP1.1; 1.1;Servlet Servlet2.2; 2.2;Java Java1.3.0; 1.3.0; Windows Windows2000 20005.0 5.0x86; x86;java.vendor=Sun java.vendor=SunMicrosystems MicrosystemsInc.) Inc.) SOAP-Management Service deploy response undeploy response <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelopexmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:deployResponse <ns1:deployResponsexmlns:ns1="urn:xml-soap-service-management-service" xmlns:ns1="urn:xml-soap-service-management-service" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> </ns1:deployResponse> </ns1:deployResponse> </SOAP-ENV:Body> </SOAP-ENV:Body> M. Jeckle – XML-Protocols 2001-10-05 </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> 72 Research and Technology SOAP am Beispiel ... Deregistrierung eines SOAP-Services POST POST/soap/servlet/rpcrouter /soap/servlet/rpcrouterHTTP/1.0 HTTP/1.0 Host: Host:alice:8081 alice:8081 Content-Type: Content-Type:text/xml; text/xml;charset=utf-8 charset=utf-8 Content-Length: Content-Length:478 478 SOAPAction: SOAPAction:"""" Dienst-Nutzer Dienst-Erbringer SOAP-Management Service deploy use response response undeploy response <?xml <?xmlversion='1.0' version='1.0'encoding='UTF-8'?> encoding='UTF-8'?> <SOAP-ENV:Envelope <SOAP-ENV:Envelopexmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:undeploy <ns1:undeployxmlns:ns1="urn:xml-soap-service-management-service" xmlns:ns1="urn:xml-soap-service-management-service" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <name <namexsi:type="xsd:string">urn:NumberAdder</name> xsi:type="xsd:string">urn:NumberAdder</name> </ns1:undeploy> </ns1:undeploy> </SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> M. Jeckle – XML-Protocols 2001-10-05 73 Research and Technology SOAP am Beispiel ... Dienst-Nutzer Dienst-Erbringer Deregistrierung eines SOAP-Services use HTTP/1.0 200 OK HTTP/1.0 200 OK Content-Type: text/xml; charset=utf-8 response Content-Type: text/xml; charset=utf-8 Content-Length: 1639 Content-Length: 1639 Set-Cookie2: JSESSIONID=8v6o61hnl1;Version=1;Discard;Path="/soap" Set-Cookie2: JSESSIONID=8v6o61hnl1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=8v6o61hnl1;Path=/soap Set-Cookie: JSESSIONID=8v6o61hnl1;Path=/soap Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows 2000 5.0 x86; java.vendor=Sun Microsystems Inc.) Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows 2000 5.0 x86; java.vendor=Sun Microsystems Inc.) <?xml version='1.0' encoding='UTF-8'?> <?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:undeployResponse xmlns:ns1="urn:xml-soap-service-management-service" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <ns1:undeployResponse xmlns:ns1="urn:xml-soap-service-management-service" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xmlns:ns2="http://xml.apache.org/xml-soap" xsi:type="ns2:DeploymentDescriptor"> <return xmlns:ns2="http://xml.apache.org/xml-soap" xsi:type="ns2:DeploymentDescriptor"> <faultListener xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:Array" ns3:arrayType="xsd:string[1]"> <faultListener xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:Array" ns3:arrayType="xsd:string[1]"> <item xsi:type="xsd:string">org.apache.soap.server.DOMFaultListener</item> <item xsi:type="xsd:string">org.apache.soap.server.DOMFaultListener</item> </faultListener> </faultListener> <providerClass xsi:type="xsd:string">Add</providerClass> <providerClass xsi:type="xsd:string">Add</providerClass> <serviceType xsi:type="xsd:int">0</serviceType> <serviceType xsi:type="xsd:int">0</serviceType> <serviceClass xsi:type="xsd:string" xsi:null="true"/> <serviceClass xsi:type="xsd:string" xsi:null="true"/> <methods xmlns:ns4="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns4:Array" ns4:arrayType="xsd:string[1]"> <methods xmlns:ns4="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns4:Array" ns4:arrayType="xsd:string[1]"> <item xsi:type="xsd:string">add</item> <item xsi:type="xsd:string">add</item> </methods> </methods> <providerType xsi:type="xsd:byte">0</providerType> <providerType xsi:type="xsd:byte">0</providerType> <scriptLanguage xsi:type="xsd:string" xsi:null="true"/> <scriptLanguage xsi:type="xsd:string" xsi:null="true"/> <mappings xmlns:ns5="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns5:Array" ns5:arrayType="ns2:TypeMapping[]" xsi:null="true"/> <mappings xmlns:ns5="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns5:Array" ns5:arrayType="ns2:TypeMapping[]" xsi:null="true"/> <defaultSMRClass xsi:type="xsd:string" xsi:null="true"/> <defaultSMRClass xsi:type="xsd:string" xsi:null="true"/> <ID xsi:type="xsd:string">urn:NumberAdder</ID> <ID xsi:type="xsd:string">urn:NumberAdder</ID> <props xsi:type="ns2:Map" xsi:null="true"/> <props xsi:type="ns2:Map" xsi:null="true"/> <isStatic xsi:type="xsd:boolean">false</isStatic> <isStatic xsi:type="xsd:boolean">false</isStatic> <scriptFilenameOrString xsi:type="xsd:string" xsi:null="true"/> <scriptFilenameOrString xsi:type="xsd:string" xsi:null="true"/> <scope xsi:type="xsd:int">2</scope> <scope xsi:type="xsd:int">2</scope> </return> </return> </ns1:undeployResponse> </ns1:undeployResponse> </SOAP-ENV:Body> </SOAP-ENV:Body> M. Jeckle – XML-Protocols </SOAP-ENV:Envelope> </SOAP-ENV:Envelope> SOAP-Management Service deploy response undeploy response 2001-10-05 74