SOAP - Guide rapide

SOAP est un acronyme pour Simple Object Access Protocol. Il s'agit d'un protocole de messagerie basé sur XML pour l'échange d'informations entre ordinateurs. SOAP est une application de la spécification XML.

Points à noter

  • SOAP est un protocole de communication conçu pour communiquer via Internet.

  • SOAP peut étendre HTTP pour la messagerie XML.

  • SOAP assure le transport de données pour les services Web.

  • SOAP peut échanger des documents complets ou appeler une procédure à distance.

  • SOAP peut être utilisé pour diffuser un message.

  • SOAP est indépendant de la plate-forme et de la langue.

  • SOAP est le moyen XML de définir quelles informations sont envoyées et comment.

  • SOAP permet aux applications clientes de se connecter facilement à des services distants et d'appeler des méthodes distantes.

Bien que SOAP puisse être utilisé dans une variété de systèmes de messagerie et puisse être fourni via une variété de protocoles de transport, l'objectif initial de SOAP est les appels de procédure à distance transportés via HTTP.

D'autres frameworks, dont CORBA, DCOM et Java RMI, fournissent des fonctionnalités similaires à SOAP, mais les messages SOAP sont entièrement écrits en XML et sont donc uniquement indépendants de la plate-forme et du langage.

Un message SOAP est un document XML ordinaire contenant les éléments suivants -

  • Envelope- Définit le début et la fin du message. C'est un élément obligatoire.

  • Header- Contient tout attribut facultatif du message utilisé dans le traitement du message, soit à un point intermédiaire, soit à l'extrémité ultime. C'est un élément optionnel.

  • Body- Contient les données XML constituant le message envoyé. C'est un élément obligatoire.

  • Fault - Un élément Fault facultatif qui fournit des informations sur les erreurs qui se produisent lors du traitement du message.

Tous ces éléments sont déclarés dans l'espace de noms par défaut de l'enveloppe SOAP - http://www.w3.org/2001/12/soap-envelope et l'espace de noms par défaut pour le codage SOAP et les types de données est - http://www.w3.org/2001/12/soap-encoding

NOTE- Toutes ces spécifications sont susceptibles d'être modifiées. Continuez donc à vous mettre à jour avec les dernières spécifications disponibles sur le site Web de W3.

Structure des messages SOAP

Le bloc suivant décrit la structure générale d'un message SOAP -

<?xml version = "1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      ...
      ...
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      ...
      ...
      <SOAP-ENV:Fault>
         ...
         ...
      </SOAP-ENV:Fault>
      ...
   </SOAP-ENV:Body>
</SOAP_ENV:Envelope>

L'enveloppe SOAP indique le début et la fin du message afin que le récepteur sache quand un message entier a été reçu. L'enveloppe SOAP résout le problème de savoir quand vous avez fini de recevoir un message et que vous êtes prêt à le traiter. L'enveloppe SOAP est donc essentiellement un mécanisme de conditionnement.

Points à noter

  • Chaque message SOAP a un élément Enveloppe racine.

  • L'enveloppe est une partie obligatoire du message SOAP.

  • Chaque élément Envelope doit contenir exactement un élément Body.

  • Si une enveloppe contient un élément d'en-tête, elle ne doit pas en contenir plus d'un et elle doit apparaître comme le premier enfant de l'enveloppe, avant le corps.

  • L'enveloppe change lorsque les versions SOAP changent.

  • L'enveloppe SOAP est spécifiée à l'aide du préfixe d'espace de noms ENV et de l'élément Envelope.

  • Le codage SOAP facultatif est également spécifié à l'aide d'un nom d'espace de noms et de l' élément facultatif encodingStyle , qui peut également pointer vers un style de codage autre que SOAP.

  • Un processeur SOAP compatible v1.1 génère une erreur lors de la réception d'un message contenant l'espace de noms de l'enveloppe v1.2.

  • Un processeur SOAP compatible v1.2 génère une erreur VersionMismatch s'il reçoit un message qui n'inclut pas l'espace de noms de l'enveloppe v1.2.

Message SOAP conforme à la v1.2

Vous trouverez ci-dessous un exemple de message SOAP compatible v1.2.

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

SOAP avec HTTP POST

