SOAP - Guida rapida

SOAP è l'acronimo di Simple Object Access Protocol. È un protocollo di messaggistica basato su XML per lo scambio di informazioni tra computer. SOAP è un'applicazione della specifica XML.

Punti da notare

  • SOAP è un protocollo di comunicazione progettato per comunicare tramite Internet.

  • SOAP può estendere HTTP per la messaggistica XML.

  • SOAP fornisce il trasporto dei dati per i servizi Web.

  • SOAP può scambiare documenti completi o chiamare una procedura remota.

  • SOAP può essere utilizzato per trasmettere un messaggio.

  • SOAP è indipendente dalla piattaforma e dalla lingua.

  • SOAP è il modo XML per definire quali informazioni vengono inviate e come.

  • SOAP consente alle applicazioni client di connettersi facilmente a servizi remoti e richiamare metodi remoti.

Sebbene SOAP possa essere utilizzato in una varietà di sistemi di messaggistica e possa essere distribuito tramite una varietà di protocolli di trasporto, l'obiettivo iniziale di SOAP sono le chiamate di procedura remota trasportate tramite HTTP.

Altri framework, inclusi CORBA, DCOM e Java RMI, forniscono funzionalità simili a SOAP, ma i messaggi SOAP sono scritti interamente in XML e sono quindi indipendenti dalla piattaforma e dal linguaggio.

Un messaggio SOAP è un normale documento XML contenente i seguenti elementi:

  • Envelope- Definisce l'inizio e la fine del messaggio. È un elemento obbligatorio.

  • Header- Contiene tutti gli attributi facoltativi del messaggio utilizzato nell'elaborazione del messaggio, in un punto intermedio o nel punto finale finale. È un elemento opzionale.

  • Body- Contiene i dati XML che compongono il messaggio inviato. È un elemento obbligatorio.

  • Fault - Un elemento Fault opzionale che fornisce informazioni sugli errori che si verificano durante l'elaborazione del messaggio.

Tutti questi elementi sono dichiarati nello spazio dei nomi predefinito per la busta SOAP - http://www.w3.org/2001/12/soap-envelope e lo spazio dei nomi predefinito per la codifica SOAP e i tipi di dati è - http://www.w3.org/2001/12/soap-encoding

NOTE- Tutte queste specifiche sono soggette a modifiche. Quindi continua ad aggiornarti con le ultime specifiche disponibili sul sito Web di W3.

Struttura del messaggio SOAP

Il blocco seguente mostra la struttura generale di un messaggio 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>

La busta SOAP indica l'inizio e la fine del messaggio in modo che il destinatario sappia quando è stato ricevuto un intero messaggio. La busta SOAP risolve il problema di sapere quando hai finito di ricevere un messaggio e sei pronto per elaborarlo. La busta SOAP è quindi fondamentalmente un meccanismo di confezionamento.

Punti da notare

  • Ogni messaggio SOAP ha un elemento Envelope radice.

  • La busta è una parte obbligatoria del messaggio SOAP.

  • Ogni elemento Envelope deve contenere esattamente un elemento Body.

  • Se un Envelope contiene un elemento Header, non deve contenerne più di uno e deve apparire come il primo figlio dell'Envelope, prima del Corpo.

  • La busta cambia quando cambiano le versioni SOAP.

  • La busta SOAP viene specificata utilizzando il prefisso dello spazio dei nomi ENV e l'elemento Envelope.

  • La codifica SOAP facoltativa viene anche specificata utilizzando un nome spazio dei nomi e l' elemento encodingStyle facoltativo , che potrebbe anche puntare a uno stile di codifica diverso da quello SOAP.

  • Un processore SOAP conforme alla v1.1 genera un errore alla ricezione di un messaggio contenente lo spazio dei nomi della busta v1.2.

  • Un processore SOAP conforme alla v1.2 genera un errore VersionMismatch se riceve un messaggio che non include lo spazio dei nomi della busta v1.2.

Messaggio SOAP conforme alla v1.2

Di seguito è riportato un esempio di messaggio SOAP conforme alla 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 con HTTP POST

Il seguente esempio illustra l'uso di un messaggio SOAP all'interno di un'operazione HTTP POST, che invia il messaggio al server. Mostra gli spazi dei nomi per la definizione dello schema della busta e per la definizione dello schema delle regole di codifica. Il riferimento OrderEntry nell'intestazione HTTP è il nome del programma da richiamare sul sito 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 - L'associazione HTTP specifica la posizione del servizio.

