Stand und weitere Arbeiten
Mario JeckleDaimlerChrysler Forschungszentrum Ulm
mario.jeckle@daimlerchrysler.com mario@jeckle.de
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:
Die Herausforderung ...
FTP CORBA RMI CORBA GIOP/IIOP RDA DC OM TC P/ IP FTP Sockets RPC Host Mainframe 0101010101 Proxy-Server DNS-Server Internet Mail-Server Firewall Web-ServerInternet
DHCP-ServerDie Herausforderung ...
CORBA RMI CORBA GIOP/IIOP DCOM TC P/ IP Sockets 0101010101 Mail-Server DHCP-Server FTP CORBA RMI CORBA GIOP/IIOP RDA DCOM TC P/ IP FTP Sockets RPC Host Mainframe 0101010101 Proxy-Server DNS-Server Internet Mail-Server Firewall-Server Web-Server Internet DHCP-Server FTP CORBA RMI CORBA GIOP/IIOP RDA DCOM TC P/ IP FTP Sockets RPC Host Mainframe 0101010101 Proxy-Server DNS-Server Internet Mail-Server Firewall-Server Web-Server Internet DHCP-Server FTP CORBA RMI CORBA GIOP/IIOP RDA DC OM TC P/ IP FTP Sockets RP C Host Mainframe 0101010101 Proxy-Server DNS-Server Mail-Server Firewall-Server Web-Server Internet Internet DHCP-Server FTP CORBA RMI CORBA GIOP/IIOP RDA DC OM TC P/ IP FTP Sockets RP C Host Mainframe 0101010101 Proxy-Server DNS-Server Mail-Server Firewall-Server Web-Server Internet Internet DHCP-Server FTP CORBA RMI CORBA GIOP/IIOP RDA DC OM TC P/ IP FTP Sockets RP C Host Mainframe 0101010101 Proxy-Server DNS-Server Mail-Server Firewall-Server Web-Server Internet Internet DHCP-Server CORBA RMI CORBA GIOP/IIOP RDA DCOM TC P/ IP Sockets RP C 0101010101 Proxy-Server Mail-Server Firewall-Server Internet Internet DHCP-Server FTP CORBA RMI CORBA GIOP/IIOP RDA DCOM TC P/ IP FTP Sockets RP C Host Mainframe 0101010101 Proxy-Server DNS-Server Mail-Server Firewall-Server Web-Server DHCP-Server I n t e r n e t I n t e r n e t I n t e r n e t I n t e r n e tLösungsidee ... Internettechnologie
Internettechnologie ... HTTP und XML
Web-Server Web-Server
HTTP-Port
HTTP-Port
Request
POST /soap router HTTP/1.0
Host: ali Content- charset=utf-8 Content SOAPAct <?xml v ing='UTF-8'?> <SOAP-ENV xmlns:SOAP p://schemas.xmlsoap.org/soap/envelope/" xmlns: w3.org/1999/XMLSchema-instance" xmlns: w.w3.org/1999/XMLSchema"> <SOAP-<ns1 ="urn:NumberAdder" SO ngStyle="http://schemas.xmlsoap.org/soap/encoding/"> <n ="xsd:int">1</number1> <n ="xsd:int">2</number2> </ns1 </SOA </SOAP-E
POST /soap uter HTTP/1.0 Host: alice Content-Type harset=utf-8 Content-L SOAPActi <?xml ver ing='UTF-8'?> <SOAP-ENV xmlns:SOAP ://schemas.xmlsoap.org/soap/envelope/" xmlns:xs w3.org/1999/XMLSchema-instance" xmlns:xsd .w3.org/1999/XMLSchema"> <SOAP-ENV <ns1:add xmlns: "urn:NumberAdder" SOA gStyle="http://schemas.xmlsoap.org/soap/encoding/"> <numbe "xsd:int">1</number1> <numbe "xsd:int">2</number2> </ns1 </SOAP </SOAP-E /servlet/rpc ce:8081 Type: text/xml; -Length: 474 ion: "" ersion='1.0' encod :Envelope -ENV="htt xsi="http://www. xsd="http://ww ENV:Body> :add xmlns:ns1 AP-ENV:encodi umber1 xsi:type umber2 xsi:type :add> P-ENV:Body> NV:Envelope> /servlet/rpcro :8081 : text/xml; c ength: 474 on: "" sion='1.0' encod :Envelope -ENV="http i="http://www. ="http://www :Body> ns1= P-ENV:encodin r1 xsi:type= r2 xsi:type= :add> -ENV:Body> NV:Envelope>
Firewall
Firewall
Internettechnologie ... HTTP und XML
Web-ServerResponse
Web-Server HTTP-Port HTTP-Port HTTP/1.0 200 OKContent-Type: text/xml; charset=utf-8 Content-Length: 529
Set-Cookie2: JSESSIONID=tibpjehn11;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=tibpjehn11;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.) <?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xmlns:ns2="http://xml.apache.org/xml-soap" xsi:type="ns2:Vector"> <item xsi:type="xsd:int">3</item> </return> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 529
Set-Cookie2: JSESSIONID=tibpjehn11;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=tibpjehn11;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.) <?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xmlns:ns2="http://xml.apache.org/xml-soap" xsi:type="ns2:Vector"> <item xsi:type="xsd:int">3</item> </return> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Firewall
Firewall
CORBA vs. SOAP
Plattform-unabhängigkeit
Lesbarer Text
(human readable)
Datentypen
(über String hinaus)
Verteilungs-
Schema-versionierung
Skalierbarkeit
(data shipping)
IDL
XM
L-Sc
he
m
a
Transportprotokoll
unabhängigkeit
SOAP
Gemeinsames
Datenschema
Unabhängiges
Datenschema
IDL
Programmiermodell-neutral
Objekt-orientiert
CORBA vs. SOAP
CORBA
SOAP
Kriterium
Plattformunabhängigkeit:
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
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
Schema-versionen durch die Applikation
Verteilungsunterstützung:
•Verteilungstransparenz
•Lookup-Funktionalität
•Authentifizierung und Sicherheit
•Transaktionsunterstützung
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
SOAP vs. CORBA – Antwortzeitverhalten (WAN)
#Objekte: 100 Objektgröße: 512 Byte Roundtrip-Zeit: 300ms 600 800 1000 400 200 10 20 30 40 50 60 sec An tw or tz ei tSOAP vs. CORBA – Antwortzeitverhalten (LAN)
#Objekte: 100 Objektgröße: 512 Byte Roundtrip-Zeit: 170ms 600 800 1000 400 200 10 20 30 40 50 60 sec An tw or tz ei tXML-basierte RPC-Mechanismen:
SOAP/XMLP vs. RMI
Lesbarer Text (human readable) Typsystem Firewall-überwindung XML -Sch ema Transportprotokoll unabhängigkeit SOAP/ XMLP Sprach-unabhängig Programmiermodell-neutral Hauptnutzung: B2B Hauptnutzung: A2A Plattform-unabhängigkeit asynchron Zentrale Registrierungsinstanz synchron Objekt-orientiert Effiziente Binärrepräsentation Verbosität Verteilungs-unterstützungWas 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
Von SOAP zu XML-Protocols ...
SOAP v1.2 Working Draft W3C Workshop web services 1st Working DraftW3C's XML Protocol Activity -- Protocol Working Group SOAP/1.1 SOAP W3C Note SOAP/1.0 XML-RPC 1999-06 2000-05 2000-09 2001-04
SOAP-Architektur
Envelope
SOAP-Envelope
Beschreibung einer XML-codierten Nachricht
(XML-Namensräume, etc.)
Header
Body
ANY
ANY
SOAP-Transport (
Binding Framework
)
Richtlinien zur Nutzung von Transportprotokollen
(Protokollunabhängigkeit)
SOAP-Codierungsrichtlinien
Mechanismus zur Überführung der Applikationsdatenstrukturen
in XML
SOAP-Nachrichtendarstellung
SOAP und XML
Transportprotokoll (z.B. HTTP)
Serialisierung und Encoding des Aufrufs
SOAP Envelope
W3C's XML-Schema
Ablauf eines SOAP-Aufrufs
SOAP Endpoint er2SOAP-Schicht
XML v1.0, 2ndedition + Namespaces W3C's XML-Schema SOAP Envelope Serialisierung und Encoding des AufrufsTransportprotokoll (z.B. HTTP) NumberAdderCall Parameters number1 value = 1 number2 value = 2 <?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> </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/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Dienst-Nutzer
SOAP-Schicht
XML v1.0, 2ndedition + Namespaces W3C's XML-Schema SOAP Envelope Serialisierung und Encoding des AufrufsTransportprotokoll (z.B. HTTP) <?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> </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/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope> NumberAdderCall Parameters number1 value = 1 numb value = 2
Dienst-Erbringer
SOAP am Beispiel ...
... ein einfacher Rechner
er2
SOAP-Schicht
XML v1.0, 2ndedition + Namespaces
W3C's XML-Schema SOAP Envelope Serialisierung und Encoding des Aufrufs
Transportprotokoll (z.B. HTTP) NumberAdderCall Parameters number1 value = 1 number2 value = 2 <?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> </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/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
SOAP-Schicht
XML v1.0, 2ndedition + Namespaces W3C's XML-Schema SOAP Envelope Serialisierung und Encoding des AufrufsTransportprotokoll (z.B. HTTP) <?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> </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/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:add xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <number1 xsi:type="xsd:int">1</number1> <number2 xsi:type="xsd:int">2</number2> </ns1:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope> NumberAdderCall Parameters number1 value = 1 numb value = 2
Dienst-Nutzer
Dienst-Erbringer
3
3
1 + 2
1 + 2
Anforderungen an XML Protocols (SOAP v1.2)
Anforderungen
berücksichtigteEinfachheit und
Stabilität
Datenkapselung und
Erweiterbarkeit
Datenrepräsentation
Protokollbindung
RPC-Konvention
RPC-Vermittler
unberücksichtigteDirekte Behandlung
binärer Daten
Allgemeines
Kompaktifizierung und
Kompression
Transport- und
Vermittlungsspezifika
Applikationssemantik
(Transaktionen, Sicherheit)Dienst-Metadaten
(Service Directory)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
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
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
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
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)
Anforderungen an XMLP, Verwirklichung in SOAP v1.2
Bitübertragungsschicht
(
Physical Layer)
Sicherungsschicht
(
Data Link Layer)
HTTP
TCP
IP (v4, v6), X.25, SPX, IPX
HDLC, SLIP, PPP, Ethernet, IEEE 802.x
analoges Modem, V. 90, ISDN, ADSL
Netzschicht
(
Network Layer)
Transportschicht
(
Transport Layer)
Sitzungsschicht
(
Session Layer)
SMTP
UDP
HTTPS
MIME
XML protocol
binding
XML Protocol
BEEP
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)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
Anatomie einer SOAP/1.1-Nachricht
Protokoll-spezifische
Information
SOAP-Nachricht
SOAP-Envelope
SOAP-Header
Individuelle
SOAP-Header
..
.
SOAP-Body
(XML-Nachricht)
Ausblick auf die SOAP-Standardisierung: SOAP v1.2
SOAP-Nachricht
SOAP-Header
..
.
..
.
SOAP-Block
SOAP-Body
..
.
..
.
SOAP-Block
.. .Abstraktes Modell der XML Protocols (XMLP)
XML-Knoten (Ursprungssender)
XML-Knoten
(Empfänger und Sender)
XML-Knoten (endgültiges Ziel) XMLP Nachricht XMLP Applikation1 Actor1 Actor2 XMLP Applikation1 Actor3 Actor4 Actor5
XMLP Processor
XMLP Processor
NachrichtXMLPXMLP Applikation1 Actor6 Actor7 Actor8
XMLP Processor
XMLP Block
1XMLP Block
2XMLP Block
3XMLP Block
4Kritik 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
Referenzen
•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-matrixSOAP-Implementierungen:
Allgemeines:
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.
•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/
Anhang
SOAP am Beispiel ...
... ein einfacher Rechner. Design des Dienst-Anbieters.
Add
Apache SOAP Architektur
SOAP am Beispiel ...
Lebenszyklus eines SOAP-Services
deployed
deploy
service
undeploy
service
execute
undeployed
SOAP am Beispiel ...
Lebenszyklus eines SOAP-Services
Dienst-Nutzer
use
response
SOAP-Management Service
deploy
response
undeploy
response
Dienst-Erbringer
SOAP am Beispiel ...
Implementierung des Dienst-Erbringers
import java.util.*; import java.lang.*; public class Add {
public Vector add(int number1, int number2) {
System.out.println("adding ..."); return (number1 + number2); } //add()
} //class Add
import java.util.*; import java.lang.*; public class Add {
public Vector add(int number1, int number2) {
System.out.println("adding ..."); return (number1 + number2); } //add()
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers
import java.util.*; import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); import java.util.*;
import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs
import java.util.*; import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); params.addElement(new Parameter("number2", Integer.class, "2", null)); import java.util.*;
import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); params.addElement(new Parameter("number2", Integer.class, "2", null)); myCall.setParams(params);
SOAP Endpoint /
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs
import java.util.*; import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); import java.util.*;
import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null));
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs
import java.util.*; import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); params.addElement(new Parameter("number2", Integer.class, "2", null)); import java.util.*;
import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); params.addElement(new Parameter("number2", Integer.class, "2", null)); myCall.setParams(params);
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs
import java.util.*; import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); import java.util.*;
import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null));
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs
import java.util.*; import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); params.addElement(new Parameter("number2", Integer.class, "2", null)); import java.util.*;
import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); params.addElement(new Parameter("number2", Integer.class, "2", null)); myCall.setParams(params);
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs
import java.util.*; import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); import java.util.*;
import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null));
Objekt zur Aufnahme der
Übergabeparameter
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs
import java.util.*; import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); params.addElement(new Parameter("number2", Integer.class, "2", null)); import java.util.*;
import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); params.addElement(new Parameter("number2", Integer.class, "2", null)); myCall.setParams(params);
Erzeugung der
Übergabe-parameter als Objekte
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Vorbereitung des Aufrufs
import java.util.*; import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null)); import java.util.*;
import java.net.*;
import org.apache.soap.*; import org.apache.soap.rpc.*; public class CallAdd
{
public static void main(String[] args) throws Exception {
URL url = new URL("http://alice:8081/soap/servlet/rpcrouter"); Call myCall = new Call();
myCall.setTargetObjectURI("urn:NumberAdder"); myCall.setMethodName("add");
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); Vector params = new Vector();
params.addElement(new Parameter("number1", Integer.class, "1", null));
Übergabeparameter-Objekt
dem Aufruf hinzufügen
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Durchführung des Aufrufs
Response resp; try
{
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); } //if ... Response resp; try {
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); } //if
Response resp; try
{
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); Response resp;
try {
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); } //if
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Durchführung des Aufrufs
Response resp; try
{
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); } //if ... Response resp; try {
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); } //if
...
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Durchführung des Aufrufs
Response resp; try
{
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); Response resp;
try {
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); } //if
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Durchführung des Aufrufs
Response resp; try
{
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); } //if ... Response resp; try {
resp = myCall.invoke(url, null); } //try catch(SOAPException e) { System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ()); return; } //catch if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue(); Object value = ret.getValue();
System.out.println("result:" + value); } //if
...
SOAP am Beispiel ...
Implementierung des Dienst-Nutzers. Durchführung des Aufrufs
Extraktion des Ergebnisses
und Ausgabe
SOAP am Beispiel ...
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
Aufruf des Dienstes
Dienst-Nutzer Dienst-Erbringer SOAP-Management Service
deploy response use response undeploy response
SOAP am Beispiel ...
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Aufruf des Dienstes
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/
">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
Ausgewählte Codierungsrichtline
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht)SOAP am Beispiel ...
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
Aufruf des Dienstes
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<
number1
xsi:type="
xsd:int
">
1
</number1>
<
number2
xsi:type="
xsd:int
">
2
</number2>
</ns1:add>
</SOAP-ENV:Body>
Name, Typ und Wert der
Übergabeparameter
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht)SOAP am Beispiel ...
HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 447
Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=9ekj42d5b1;Path=/soap
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
<?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </SOAP-ENV:Body> HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 447
Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=9ekj42d5b1;Path=/soap
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
<?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Ergebnis des Dienstes
HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 447
Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=9ekj42d5b1;Path=/soap
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht) <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"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </SOAP-ENV:Body>
SOAP am Beispiel ...
HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 447
Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=9ekj42d5b1;Path=/soap
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
<?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 447
Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=9ekj42d5b1;Path=/soap
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
<?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse>
Ergebnis des Dienstes
HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 447
Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=9ekj42d5b1;Path=/soap
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
<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"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </SOAP-ENV:Body> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </SOAP-ENV:Body>
Dienst-Erbringer
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht)SOAP am Beispiel ...
HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 447
Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=9ekj42d5b1;Path=/soap
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
<?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </SOAP-ENV:Body> HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 447
Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=9ekj42d5b1;Path=/soap
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
<?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" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Ergebnis des Dienstes
HTTP/1.0 200 OK
Content-Type: text/xml; charset=utf-8 Content-Length: 447
Set-Cookie2: JSESSIONID=9ekj42d5b1;Version=1;Discard;Path="/soap" Set-Cookie: JSESSIONID=9ekj42d5b1;Path=/soap
Servlet-Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Windows NT 4.0 x86; java.vendor=Sun Microsystems Inc.)
<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"> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return> </ns1:addResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <SOAP-ENV:Body> <ns1:addResponse xmlns:ns1="urn:NumberAdder" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:int">3</return>
</ns1:addResponse> </SOAP-ENV:Body>
Typ und Wert des
Übergabeparameters
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht)SOAP am Beispiel ...
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
Aufruf des Dienstes
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht)
SOAP am Beispiel ...
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Aufruf des Dienstes
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht)SOAP am Beispiel ...
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
Aufruf des Dienstes
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht)<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
SOAP am Beispiel ...
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Aufruf des Dienstes
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht)<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
SOAP am Beispiel ...
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
Aufruf des Dienstes
POST /soap/servlet/rpcrouter HTTP/1.0
Host: alice:8081
Content-Type: text/xml; charset=utf-8
Content-Length: 474
SOAPAction: ""
<?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"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="urn:NumberAdder"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
<SOAP-ENV:Body>
<ns1:add xmlns:ns1="
urn:NumberAdder
"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<number1 xsi:type="xsd:int">1</number1>
<number2 xsi:type="xsd:int">2</number2>
</ns1:add>
</SOAP-ENV:Body>
Genutzter Dienst
Protokoll-spezifische Information SOAP-Envelope SOAP-Header Individuelle SOAP-Header SOAP-Body (XML-Nachricht)SOAP am Beispiel ...
Registrierung eines SOAP-Services
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder">
<isd:provider type="java"
scope="Application" methods="add">
<isd:java class="Add" static="false"/> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service> <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder"> <isd:provider type="java" scope="Application" methods="add">
<isd:java class="Add" static="false"/> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service> undeployed deployed deploy service undeploy service execute
SOAP am Beispiel ...
Registrierung eines SOAP-Services
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder">
<isd:provider type="java"
scope="Application" methods="add">
<isd:java class="Add" static="false"/> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder"> <isd:provider type="java" scope="Application" methods="add">
<isd:java class="Add" static="false"/> </isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
Identifikation des Dienstes innerhalb
des SOAP-Endpunktes
undeployeddeployed deploy service undeploy service execute
SOAP am Beispiel ...
Registrierung eines SOAP-Services
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder">
<isd:provider type="java"
scope="Application" methods="add">
<isd:java class="Add" static="false"/> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service> <isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder"> <isd:provider type="java" scope="Application" methods="add">
<isd:java class="Add" static="false"/> </isd:provider> <isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener> </isd:service>
Über SOAP
erreichbare Methoden
undeployed deployed deploy service undeploy service executeSOAP am Beispiel ...
Registrierung eines SOAP-Services
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment" id="urn:NumberAdder">
<isd:provider type="java"
sc