L'exemple suivant illustre l'utilisation d'un message SOAP dans une opération HTTP POST, qui envoie le message au serveur. Il montre les espaces de noms pour la définition de schéma d'enveloppe et pour la définition de schéma des règles de codage. La référence OrderEntry dans l'en-tête HTTP est le nom du programme à appeler sur le site Web tutorialspoint.com.

POST /OrderEntry HTTP/1.1
Host: www.tutorialspoint.com
Content-Type: application/soap; charset = "utf-8"
Content-Length: nnnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

NOTE - La liaison HTTP spécifie l'emplacement du service.

L'élément facultatif Header offre un cadre flexible pour spécifier des exigences supplémentaires au niveau de l'application. Par exemple, l'élément Header peut être utilisé pour spécifier une signature numérique pour les services protégés par mot de passe. De même, il peut être utilisé pour spécifier un numéro de compte pour les services SOAP payants à l'utilisation.

Points à noter

  • Il s'agit d'une partie facultative d'un message SOAP.

  • Les éléments d'en-tête peuvent apparaître plusieurs fois.

  • Les en-têtes sont destinés à ajouter de nouvelles fonctionnalités et fonctionnalités.

  • L'en-tête SOAP contient des entrées d'en-tête définies dans un espace de noms.

  • L'en-tête est codé en tant que premier élément enfant immédiat de l'enveloppe SOAP.

  • Lorsque plusieurs en-têtes sont définis, tous les éléments enfants immédiats de l'en-tête SOAP sont interprétés comme des blocs d'en-tête SOAP.

Attributs d'en-tête SOAP

Un en-tête SOAP peut avoir les deux attributs suivants -

Attribut acteur

Le protocole SOAP définit un chemin de message comme une liste de nœuds de service SOAP. Chacun de ces nœuds intermédiaires peut effectuer un certain traitement, puis transmettre le message au nœud suivant de la chaîne. En définissant l'attribut Actor, le client peut spécifier le destinataire de l'en-tête SOAP.

Attribut MustUnderstand

Il indique si un élément Header est facultatif ou obligatoire. S'il est défini sur true, le destinataire doit comprendre et traiter l'attribut Header selon sa sémantique définie, ou renvoyer une erreur.

L'exemple suivant montre comment utiliser un en-tête dans un message SOAP.

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = " http://www.w3.org/2001/12/soap-envelope"   
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      <t:Transaction 
         xmlns:t = "http://www.tutorialspoint.com/transaction/" 
         SOAP-ENV:mustUnderstand = "true">5
      </t:Transaction>
   </SOAP-ENV:Header>
   ...
   ...
</SOAP-ENV:Envelope>

Le corps SOAP est un élément obligatoire qui contient les données XML définies par l'application échangées dans le message SOAP. Le corps doit être contenu dans l'enveloppe et doit suivre tous les en-têtes qui pourraient être définis pour le message.

Le corps est défini comme un élément enfant de l'enveloppe et la sémantique du corps est définie dans le schéma SOAP associé.

Le corps contient des informations obligatoires destinées au destinataire ultime du message. Par exemple -

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotation xmlns:m = "http://www.tp.com/Quotation">
         <m:Item>Computers</m:Item>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

L'exemple ci-dessus demande un devis d'ensembles d'ordinateurs. Notez que les éléments m: GetQuotation et Item ci-dessus sont des éléments spécifiques à l'application. Ils ne font pas partie de la norme SOAP.

Voici la réponse à la requête ci-dessus -

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotationResponse xmlns:m = "http://www.tp.com/Quotation">
         <m:Quotation>This is Qutation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Normalement, l'application définit également un schéma contenant la sémantique associée aux éléments de demande et de réponse.

Le service Devis peut être implémenté à l'aide d'un EJB s'exécutant sur un serveur d'applications; si tel est le cas, le processeur SOAP serait chargé de mapper les informations de corps en tant que paramètres dans et hors de l'implémentation EJB du service GetQuotationResponse . Le processeur SOAP peut également mapper les informations de corps sur un objet .NET, un objet CORBA, un programme COBOL, etc.

Si une erreur se produit pendant le traitement, la réponse à un message SOAP est un élément d'erreur SOAP dans le corps du message et l'erreur est renvoyée à l'expéditeur du message SOAP.

