Die SOAP-Nachricht


... [ Seminar XML & Java ] ... [ SOAP - Index ] ...

Übersicht:


Aufbau

Jede SOAP-Nachricht ist ein XML-Document, das aus drei Teilen besteht: dem SOAP- Envelope, dem SOAP-Header und dem SOAP-Body. Während der SOAP-Header optional ist, müssen die beiden Elemente Envelope und Body in jeder SOAP-Nachricht vorhanden sein. Das eigentliche XML-Dokument ist nun wie folgt aufgebaut:

[ Nach oben ]


Beispiel

Eine Beispielnachricht, eingebettet in einen HTTP-Request:
POST /Aktien HTTP/1.1
Host: www.aktien.de
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "MeineURI"

<SOAP-ENV:Envelope
	xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
	SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/envelope/">
		<SOAP-ENV:Body>
			<M:HoleLetztenKurs xmlns:M="MeineURI">
				<Aktie>SUN</Aktie>
			</M:HoleLetztenKurs>
		</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
...und die darauf erfolgte Antwort:
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/envelope/">
		<SOAP-ENV:Body>
			<M:LetzterKurs xmlns:M="MeineURI">
				<Kurs>107.0</Kurs>
			</M:LetzterKurs>
		</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

[ Nach oben ]


Der SOAP-Envelope

Die Syntax-Regeln lauten wie folgt:

[ Nach oben ]


Das encodingStyle-Attribut

Das Attribut encodingStyle="..." kann benutzt werden, um auf die Ordnungsregeln, die sog. Serialization zu verweisen, die in der SOAP-Nachricht benutzt werden sollen. Dieses Attribut darf in Zusammenhang mit jedem Element benutzt werden, und hat einen eingeschränkten Sichtbarkeitsbereich, der sich auf das Element und alle Kindelemente, die selbst kein encodingStyle-Attribut besitzen, beschränkt. Es gibt keinen vordefinierten Defaultwert für dieses Attribut.

Der Wert des Attributs ist eine geordnete Liste von URIs, die den jeweiligen Satz von Serialization-Regeln identifizieren, der benutzt werden soll. Die einzelnen URIs sind durch Leerzeichen getrennt. Die Ordnung erfolgt dabei von dem speziellsten Regelsatz zum allgemeinsten. Zum Beispiel:

SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

SOAP-ENV:encodingStyle="http://www.aktien.de/encoding/ http://schemas.xmlsoap.org/soap/encoding/"

SOAP-ENV:encodingStyle=""

Die von SOAP vordefinierten Serialization-Regeln werden durch das erste Beispiel identifiziert. Der im letzten Beispiel gezeigte URI der Länge Null weist explizit darauf hin, dass hinsichtlich des encodingStyles der enthaltenen Elemente keine Angaben gemacht werden.

[ Nach oben ]


Der SOAP-Header

SOAP stellt einen flexiblen Mechanismus zum Erweitern einer Nachricht zur Verfügung. Bemerkenswert ist dabei, dass diese Erweiterungen dezentralisiert und modular und ohne vorherige Kenntnisnahme durch den Kommunikationspartner geschehen kann. Typische Anwendungsbeispiele sind unter anderem Authentifizierung und Transaktionsmanagement.

Das Header-Element ist das erste direkte Kindelement des SOAP-Envelope-Elements. Alle direkten Kindelemente des SOAP-Header-Elements werden im folgenden als Header- Entries bezeichnet werden. Die Syntax-Regeln für den SOAP-Header lauten:

[ Nach oben ]


Das actor-Attribut

Eine SOAP-Nachricht kann eventuell auf dem Weg vom Sender zu dem endgültigen Empfänger noch mehrere Zwischenstationen passieren. Eine Zwischenstation ist hier eine SOAP-Anwendung, die sowohl Nachrichten empfangen und verarbeiten als auch weiterleiten kann. Beide, die Zwischenstation und der endgültige Empfänger, werden durch URIs eindeutig identifiziert.

