- SOAP steht für Simple Object Access P rotokoll
- SOAP ist eine Anwendung, Kommunikationsprotokoll
- SOAP ist ein Format für das Senden und Empfangen von Nachrichten
- SOAP ist plattformunabhängig
- SOAP basiert auf XML
- SOAP ist eine W3C-Empfehlung
Warum SOAP?
Es ist wichtig für Web-Anwendungen in der Lage zu sein, das Internet zu kommunizieren.
Der beste Weg, zwischen Anwendungen zu kommunizieren ist über HTTP, weil HTTP von allen Internet-Browsern und Servern unterstützt wird. SOAP wurde geschaffen, um dies zu erreichen.
SOAP bietet eine Möglichkeit, zwischen Anwendungen zu kommunizieren auf verschiedenen Betriebssystemen laufen, mit unterschiedlichen Technologien und Programmiersprachen.
SOAP-Bausteine
Eine SOAP-Nachricht ist eine ganz normale XML-Dokument die folgenden Elemente enthält:
- Ein Umschlag Element, das das XML-Dokument als SOAP-Nachricht identifiziert
- Ein Kopfelement, das Header-Informationen enthält
- Ein Körperelement, das Gespräch und Antwortinformation enthält
- Ein Fehler Element enthält Fehler und Statusinformationen
Alle oben genannten Elemente sind in der Standard-Namespace für den SOAP-Umschlag erklärt:
http://www.w3.org/2003/05/soap-envelope/
und die Standard-Namespace für SOAP-Codierung und Datentypen:
http://www.w3.org/2003/05/soap-encoding
Syntaxregeln
Hier sind einige wichtige Syntaxregeln:
- Eine SOAP-Nachricht muss codiert werden unter Verwendung von XML
- Eine SOAP-Nachricht muss der SOAP-Envelope-Namespace verwenden
- Eine SOAP-Nachricht muss die SOAP-Encoding-Namespace verwenden
- Eine SOAP-Nachricht darf nicht zu einer DTD-Referenz enthalten
- Eine SOAP-Nachricht darf NICHT XML-Verarbeitungsanweisungen enthalten
Skeleton SOAP-Nachricht
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
Der SOAP-Envelope-Element
Die erforderliche SOAP Envelope Element ist das Wurzelelement einer SOAP-Nachricht. Dieses Element definiert das XML-Dokument als SOAP-Nachricht.
Beispiel
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
Die xmlns: Seife Namespace
Beachten Sie die xmlns: Seife Namespace in dem obigen Beispiel. Es sollte immer den Wert: "http://www.w3.org/2003/05/soap-envelope/" .
Der Namensraum definiert den Umschlag als SOAP-Umschlag.
Wenn ein anderer Namespace verwendet wird, generiert die Anwendung einen Fehler und verwirft die Nachricht.
Die encodingStyle Attribut
Das encodingStyle Attribut wird verwendet , um die Datentypen im Dokument verwendet zu definieren. Dieses Attribut kann auf jedem SOAP Element erscheinen, und gilt für das Element den Inhalt und alle untergeordneten Elemente.
Eine SOAP-Nachricht hat keine Standard-Kodierung.
Syntax
soap:encodingStyle="URI"
Beispiel
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
Der SOAP-Header-Element
Das optionale SOAP - Header - Element enthält anwendungsspezifische Informationen (like authentication, payment, etc) über die SOAP - Nachricht.
Wenn die Header-Element vorhanden ist, muss es das erste Kind-Element des Envelope Element sein.
Note: Alle unmittelbar untergeordneten Elemente des Kopfelement Namespace-qualifiziert sein müssen.
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
Das obige Beispiel enthält einen Header mit einem "Trans" Element, ein "mustUnderstand" Attribut mit einem Wert von 1 und einem Wert von 234.
SOAP definiert drei Attribute in der Standard-Namespace. Diese Attribute sind: mustunderstand, Schauspieler und encodingStyle.
Die Attribute im SOAP-Header definiert definiert, wie ein Empfänger sollte die SOAP-Nachricht verarbeiten.
Die mustUnderstand Attribut
Die SOAP mustunderstand-Attribut kann verwendet werden, um anzuzeigen, ob ein Kopfeintrag ist obligatorisch oder optional für den Empfänger zu verarbeiten.
Wenn Sie mustunderstand = "1" auf ein untergeordnetes Element des Header-Element hinzufügen, zeigt es an, dass der Empfänger den Header-Verarbeitung des Elements erkennen müssen. Wenn der Empfänger nicht das Element erkennt wird es fehlschlagen, wenn die Header-Verarbeitung.
Syntax
soap:mustUnderstand="0|1"
Beispiel
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
Der actor Attribut
Eine SOAP-Nachricht, indem verschiedene Endpunkte entlang der Nachrichtenpfad zu einem Empfänger von einem Sender reisen. Allerdings sind nicht alle Teile einer SOAP-Nachricht kann für die ultimative Endpunkt statt bestimmt, kann es für eine oder mehrere der Endpunkte auf den Nachrichtenpfad bestimmt.
Der SOAP-Schauspieler-Attribut wird verwendet, um die Header-Element an einen bestimmten Endpunkt zu adressieren.
Syntax
soap:actor="URI"
Beispiel
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:actor="http://www.w3ii.com/appml/">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
Die encodingStyle Attribut
Das encodingStyle Attribut wird verwendet , um die Datentypen im Dokument verwendet zu definieren. Dieses Attribut kann auf jedem SOAP Element erscheinen, und es wird auf dieses Element den Inhalt und alle untergeordneten Elemente anwenden.
Eine SOAP-Nachricht hat keine Standard-Kodierung.
Syntax
soap:encodingStyle="URI"
Die SOAP-Body-Element
Die erforderliche SOAP-Body-Element enthält die eigentliche SOAP-Nachricht für die ultimative Endpunkt der Nachricht bestimmt.
Sofort untergeordneten Elemente des SOAP-Body-Element kann Namespace-qualifiziert sein.
Beispiel
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="http://www.w3ii.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
Das obige Beispiel fordert den Preis von Äpfeln. Beachten Sie, dass die m: GetPrice und die Item-Elemente über anwendungsspezifische Elemente sind. Sie sind nicht Teil des SOAP-Namespace.
Eine SOAP-Antwort könnte in etwa so aussehen:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3ii.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
Die SOAP-Fehler Element
Das optionale SOAP-Fehler-Element wird verwendet, um Fehlermeldungen anzuzeigen.
Die SOAP-Fehler Element hält Fehler und Statusinformationen für eine SOAP-Nachricht.
Wenn ein Fehler Element vorhanden ist, muss es als ein untergeordnetes Element des Körperelement angezeigt. Ein Fehlerelement kann nur einmal in einer SOAP-Nachricht.
Die SOAP-Fehler-Element hat die folgenden Unterelemente:
Sub-Element | Beschreibung |
---|---|
<faultcode> | Ein Code zur Identifizierung des Fehlers |
<faultstring> | Eine für Menschen lesbare Erläuterung des Defekts |
<faultactor> | Informationen darüber, wer den Fehler verursacht passieren |
<detail> | Hält anwendungsspezifische Fehlerinformationen an den Körperelement im Zusammenhang mit |
SOAP-Fehlercodes
Die faultcode Werte unten definiert sind im faultcode Element verwendet werden, wenn Fehler beschrieben werden:
Fehler | Beschreibung |
---|---|
VersionMismatch | Haben Sie einen ungültigen Namespace für den SOAP-Envelope-Element |
MustUnderstand | Ein unmittelbares Kind - Element des Elements Leiste, mit dem mustUnderstand - Attribut auf "1" , wurde nicht verstanden |
Client | Die Nachricht wurde nicht richtig gebildet oder falsche Informationen enthalten |
Server | Es gab ein Problem mit dem Server, so konnte die Meldung nicht gehen |
Das HTTP-Protokoll
HTTP kommuniziert über TCP / IP. Ein HTTP-Client eine Verbindung zu einem HTTP-Server unter Verwendung von TCP. Nach dem Aufbau einer Verbindung kann der Client eine HTTP-Anforderung an den Server senden:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
Der Server verarbeitet die Anforderung und sendet eine HTTP-Antwort zurück an den Client. Die Antwort enthält einen Statuscode, der den Status der Anforderung anzeigt:
200 OK
Content-Type: text/plain
Content-Length: 200
In dem obigen Beispiel, kehrte der Server einen Statuscode 200 für HTTP Dies ist der Standard-Code Erfolg.
Wenn der Server die Anforderung nicht entschlüsseln konnte, könnte es wieder so etwas wie dieses:
400 Bad Request
Content-Length: 0
SOAP Binding
Die SOAP-Spezifikation definiert die Struktur der SOAP-Nachrichten, wie sie nicht ausgetauscht werden. Diese Lücke wird gefüllt durch das, was heißt "SOAP Bindings" . SOAP Bindungen sind Mechanismen, die SOAP-Nachrichten ermöglichen, wirkungsvoll unter Verwendung eines Transportprotokolls ausgetauscht werden.
Die meisten SOAP-Implementierungen bieten Anbindungen für gemeinsame Transportprotokolle wie HTTP oder SMTP.
HTTP ist synchron und weit verbreitet. Ein SOAP-HTTP-Anforderung gibt mindestens zwei HTTP-Header: Content-Type und Content-Length.
SMTP ist asynchron und wird in letzter Instanz oder bestimmten Fällen verwendet.
Java - Implementierungen von SOAP in der Regel eine bestimmte für die JMS - Bindung zur Verfügung stellen (Java Messaging System) Protokoll.
Inhaltstyp
Der Content-Type - Header für eine SOAP - Anforderung und Antwort definiert den MIME - Typ für die Nachricht und die Zeichenkodierung (optional) für die XML - Körper der Anfrage oder Antwort verwendet.
Syntax
Content-Type: MIMEType; charset=character-encoding
Beispiel
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length
Der Content-Length-Header für eine SOAP-Anforderung und Antwort gibt die Anzahl von Bytes in dem Körper der Anfrage oder Antwort.
Syntax
Content-Length: bytes
Beispiel
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
Ein SOAP-Beispiel
In dem folgenden Beispiel wird ein GetStockPrice Anforderung an einen Server gesendet. Der Antrag hat eine StockName Parameter, und ein Preis-Parameter, die in der Antwort zurückgegeben wird. Der Namensraum für die Funktion wird in definierten "http://www.example.org/stock" .
Eine SOAP-Anforderung:
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
Die SOAP-Antwort:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>