Le mécanisme de panne SOAP renvoie des informations spécifiques sur l'erreur, notamment un code prédéfini, une description et l'adresse du processeur SOAP qui a généré l'erreur.

Points à noter

  • Un message SOAP ne peut porter qu'un seul bloc d'erreur.

  • L'erreur est une partie facultative d'un message SOAP.

  • Pour la liaison HTTP, une réponse réussie est liée à la plage de 200 à 299 codes d'état.

  • SOAP Fault est lié à la plage de 500 à 599 codes d'état.

Sous-éléments de défaut

L'erreur SOAP comprend les sous-éléments suivants -

Sr.Non Sous-élément et description
1

<faultCode>

C'est un code texte utilisé pour indiquer une classe d'erreurs. Voir le tableau suivant pour une liste des codes d'erreur prédéfinis.

2

<faultString>

C'est un message texte expliquant l'erreur.

3

<faultActor>

Il s'agit d'une chaîne de texte indiquant qui a causé l'erreur. Il est utile si le message SOAP traverse plusieurs nœuds dans le chemin du message SOAP et que le client a besoin de savoir quel nœud a provoqué l'erreur. Un nœud qui n'agit pas comme destination ultime doit inclure un élément faultActor .

4

<detail>

C'est un élément utilisé pour transporter des messages d'erreur spécifiques à l'application. L'élément de détail peut contenir des éléments enfants appelés entrées de détail.

Codes d'erreur SOAP

Les valeurs faultCode définies ci-dessous doivent être utilisées dans l' élément faultcode lors de la description des défauts.

Sr.Non Erreur de description
1

SOAP-ENV:VersionMismatch

Un espace de noms non valide a été trouvé pour l'élément Enveloppe SOAP.

2

SOAP-ENV:MustUnderstand

Un élément enfant immédiat de l'élément Header, avec l'attribut mustUnderstand défini sur "1", n'a pas été compris.

3

SOAP-ENV:Client

Le message était incorrectement formé ou contenait des informations incorrectes.

4

SOAP-ENV:Server

Il y a eu un problème avec le serveur, le message n'a donc pas pu continuer.

Exemple d'erreur SOAP

Le code suivant est un exemple d'erreur. Le client a demandé une méthode nommée ValidateCreditCard , mais le service ne prend pas en charge une telle méthode. Cela représente une erreur de demande client et le serveur renvoie la réponse SOAP suivante -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode xsi:type = "xsd:string">SOAP-ENV:Client</faultcode>
         <faultstring xsi:type = "xsd:string">
            Failed to locate method (ValidateCreditCard) in class (examplesCreditCard) at
               /usr/local/ActivePerl-5.6/lib/site_perl/5.6.0/SOAP/Lite.pm line 1555.
         </faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP inclut un ensemble intégré de règles pour le codage des types de données. Il permet au message SOAP d'indiquer des types de données spécifiques, tels que des entiers, des flottants, des doubles ou des tableaux.

  • Les types de données SOAP sont divisés en deux grandes catégories: les types scalaires et les types composés.

  • Les types scalaires contiennent exactement une valeur telle qu'un nom de famille, un prix ou une description de produit.

  • Les types composés contiennent plusieurs valeurs telles qu'un bon de commande ou une liste de cotations boursières.

  • Les types composés sont subdivisés en tableaux et structures.

  • Le style de codage d'un message SOAP est défini via l' attribut SOAP-ENV: encodingStyle .

  • Pour utiliser le codage SOAP 1.1, utilisez la valeur http://schemas.xmlsoap.org/soap/encoding/

  • Pour utiliser le codage SOAP 1.2, utilisez la valeur http://www.w3.org/2001/12/soap-encoding

  • La dernière spécification SOAP adopte tous les types intégrés définis par XML Schema. Pourtant, SOAP maintient sa propre convention pour définir les constructions non standardisées par XML Schema, telles que les tableaux et les références.

Types scalaires

Pour les types scalaires, SOAP adopte tous les types simples intégrés spécifiés par la spécification XML Schema. Cela inclut les chaînes, les flottants, les doubles et les entiers.

Le tableau suivant répertorie les principaux types simples, extraits de XML Schema Part 0 - Primer http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