Es kann durchaus vorkommen, das nicht alle Teile der SOAP-Nachricht für den endgültigen Empfänger bestimmt sind, sondern nur für einen oder mehrere Zwischenstationen auf dem Weg, den die Nachricht zurücklegt. Daher muss eine Zwischenstation die Teile der Nachricht, die nur für sie bestimmt sind, aus der Nachricht entfernen, bevor sie sie weiterleitet.

Um den Empfänger eines Teils der Nachricht zu identifizieren, wird das globale SOAP- actor-Attribut eingesetzt. Der aktuelle Wert des actor-Attributs ist dabei ein URI, die den Empfänger identifiziert. Der spezielle URI "http://schemas.xmlsoap.org/soap/actor/next" weist darauf hin, das dieser Teil der Nachricht für die nächste Anwendung bestimmt ist, die die Nachricht verarbeiten wird. Wird zu einem Element des SOAP-Headers kein actor-Attribut angegeben, impliziert dies, das nur der endgültige Empfänger dieser Nachricht das Element verarbeiten soll.

[ Nach oben ]


Das mustUnderstand-Attribut

Mit dem mustUnderstand-Attribut wird festgelegt, ob der jeweilige Empfänger, der durch das actor-Attribut festgelegt wird, diesen Header-Entry verarbeiten muss oder die Verarbeitung optional ist. Der aktuelle Wert des mustUnderstand-Attributs kann dabei 1 oder 0 sein, wobei 0 der Default-Wert ist, der auch bei Abwesenheit des mustUnderstand- Attributs angenommen wird.

Ein mustUnderstand-Attribut mit dem aktuellen Wert 1 bedeutet für den Empfänger des so ausgezeichneten Elements, dass er entweder den Semantiken des Elements Folge zu leisten hat und das Element damit korrekt verarbeiten muss, oder andernfalls im Verarbeiten der Nachricht versagt und einen Fehler zurückgeben muss.

Der Zweck dieses Attribut ist ein vorhersagefähiges Verhalten beim Verarbeiten von Elementen durch eine SOAP-Anwendung zu erzwingen. Es soll sichergestellt werden, dass eine Anwendung nur Elemente verarbeitet, die sie kennt, und andererseits essentiell wichtige Elemente, die für sie bestimmt, aber ihr unbekannt sind, nicht einfach ignoriert. Ein wichtiges Einsatzgebiet für das mustUnderstand-Attribut öffnet sich dort, wo mehrere Header-Entries in Beziehung miteinander stehen, und nicht ein Element ohne das andere ausgewertet werden darf.

[ Nach oben ]


Der SOAP-Body

Das Body-Element einer SOAP-Nachricht stellt einen einfachen Mechanismus zum Austausch der eigentlich der Nachricht zugrundeliegenden Informationen zur Verfügung. Das Body-Element entspricht einem Header-Element mit einem aktuellen mustUnderstand-Wert von 1 und dem endgültigen Empfänger der Nachricht als actor. Typische Einsatzbereiche sind etwa Remote Procedure Calls und Fehlerdiagnose.

Das Body-Element ist ein direktes Kindelement des SOAP-Envelope-Elements, und steht damit entweder direkt nach dem Header-Element (wenn eins vorhanden ist), oder ist das erste Kindelement des Envelope-Elements.

Alle direkten Kindelemente des Body-Elements werden als Body-Entries bezeichnet, wobei jeder Body-Entry ein unabhängiges Element im SOAP-Body darstellt. Die Syntaxregeln sind wie folgt:

Im SOAP ist ein Body-Element vordefiniert, das Fault-Element, welches zur Fehlerdiagnose dienen kann.

[ Nach oben ]


Das Fault-Element

Das Fault-Element wird benutzt, um Informationen über eventuell aufgetretene Fehler in einer SOAP-Nachricht zu übermitteln. Falls es in einer Nachricht vorhanden ist, muss das Fault-Element ein Body-Entry sein und darf nur höchstens einmal in der gesamten Nachricht vorkommen.

Für das Fault-Element existieren die folgenden Kindelemente:

[ Nach oben ]


Vordefinierte SOAP-Fehlercodes

[ Nach oben ]


... [ Seminar XML & Java ] ... [ SOAP - Index ] ... [ Die SOAP-Nachricht ] ...