L'elemento Header opzionale offre un framework flessibile per specificare requisiti aggiuntivi a livello di applicazione. Ad esempio, l'elemento Header può essere utilizzato per specificare una firma digitale per i servizi protetti da password. Allo stesso modo, può essere utilizzato per specificare un numero di conto per i servizi SOAP pay-per-use.

Punti da notare

  • È una parte facoltativa di un messaggio SOAP.

  • Gli elementi di intestazione possono essere presenti più volte.

  • Le intestazioni hanno lo scopo di aggiungere nuove caratteristiche e funzionalità.

  • L'intestazione SOAP contiene le voci di intestazione definite in uno spazio dei nomi.

  • L'intestazione è codificata come il primo elemento figlio immediato della busta SOAP.

  • Quando vengono definite più intestazioni, tutti gli elementi figlio immediati dell'intestazione SOAP vengono interpretati come blocchi di intestazione SOAP.

Attributi dell'intestazione SOAP

Un'intestazione SOAP può avere i seguenti due attributi:

Attributo attore

Il protocollo SOAP definisce un percorso di messaggio come un elenco di nodi del servizio SOAP. Ciascuno di questi nodi intermedi può eseguire alcune elaborazioni e quindi inoltrare il messaggio al nodo successivo della catena. Impostando l'attributo Actor, il client può specificare il destinatario dell'intestazione SOAP.

Attributo MustUnderstand

Indica se un elemento di intestazione è facoltativo o obbligatorio. Se impostato su true, il destinatario deve comprendere ed elaborare l'attributo Header in base alla semantica definita o restituire un errore.

L'esempio seguente mostra come utilizzare un'intestazione in un messaggio 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>

Il corpo SOAP è un elemento obbligatorio che contiene i dati XML definiti dall'applicazione scambiati nel messaggio SOAP. Il corpo deve essere contenuto all'interno della busta e deve seguire tutte le intestazioni che potrebbero essere definite per il messaggio.

Il corpo è definito come un elemento figlio dell'inviluppo e la semantica per il corpo è definita nello schema SOAP associato.

Il corpo contiene informazioni obbligatorie destinate al destinatario finale del messaggio. Ad esempio:

<?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'esempio sopra richiede una citazione di set di computer. Notare che gli elementi m: GetQuotation e Item sopra sono elementi specifici dell'applicazione. Non fanno parte dello standard SOAP.

Ecco la risposta alla domanda precedente:

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

Normalmente, l'applicazione definisce anche uno schema per contenere la semantica associata agli elementi di richiesta e risposta.

Il servizio di quotazione può essere implementato utilizzando un bean in esecuzione in un server delle applicazioni; in tal caso, il processore SOAP sarebbe responsabile della mappatura delle informazioni sul corpo come parametri all'interno e all'esterno dell'implementazione EJB del servizio GetQuotationResponse . Il processore SOAP potrebbe anche mappare le informazioni del corpo su un oggetto .NET, un oggetto CORBA, un programma COBOL e così via.

Se si verifica un errore durante l'elaborazione, la risposta a un messaggio SOAP è un elemento di errore SOAP nel corpo del messaggio e l'errore viene restituito al mittente del messaggio SOAP.

Il meccanismo di errore SOAP restituisce informazioni specifiche sull'errore, incluso un codice predefinito, una descrizione e l'indirizzo del processore SOAP che ha generato l'errore.

Punti da notare

  • Un messaggio SOAP può contenere un solo blocco di errore.

  • L'errore è una parte facoltativa di un messaggio SOAP.

  • Per il binding HTTP, una risposta corretta è collegata all'intervallo compreso tra 200 e 299 di codici di stato.

  • Il guasto SOAP è collegato alla gamma di codici di stato da 500 a 599.

Sottoelementi di guasto

L'errore SOAP ha i seguenti elementi secondari:

Suor n Sottoelemento e descrizione
1

<faultCode>

È un codice di testo utilizzato per indicare una classe di errori. Vedere la tabella successiva per un elenco di codici di errore predefiniti.

2

<faultString>

È un messaggio di testo che spiega l'errore.

3

<faultActor>