Types simples intégrés au schéma XML
Type simple Exemples)
chaîne Confirmez que c'est électrique.
booléen vrai, faux, 1, 0.
flotte -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
double -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
décimal -1,23, 0, 123,4, 1000,00.
binaire 100010
entier -126789, -1, 0, 1, 126789.
nonPositiveInteger -126789, -1, 0.
négatifInteger -126789, -1.
longue -1, 12678967543233
int -1, 126789675
court -1, 12678
octet -1, 126
nonNegativeInteger 0, 1, 126789
non signé 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
positiveInteger 1, 126789.
Date 1999-05-31, --- 05.
temps 13: 20: 00.000, 13: 20: 00.000-05: 00

Par exemple, voici une réponse SOAP avec un double type de données -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
   
   <SOAP-ENV:Body>
      <ns1:getPriceResponse 
         xmlns:ns1 = "urn:examples:priceservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
         <return xsi:type = "xsd:double">54.99</return>
      </ns1:getPriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Types de composés

Les tableaux SOAP ont un ensemble de règles très spécifiques, qui nécessitent que vous spécifiiez à la fois le type d'élément et la taille du tableau. SOAP prend également en charge les tableaux multidimensionnels, mais toutes les implémentations SOAP ne prennent pas en charge les fonctionnalités multidimensionnelles.

Pour créer un tableau, vous devez le spécifier en tant que type xsi: de tableau. Le tableau doit également inclure un attribut arrayType . Cet attribut est requis pour spécifier le type de données des éléments contenus et la ou les dimension (s) du tableau.

Par exemple, l'attribut suivant spécifie un tableau de 10 valeurs doubles -

arrayType = "xsd:double[10]"

En revanche, l'attribut suivant spécifie un tableau bidimensionnel de chaînes -

arrayType = "xsd:string[5,5]"

Voici un exemple de réponse SOAP avec un tableau de valeurs doubles -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getPriceListResponse 
         xmlns:ns1 = "urn:examples:pricelistservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

         <return xmlns:ns2 = "http://www.w3.org/2001/09/soap-encoding"  
            xsi:type = "ns2:Array" ns2:arrayType = "xsd:double[2]">
            <item xsi:type = "xsd:double">54.99</item>
            <item xsi:type = "xsd:double">19.99</item>
         </return>
      </ns1:getPriceListResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Les structures contiennent plusieurs valeurs, mais chaque élément est spécifié avec un élément accesseur unique. Par exemple, considérez un article dans un catalogue de produits. Dans ce cas, la structure peut contenir une référence produit, un nom de produit, une description et un prix. Voici comment une telle structure serait représentée dans un message SOAP -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getProductResponse
         xmlns:ns1 = "urn:examples:productservice" 
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
		
         <return xmlns:ns2 = "urn:examples" xsi:type = "ns2:product">
            <name xsi:type = "xsd:string">Red Hat Linux</name>
            <price xsi:type = "xsd:double">54.99</price>
            <description xsi:type = "xsd:string">
               Red Hat Linux Operating System
            </description>
            <SKU xsi:type = "xsd:string">A358185</SKU>
         </return>
      </ns1:getProductResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

NOTE- Veuillez prendre soin de l'indentation appropriée pendant que vous écrivez votre code SOAP. Chaque élément d'une structure est spécifié avec un nom d'accesseur unique. Par exemple, le message ci-dessus comprend quatre éléments d'accesseur - nom, prix, description et SKU. Chaque élément peut avoir son propre type de données. Par exemple, le nom est spécifié sous forme de chaîne, tandis que le prix est spécifié comme double.

SOAP n'est lié à aucun protocole de transport. SOAP peut être transporté via SMTP, FTP, MQSeries d'IBM ou Microsoft Message Queuing (MSMQ).

La spécification SOAP inclut des détails sur HTTP uniquement. HTTP reste le protocole de transport SOAP le plus populaire.

SOAP via HTTP

Très logiquement, les requêtes SOAP sont envoyées via une requête HTTP et les réponses SOAP sont renvoyées dans le contenu de la réponse HTTP. Alors que les requêtes SOAP peuvent être envoyées via HTTP GET, la spécification inclut des détails sur HTTP POST uniquement.

