Nachrichten verschicken mit SOAP - Die SOAP-Spezifikation

Der SOAP Header

Der SOAP Header ist ein optionales Element. Dort werden die Metainformationen der Nachricht untergebracht. Dies können Informationen über das Routing der Nachricht, über eine eventuelle Verschlüsselung oder über die Zugehörigkeit zu einer Transaktion sein. Der Header kann genau einmal vorkommen und muss das erste Element des Envelopes sein.

Die Blöcke werden durch einen eindeutigen URI identifiziert und können so den Knoten zugeordnet werden. Durch diesen Mechanismus bleiben SOAP-Nachrichten flexibel und können durch die zusätzliche Spezifikation von solchen Blöcken erweitert werden, ohne Information über die eigentlichen kommunizierenden Partner vorauszusetzen.

Übertragen werden können beliebige Informationen, wobei in der Praxis bestimmte Bereiche dominieren. Ein typisches Anwendungsgebiet für das Übertragen im Header sind etwa Sicherheitsinformationen:

1 <?xml version="1.0" ?>
2 <env:Envelope xmlns:env="http://www.w3.org/2002/12/soap-envelope">
3 <env:Header>
4 <login:sicherheit xmlns:login=http://example.com
5 env:role=http://example.com/Login
6 env:mustUnderstand=“true“>
7 <login:benutzername>Peter Muster</login:benutzername>
8 <login:passwort>meinpasswort</login:passwort>
9 </login:sicherheit>
10 <audit:administration xmlns:audit=http://example.com/audit
11 env:role="http://www.w3.org/2002/12/soap-envelope/role/next">
12 ...
13 ...
14 </audit:administration>
15 </env:Header>
16 <env:Body >
17 ...
18 ...
19 </env:Body>
20 </env:Envelope>

Eine SOAP-Nachricht muss nicht immer direkt vom Sender zum Empfänger übertragen werden. Sie kann ihr Ziel auch über mehrere Zwischenstationen („Intermediares“) erreichen. Header-Elemente können direkt an solche Zwischenstationen adressiert sein. Jede der Stationen muss dabei die Header-Elemente verstehen und bearbeiten können.

Hat eine Zwischenstation ein Element bearbeitet, muss es aus der Nachricht entfernt oder zumindest abgeändert werden. Um genau zu bestimmen, wie ein Header-Element verarbeitet werden muss, können für jedes Element weitere Attribute definiert werden.

In dem Beispiel oben gibt es für die Elemente im Header (Zeile3) die Vorgabe, maximal drei Attribute besitzen zu dürfen: „mustUnderstand“, „role“ und „relay“. Das Attribut „role“ (Zeile 5) etwa spezifiziert den Empfänger bzw. die Zwischenstation, die das Header-Element verarbeiten darf. Diese können über eine gültige URI identifiziert werden.

Das mustUnderstand (Zeile 6) Attribut nimmt die Werte true oder false an und kann benutzt werden, um den Empfänger der SOAP-Nachricht mitzuteilen, dass das zugehörige Header-Element auf jeden Fall von ihm verstanden werden muss. Falls der Empfänger diese Nachricht nicht verarbeiten kann, muss er sie ablehnen.