Einleitung
SOAP Nachrichten
SOAP Encoding
SOAP und RPC
SOAP Attachments
JAXM Java API for XML Messaging
Protokoll zum Informationsaustausch (im Web)
Inhalt der Information wird per XML beschrieben
Transport der Information wird per HTTP oder HTTP-EF erledigt
Vorteil: Strukturierte XML-Daten anstelle von binären MIME-Daten
'Historie':
SOAP 1.0 von MS
SOAP 1.1 ist W3C Note vom 8. Mai 2000
SOAP Attachments ist W3C Working Draft
Beispiel: Hallo SOAP Server
POST /HalloServer HTTP/1.1 Host: www.hallo-welt.com Content-Type: text/xml; charset="utf-8" Content-Length: nnnn SOAPAction: "ein URI" <SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:GetGreeting xmlns:m="ein NS-URI"> <myName>Heinz Kredel</myName> </m:GetGreeting> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Beispiel: Antwort vom SOAP Server
HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: nnnn <SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"/> <SOAP-ENV:Body> <m:getGreetingResponse xmlns:m="ein NS-URI"> <message>Hallo Heinz Kredel!</message> </m:GetGreetingResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Transport in HTTP
neuer HTTP Header SOAPAction: [action-URI]
Content-Type ist text/xml
bei SOAP Fehler muss auch ein HTTP Fehler 500
erzeugt werden und ein Fault
-Element muss in der
Antwort enthalten sein
Arten von SOAP Nachrichten
einfache SOAP Nachrichten
SOAP Nachrichten mit Attachments
verwendete Namensräume
xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
SOAP Nachrichten dürfen keine DTDs (Document Type Definitions) und keine PIs (Processing INstruction) enthalten
Ein SOAP-Processor (Empfänger) muss in der Lage sein
alle Teile einer SOAP Nachricht zu identifizieren.
Versteht er einige Teile nicht muss er die Nachricht verwerfen.
Ist der Inhalt nicht für ihn, muss er seine Teile entfernen und den Inhalt weiterleiten.
eine SOAP Nachricht ist/besteht aus einem SOAP-Envelope
ein SOAP-Envelope besteht aus einem (optionalen) SOAP-Header und einem SOAP-Body, danach dürfen weitere (nicht-SOAP) XML-Elemnte folgen
der SOAP-Header dient zur Angabe von speziellen Eigenschaften des SOAP-Bodies
der SOAP-Body enthält die eigentliche Nachricht für den (nächsten) Empfänger
es gibt einen default SOAP-Body für Fehlermeldungen: SOAP-ENV:Fault
der (optionale) Inhalt von SOAP-Header muss mit den richtigen Namensräumen versehen sein
der Inhalt von SOAP-Body kann(?) mit entsprechenden Namensräumen versehen sein
XML-ELemente nach SOAP-Body müssen mit den richtigen Namensräumen versehen sein
alle SOAP Elemente können ein encodingStyle
Attribut haben
weitere Attribute für den Inhalt der Header und des Body:
actor = "URI"
definiert den Empfänger
des Elements
mustUnderstand = "1"
verlangt, dass der Empfänger die Bedeutung des Elements
voll versteht, falls nicht, wird die Nachricht verworfen
allgemeinste Form eines SOAP-Envelopes
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "NS-URI" encodingStyle = "NS-URI" > <SOAP-ENV:Header> Header Inhalt </SOAP-ENV:Header> <SOAP-ENV:Body> Body Inhalt </SOAP-ENV:Body> <xxx:other xmlns:xxx = "NS-URI" > anderer Inhalt </xxx:other> </SOAP-ENV:Envelope>
<SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Server</faultcode> <faultstring>Beschreibung</faultstring> <faultactor>actor-URI</faultactor> <detail> <e:message xmlns:e="ein NS-URI"> Kann das Element xxx nicht verarbeiten. </e:message> </detail> </SOAP-ENV:Fault> </SOAP-ENV:Body>
Fehler-Codes in faultcode
sind analog zu
HTTP 1xx, 2xx, 3xx, 4xx, 5xx Codes:
versionMismatch
:
Namensräume passen nicht
mustUnderstand
:
kann ein solches Element nicht verstehen
Client
:
die Anfrage war Fehlerhaft,
hatte nicht die korrekte Authentifizierung, etc.
Server
:
der Server konnte die Nachricht nicht verarbeiten
oder weiterleiten
ein einfaches Typ-System zur Beschreibung der übertragenen Daten
alles was mit XML Schema definierbar ist kann übertragen werden
verwendete Schema Namensräume
xmlns:xsd = "http://www.w3.org/1999/XMLSchema"
xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
im Zweifelsfall oder für bessere Effizienz können entsprechende 'SOAP-ENC' Attribute den Typ genauer beschreiben
einfache Datentypen: int, float, String, Enumeration, Byte Arrays; z.B.
<betrag xsi:type="xsd:float">29.95</betrag>oder auch nur
<betrag>29.95</betrag>
zusammengesetzte Datentypen: Struct, Array; z.B.
<zahlenFeld SOAP-ENC:arrayType="xsd:int[2]"> <zahl>3</zahl> <zahl>5</zahl> </zahlenFeld>
Funktionsaufrufe werden im SOAP-Body als zusammengesetzter Datentyp übertragen.
z.B.
<methodName> <arg1Name>3</arg1Name> <arg2Name>5</arg2Name> <arg3Name>7</arg3Name> </methodName>
Unterstützt SOAP und SOAP mit Attachments.
Unterstützt ebXML: e-bussines-XML.
© Universität Mannheim, Rechenzentrum, 1998-2002.
Heinz Kredel Last modified: Fri Dec 28 17:28:04 MET 2001