De plus, les requêtes et les réponses HTTP sont requises pour définir leur type de contenu sur text / xml.

La spécification SOAP oblige le client à fournir un en -tête SOAPAction, mais la valeur réelle de l'en-tête SOAPAction dépend de l'implémentation du serveur SOAP.

Par exemple, pour accéder au service de traduction AltaVista BabelFish, hébergé par XMethods, vous devez spécifier ce qui suit comme en-tête SOAPAction.

urn:xmethodsBabelFish#BabelFish

Même si le serveur ne nécessite pas un en-tête SOAPAction complet, le client doit spécifier une chaîne vide ("") ou une valeur nulle. Par exemple -

SOAPAction: ""
SOAPAction:

Voici un exemple de requête envoyée via HTTP au service de traduction XMethods Babelfish -

POST /perl/soaplite.cgi HTTP/1.0
Host: services.xmethods.com
Content-Type: text/xml; charset = utf-8
Content-Length: 538
SOAPAction: "urn:xmethodsBabelFish#BabelFish"

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:BabelFish
         xmlns:ns1 = "urn:xmethodsBabelFish"
         SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/">
         <translationmode xsi:type = "xsd:string">en_fr</translationmode>
         <sourcedata xsi:type = "xsd:string">Hello, world!</sourcedata>
      </ns1:BabelFish>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Notez le type de contenu et l'en-tête SOAPAction. Notez également que la méthode BabelFish nécessite deux paramètres String. Le mode de traduction en_fr traduit de l'anglais vers le français.

Voici la réponse de XMethods -

HTTP/1.1 200 OK
Date: Sat, 09 Jun 2001 15:01:55 GMT
Server: Apache/1.3.14 (Unix) tomcat/1.0 PHP/4.0.1pl2
SOAPServer: SOAP::Lite/Perl/0.50
Cache-Control: s-maxage = 60, proxy-revalidate
Content-Length: 539
Content-Type: text/xml

<?xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
   SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
   
   <SOAP-ENV:Body>
      <namesp1:BabelFishResponse xmlns:namesp1 = "urn:xmethodsBabelFish">
         <return xsi:type = "xsd:string">Bonjour, monde!</return>
      </namesp1:BabelFishResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Les réponses SOAP fournies via HTTP doivent suivre les mêmes codes d'état HTTP. Par exemple, un code d'état de 200 OK indique une réponse réussie. Un code d'état de 500 Erreur interne du serveur indique qu'il y a une erreur de serveur et que la réponse SOAP comprend un élément Fault.

Dans l'exemple ci-dessous, une demande GetQuotation est envoyée à un serveur SOAP via HTTP. La demande a un paramètre QuotationName et un devis sera renvoyé dans la réponse.

L'espace de noms de la fonction est défini dans http://www.xyz.org/quotation adresse.

Voici la requête SOAP -

POST /Quotation HTTP/1.0
Host: www.xyz.org
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotations">
      <m:GetQuotation>
         <m:QuotationsName>MiscroSoft</m:QuotationsName>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Une réponse SOAP correspondante ressemble à -

HTTP/1.0 200 OK
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotation">
      <m:GetQuotationResponse>
         <m:Quotation>Here is the quotation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP 1.1 a été initialement soumis au W3C en mai 2000. Les soumissionnaires officiels comprenaient de grandes entreprises telles que Microsoft, IBM et Ariba, et des entreprises plus petites telles que UserLand Software et DevelopMentor.

En juillet 2001, le groupe de travail sur le protocole XML a publié un «projet de travail» de SOAP 1.2. Au sein du W3C, ce document est officiellement un travail en cours, ce qui signifie que le document est susceptible d'être mis à jour plusieurs fois avant d'être finalisé.

SOAP Version 1.1 est disponible en ligne sur http://www.w3.org/TR/SOAP/

L'ébauche de travail de SOAP Version 1.2 est disponible sur http://www.w3.org/TR/soap12/

Notez que le W3C héberge également une soumission pour «Messages SOAP avec pièces jointes», qui se sépare de la spécification SOAP principale. Cette spécification permet aux messages SOAP d'inclure des pièces jointes binaires telles que des images et des fichiers audio. Pour plus de détails, consultez la note du W3C à l'adressehttp://www.w3.org/TR/SOAP-attachments.