WebServices verwenden das Simple Object Access Protocol (SOAP) als Kommunktationsprotokoll. SOAP ist ein auf XML basierendes Format, um Nachrichten zu versenden und ist sowohl Plattform- wie auch Sprachunabhängig.
Aufbau einer SOAP-Nachricht
Eine SOAP-Nachricht ist eine einfache XML-Struktur, die folgende Elemente enthält bzw. enthalten kann:
- ein Envelope Element
- ein Header Element (optional)
- ein Body Element mit optionalem Fault Element
Desweiteren unterliegen SOAP-Nachrichten bestimmten Einschränkungen, die im Folgenden zusammengefasst sind:
- Jede SOAP-Nachricht muss ein gültiges XML-Dokument sein
- Alle SOAP-Elemente müssen in folgendem Namespace deklariert sein:
http://www.w3.org/2001/12/soap-envelope/ - Alle SOAP-Datentypen müssen in folgendem Namensraum deklariert sein:
http://www.w3.org/2001/12/soap-encoding/ - In einer SOAP-Nachricht darf keine Dokumenttyp-Deklaration (DTD) enthalten sein
- In einer SOAP-Nachricht dürfen keine XML Processing Instructions enthalten sein
Beispiel:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
</soap:Body>
</soap:Envelope>
Element: Envelope
Das Envelope Element ist das Wurzelelement einer SOAP-Nachricht und darf nur einmal pro Nachricht definiert werden. Jede SOAP-Nachricht muss ein Envelope Element enthalten.
Element: Header
Das Header Element ist optional und muss, sofern angegeben, das erste Element innerhalb des Envelope Elements sein. Im Header Element können beliebige Einträge abgelegt werden. Typischer weise enthalten Header Elemente Transaktionsdaten, Zugriffsdaten (Benutzername, Kennwort) oder Routinginformationen. Die Header Einträge müssen durch einen eigenen Namensraum (Namespace) deklariert werden.
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"
xmlns:myapp="http://www.bitworld.de/myapp/">
<soap:Header>
<myapp:Authentication>
<myapp:Username>chris</myapp:Username>
<myapp:Password>encrypted</myapp:Password>
</myapp:Authentication>
</soap:Header>
<soap:Body>
...
</soap:Body>
</soap:Envelope>
In dem Header Element können die Einträge durch zusätzliche SOAP-Attribute spezifiziert werden.
Attribut (Header Eintrag): actor
Eine SOAP-Nachricht kannüber verschiedene Knotenpunkte (Server) weitergereicht werden. Mit den Attribut actor kann ein Header Eintrag für einen bestimmten Knotenpunkt zur Auswertung markiert werden, d.h. nur der angegebene Knoten darf den Eintrag auswerten, alle anderen Knoten müssen diesen ignorieren. Der Attributwert ist entweder der URI des Knotenpunkttes, für den der Eintrag bestimmt ist, oder der reserviert URI http://schemas.xmlsoap.org/soap/action/next , welcher den aktuellen Knoten zur Auswertung des Header Eintrag auffordert.
Hat der aktuelle Knoten den Header Eintrag ausgeführt und ist er nicht der Zielknoten der SOAP-Nachricht, so werden alle für den aktuellen Knoten bestimmten Header Einträge aus der Nachricht entfernt und die Nachricht wird an den nächsten Knoten weitergeleitet.
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"
xmlns:myapp="http://www.bitworld.de/myapp/">
<soap:Header>
<myapp:Authentication soap:actor="http://www.bitworld.de/auth/">
<myapp:Username>chris</myapp:Username>
<myapp:Password>encrypted</myapp:Password>
</myapp:Authentication>
</soap:Header>
<soap:Body>
...
</soap:Body>
</soap:Envelope>
Attribut (Header Eintrag): mustUnderstand
Mit dem Attribut mustUnderstand kann ein Header Eintrag als zwingend notwendig gekennzeichnet werden. Der Empfänger der SOAP-Nachricht muss diesen Header Eintrag auswerten können, sonst muss der Empfänger die Nachricht ablehnen. Ein Wert von 1 kennzeichnet den Eintrag als zwingend notwendig, ein Wert von 0 kennzeichnet den Eintrag als optional.
Attribut (Header Eintrag): encodingStyle
Das Attribut encodingstyle definiert die Datentypen, die für den angegebenen Header Eintrag gültig sind.
Element: Body
In dem Body Element ist die eigentliche Nachricht enthalten. Alle Elemente der Nachricht sollten durch einen eigenen Namensraum gekennzeichnet werden.
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"
xmlns:myapp="http://www.bitworld.de/myapp/">
<soap:Body>
<myapp:SayHello>
<myapp:Name>Christian</myapp:Name>
</myapp:SayHello>
</soap:Body>
</soap:Envelope>
Element: Fault
Es gibt ein spezielle Element, welches im Body angegeben werden kann: das Fault Element. Fault Elemente kennzeichnen Fehler, die bei der Verarbeitung der Nachricht aufgetreten sind. Folglich werden Fault Elementüberlicherweise in Antwort-Nachrichten angegeben, um den Sender der Nachrichtüber aufgetretene Fehler zu informieren.
Das Fault Element verfügtüber vier weitere Unterelemente:
Element (Fault): faultcode
Das Element faultcode gibt den Fehlercode des Fehlers an, der Aufgetreten ist. Es gibt vier mögliche Wert:
VersionMismatch |
Zeigt an, dass für das Envelope Element ein ungültiger Namensraum angegeben wurde. (Der Namensraum definiert die SOAP Version) |
MustUnderstand |
Ein mit dem Attribut mustUnderstand gekennzeichneter Header Eintrag kann von dem aktuellen Knoten nicht verarbeitet werden. |
Client |
Die SOAP-Nachricht konnte nicht verarbeitet werden. |
Server |
Es ist ein interner Server-Fehler aufgetreten. |
Element (Fault): faultstring
In dem Element faultstring kann eine Fehlerbeschreibung angegeben werden.
Element (Fault): faultactor
Das Element faultactor enthält die URI des Knotens, bei dem der Fehler aufgetreten ist.
Element (Fault): detail
In dem Element detail können zusätzliche Informationen zum Fehler angegeben werden (auch in XML-Form).
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding/"
xmlns:myserver="http://www.bitworld.de/myserver/">
<soap:Body>
<soap:Fault>
<soap:faultcode>Server<soap:/faultcode>
<soap:faultstring>Too few parameters<soap:/faultstring>
<soap:detail>
<myserver:details>
<myserver:message>Please enter your name</myserver:message>
</myserver:details>
</soap:detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>

![Validate my RSS feed [Valid RSS]](/templates/bitworld/images/valid-rss.png)