È una stringa di testo che indica chi ha causato l'errore. È utile se il messaggio SOAP viaggia attraverso diversi nodi nel percorso del messaggio SOAP e il client deve sapere quale nodo ha causato l'errore. Un nodo che non funge da destinazione finale deve includere un elemento faultActor .

4

<detail>

È un elemento utilizzato per trasmettere messaggi di errore specifici dell'applicazione. L'elemento dettaglio può contenere elementi figlio chiamati voci di dettaglio.

Codici di errore SOAP

I valori faultCode definiti di seguito devono essere utilizzati nell'elemento faultcode durante la descrizione degli errori.

Suor n Descrizione dell'errore
1

SOAP-ENV:VersionMismatch

Trovato uno spazio dei nomi non valido per l'elemento SOAP Envelope.

2

SOAP-ENV:MustUnderstand

Un elemento figlio immediato dell'elemento Header, con l'attributo mustUnderstand impostato su "1", non è stato compreso.

3

SOAP-ENV:Client

Il messaggio è stato formato in modo errato o conteneva informazioni errate.

4

SOAP-ENV:Server

Si è verificato un problema con il server, quindi il messaggio non ha potuto continuare.

Esempio di errore SOAP

Il codice seguente è un esempio di errore. Il client ha richiesto un metodo denominato ValidateCreditCard , ma il servizio non supporta tale metodo. Questo rappresenta un errore di richiesta del client e il server restituisce la seguente risposta SOAP:

<?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 include un set integrato di regole per la codifica dei tipi di dati. Consente al messaggio SOAP di indicare tipi di dati specifici, come interi, float, double o array.

  • I tipi di dati SOAP sono suddivisi in due grandi categorie: tipi scalari e tipi composti.

  • I tipi scalari contengono esattamente un valore come il cognome, il prezzo o la descrizione del prodotto.

  • I tipi di composto contengono più valori come un ordine di acquisto o un elenco di quotazioni di borsa.

  • I tipi composti sono ulteriormente suddivisi in array e strutture.

  • Lo stile di codifica per un messaggio SOAP viene impostato tramite l' attributo SOAP-ENV: encodingStyle .

  • Per utilizzare la codifica SOAP 1.1, utilizzare il valore http://schemas.xmlsoap.org/soap/encoding/

  • Per utilizzare la codifica SOAP 1.2, utilizzare il valore http://www.w3.org/2001/12/soap-encoding

  • La specifica SOAP più recente adotta tutti i tipi incorporati definiti da XML Schema. Tuttavia, SOAP mantiene la propria convenzione per la definizione di costrutti non standardizzati da XML Schema, come array e riferimenti.

Tipi scalari

Per i tipi scalari, SOAP adotta tutti i tipi semplici incorporati specificati dalla specifica XML Schema. Ciò include stringhe, float, double e interi.

La tabella seguente elenca i principali tipi semplici, estratti da XML Schema Part 0 - Primer http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

Tipi semplici incorporati nello schema XML
Tipo semplice Esempio / i
corda Conferma che è elettrico.
booleano vero, falso, 1, 0.
galleggiante -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN.
Doppio -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN.
decimale -1,23, 0, 123,4, 1000,00.
binario 100010
numero intero -126789, -1, 0, 1, 126789.
nonPositiveInteger -126789, -1, 0.
negativeInteger -126789, -1.
lungo -1, 12678967543233
int -1, 126789675
corto -1, 12678
byte -1, 126
nonNegativeInteger 0, 1, 126789
unsignedLong 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
intero positivo 1, 126789.
Data 31/05/1999, --- 05.
tempo 13: 20: 00.000, 13: 20: 00.000-05: 00

Ad esempio, ecco una risposta SOAP con un doppio tipo di dati:

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

Tipi composti

Gli array SOAP hanno un insieme di regole molto specifico, che richiedono di specificare sia il tipo di elemento che la dimensione dell'array. SOAP supporta anche array multidimensionali, ma non tutte le implementazioni SOAP supportano funzionalità multidimensionali.

Per creare un array, è necessario specificarlo come xsi: tipo di array. L'array deve includere anche un attributo arrayType . Questo attributo è necessario per specificare il tipo di dati per gli elementi contenuti e le dimensioni dell'array.

Ad esempio, il seguente attributo specifica un array di 10 valori doppi:

arrayType = "xsd:double[10]"

Al contrario, il seguente attributo specifica un array bidimensionale di stringhe:

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

