• No results found

XML-Protocols Stand und weitere Arbeiten

N/A
N/A
Protected

Academic year: 2021

Share "XML-Protocols Stand und weitere Arbeiten"

Copied!
74
0
0

Loading.... (view fulltext now)

Full text

(1)

Stand und weitere Arbeiten

Mario Jeckle

DaimlerChrysler Forschungszentrum Ulm

mario.jeckle@daimlerchrysler.com mario@jeckle.de

(2)

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:

(3)

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-Server

Internet

DHCP-Server
(4)

Die 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 t
(5)

Lösungsidee ... Internettechnologie

(6)

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

(7)

Internettechnologie ... HTTP und XML

Web-Server

Response

Web-Server HTTP-Port HTTP-Port 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> 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

(8)

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

(9)

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

(10)

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

(11)

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

(12)

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 t
(13)

SOAP 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 t
(14)

XML-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ützung
(15)

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

(16)

Von SOAP zu XML-Protocols ...

SOAP v1.2 Working Draft W3C Workshop web services 1st Working Draft

W3C'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

(17)

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

(18)

SOAP und XML

Transportprotokoll (z.B. HTTP)

Serialisierung und Encoding des Aufrufs

SOAP Envelope

W3C's XML-Schema

(19)

Ablauf eines SOAP-Aufrufs

SOAP Endpoint 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>

Dienst-Nutzer

SOAP-Schicht

XML v1.0, 2ndedition + Namespaces W3C's XML-Schema SOAP Envelope Serialisierung und Encoding des Aufrufs

Transportprotokoll (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

(20)

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 Aufrufs

Transportprotokoll (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

(21)

Anforderungen an XML Protocols (SOAP v1.2)

Anforderungen

berücksichtigte

Einfachheit und

Stabilität

Datenkapselung und

Erweiterbarkeit

Datenrepräsentation

Protokollbindung

RPC-Konvention

RPC-Vermittler

unberücksichtigte

Direkte Behandlung

binärer Daten

Allgemeines

Kompaktifizierung und

Kompression

Transport- und

Vermittlungsspezifika

Applikationssemantik

(Transaktionen, Sicherheit)

Dienst-Metadaten

(Service Directory)
(22)

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

(23)

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

(24)

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

(25)

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

(26)

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)

(27)

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

(28)

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)
(29)

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

(30)

Anatomie einer SOAP/1.1-Nachricht

Protokoll-spezifische

Information

SOAP-Nachricht

SOAP-Envelope

SOAP-Header

Individuelle

SOAP-Header

..

.

SOAP-Body

(XML-Nachricht)

(31)

Ausblick auf die SOAP-Standardisierung: SOAP v1.2

SOAP-Nachricht

SOAP-Header

..

.

..

.

SOAP-Block

SOAP-Body

..

.

..

.

SOAP-Block

.. .
(32)

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

NachrichtXMLP

XMLP Applikation1 Actor6 Actor7 Actor8

XMLP Processor

XMLP Block

1

XMLP Block

2

XMLP Block

3

XMLP Block

4
(33)

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

(34)

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-matrix

SOAP-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/

(35)
(36)

Anhang

(37)

SOAP am Beispiel ...

... ein einfacher Rechner. Design des Dienst-Anbieters.

Add

(38)

Apache SOAP Architektur

(39)

SOAP am Beispiel ...

Lebenszyklus eines SOAP-Services

deployed

deploy

service

undeploy

service

execute

undeployed

(40)

SOAP am Beispiel ...

Lebenszyklus eines SOAP-Services

Dienst-Nutzer

use

response

SOAP-Management Service

deploy

response

undeploy

response

Dienst-Erbringer

(41)

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()

(42)

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();

(43)

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 /

(44)

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));

(45)

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);

(46)

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));

(47)

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);

(48)

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

(49)

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

(50)

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

(51)

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

(52)

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

(53)

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

(54)

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

(55)

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

(56)

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

(57)

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)
(58)

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)
(59)

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>

(60)

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)
(61)

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)
(62)

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)

(63)

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)
(64)

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>

(65)

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>

(66)

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)
(67)

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

(68)

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

undeployed

deployed deploy service undeploy service execute

(69)

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 execute
(70)

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"

sc

References

Related documents

We separate the problem into three subproblems: (i) planning individual, closed paths for the agents that cover all the points of the environment; (ii) calculating the coverage time

By examining the moral discourses of love within the drama in conjunction with the personal experiences of my informants (echoing the ways my own informants spoke of their

BitTorrent [17] maintains its fair- ness by using a simple Tit-For-Tat (TFT) incentive policy, where a peer mainly uploads to others from whom it can download at the same time.

The study of Nonnenberg and Mendonca (2004) finds that the factors such as the market size measured by GNP, growth rate of the product, the availability of skilled labor,

Unlike central corneal haze following myopic PRK which can result in symptoms of glare, halos, loss of best spectacle- corrected visual acuity and contrast sensitivity, we did

Aiming to study different poplar clones behaviour in the Andinean Valley of Barreal, placed in the province of San Juan, Argenti- na, in 1995 was set a trial with the following

Biodiesel from non-food sources such as sewage sludge, waste cooking oil (WCO), microalgae and animal fat wastes along with non-edible oil seeds such as

– At installation 1, Q 1 = order quantity provided by supplier placed in time to replenish the inventory at installation 1when the inventory level is zero... Inventory Control in