Neueste Web-Entwicklung Tutorials
 

XML Soap


  • 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>