Ecco un esempio di risposta SOAP con un array di valori doppi:

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

Le strutture contengono più valori, ma ogni elemento è specificato con un elemento di accesso univoco. Ad esempio, si consideri un articolo all'interno di un catalogo di prodotti. In questo caso, la struttura potrebbe contenere uno SKU del prodotto, un nome del prodotto, una descrizione e un prezzo. Ecco come una struttura di questo tipo sarebbe rappresentata in un messaggio 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- Si prega di fare attenzione alla corretta indentazione mentre si scrive il codice SOAP. Ogni elemento in una struttura è specificato con un nome di accesso univoco. Ad esempio, il messaggio sopra include quattro elementi di accesso: nome, prezzo, descrizione e SKU. Ogni elemento può avere il proprio tipo di dati. Ad esempio, il nome è specificato come una stringa, mentre il prezzo è specificato come doppio.

SOAP non è legato ad alcun protocollo di trasporto. SOAP può essere trasportato tramite SMTP, FTP, IBM's MQSeries o Microsoft Message Queuing (MSMQ).

La specifica SOAP include dettagli solo su HTTP. HTTP rimane il protocollo di trasporto SOAP più popolare.

SOAP tramite HTTP

Logicamente, le richieste SOAP vengono inviate tramite una richiesta HTTP e le risposte SOAP vengono restituite all'interno del contenuto della risposta HTTP. Sebbene le richieste SOAP possano essere inviate tramite HTTP GET, la specifica include i dettagli solo su HTTP POST.

Inoltre, sia le richieste HTTP che le risposte sono necessarie per impostare il tipo di contenuto su text / xml.

La specifica SOAP impone al client di fornire un'intestazione SOAPAction, ma il valore effettivo dell'intestazione SOAPAction dipende dall'implementazione del server SOAP.

Ad esempio, per accedere al servizio di traduzione AltaVista BabelFish, ospitato da XMethods, è necessario specificare quanto segue come intestazione SOAPAction.

urn:xmethodsBabelFish#BabelFish

Anche se il server non richiede un'intestazione SOAPAction completa, il client deve specificare una stringa vuota ("") o un valore null. Ad esempio:

SOAPAction: ""
SOAPAction:

Ecco una richiesta di esempio inviata tramite HTTP al servizio di traduzione di 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>

Prendere nota del tipo di contenuto e dell'intestazione SOAPAction. Si noti inoltre che il metodo BabelFish richiede due parametri String. La modalità di traduzione en_fr traduce dall'inglese al francese.

Ecco la risposta di 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>

Le risposte SOAP fornite tramite HTTP devono seguire gli stessi codici di stato HTTP. Ad esempio, un codice di stato 200 OK indica una risposta riuscita. Un codice di stato di 500 Internal Server Error indica che c'è un errore del server e che la risposta SOAP include un elemento Fault.

Nell'esempio seguente, una richiesta GetQuotation viene inviata a un server SOAP su HTTP. La richiesta ha un parametro QuotationName e nella risposta verrà restituita un'offerta.

Lo spazio dei nomi per la funzione è definito in http://www.xyz.org/quotation indirizzo.

Ecco la richiesta 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>

Una risposta SOAP corrispondente ha il seguente aspetto:

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 è stato originariamente presentato al W3C nel maggio 2000. I presentatori ufficiali includevano grandi aziende come Microsoft, IBM e Ariba e aziende più piccole come UserLand Software e DevelopMentor.

Nel luglio 2001, il gruppo di lavoro sul protocollo XML ha rilasciato una "bozza di lavoro" di SOAP 1.2. All'interno del W3C, questo documento è ufficialmente un work in progress, il che significa che è probabile che il documento venga aggiornato molte volte prima di essere finalizzato.

La versione SOAP 1.1 è disponibile online all'indirizzo http://www.w3.org/TR/SOAP/

La bozza di lavoro di SOAP Versione 1.2 è disponibile all'indirizzo http://www.w3.org/TR/soap12/

Si noti che il W3C ospita anche una sottomissione per "Messaggi SOAP con allegati", che è separata dalla specifica SOAP di base. Questa specifica consente ai messaggi SOAP di includere allegati binari come immagini e file audio. Per i dettagli completi, vedere la nota del W3C all'indirizzohttp://www.w3.org/TR/SOAP-attachments.