Kein Folientitel

Werbung
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
Herunterladen