SOAP - Guia rápido

SOAP é um acrônimo para Simple Object Access Protocol. É um protocolo de mensagens baseado em XML para troca de informações entre computadores. SOAP é uma aplicação da especificação XML.

Pontos a serem observados

  • SOAP é um protocolo de comunicação projetado para se comunicar via Internet.

  • SOAP pode estender HTTP para mensagens XML.

  • SOAP fornece transporte de dados para serviços da web.

  • SOAP pode trocar documentos completos ou chamar um procedimento remoto.

  • SOAP pode ser usado para transmitir uma mensagem.

  • SOAP é independente de plataforma e linguagem.

  • SOAP é a maneira XML de definir quais informações são enviadas e como.

  • O SOAP permite que os aplicativos cliente se conectem facilmente a serviços remotos e invoquem métodos remotos.

Embora o SOAP possa ser usado em uma variedade de sistemas de mensagens e possa ser entregue por meio de uma variedade de protocolos de transporte, o foco inicial do SOAP são chamadas de procedimento remoto transportadas via HTTP.

Outras estruturas, incluindo CORBA, DCOM e Java RMI, fornecem funcionalidade semelhante ao SOAP, mas as mensagens SOAP são escritas inteiramente em XML e, portanto, são exclusivamente independentes de plataforma e linguagem.

Uma mensagem SOAP é um documento XML comum contendo os seguintes elementos -

  • Envelope- Define o início e o fim da mensagem. É um elemento obrigatório.

  • Header- Contém quaisquer atributos opcionais da mensagem usados ​​no processamento da mensagem, seja em um ponto intermediário ou no ponto final final. É um elemento opcional.

  • Body- Contém os dados XML que constituem a mensagem enviada. É um elemento obrigatório.

  • Fault - Um elemento Fault opcional que fornece informações sobre erros que ocorrem durante o processamento da mensagem.

Todos esses elementos são declarados no namespace padrão para o envelope SOAP - http://www.w3.org/2001/12/soap-envelope e o namespace padrão para codificação SOAP e tipos de dados é - http://www.w3.org/2001/12/soap-encoding

NOTE- Todas essas especificações estão sujeitas a alterações. Portanto, mantenha-se atualizado com as especificações mais recentes disponíveis no site do W3.

Estrutura da Mensagem SOAP

O bloco a seguir descreve a estrutura geral de uma mensagem 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>

O envelope SOAP indica o início e o fim da mensagem para que o destinatário saiba quando uma mensagem inteira foi recebida. O envelope SOAP resolve o problema de saber quando você acabou de receber uma mensagem e está pronto para processá-la. O envelope SOAP é, portanto, basicamente um mecanismo de embalagem.

Pontos a serem observados

  • Cada mensagem SOAP possui um elemento de envelope raiz.

  • O envelope é uma parte obrigatória da mensagem SOAP.

  • Cada elemento Envelope deve conter exatamente um elemento Body.

  • Se um envelope contém um elemento de cabeçalho, ele deve conter no máximo um e deve aparecer como o primeiro filho do envelope, antes do corpo.

  • O envelope muda quando as versões do SOAP mudam.

  • O envelope SOAP é especificado usando o prefixo de namespace ENV e o elemento Envelope.

  • A codificação SOAP opcional também é especificada usando um nome de namespace e o elemento encodingStyle opcional , que também pode apontar para um estilo de codificação diferente do SOAP.

  • Um processador SOAP compatível com v1.1 gera uma falha ao receber uma mensagem contendo o namespace do envelope v1.2.

  • Um processador SOAP compatível com v1.2 gera uma falha de VersionMismatch se receber uma mensagem que não inclui o namespace de envelope v1.2.

Mensagem SOAP compatível com v1.2

Abaixo está um exemplo de mensagem SOAP compatível com 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 com HTTP POST

O exemplo a seguir ilustra o uso de uma mensagem SOAP em uma operação HTTP POST, que envia a mensagem ao servidor. Mostra os namespaces para a definição do esquema do envelope e para a definição do esquema das regras de codificação. A referência OrderEntry no cabeçalho HTTP é o nome do programa a ser chamado no site 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 - A ligação HTTP especifica a localização do serviço.

O elemento opcional Header oferece uma estrutura flexível para especificar requisitos adicionais de nível de aplicativo. Por exemplo, o elemento Header pode ser usado para especificar uma assinatura digital para serviços protegidos por senha. Da mesma forma, pode ser usado para especificar um número de conta para serviços SOAP pay-per-use.

Pontos a serem observados

  • É uma parte opcional de uma mensagem SOAP.

  • Os elementos do cabeçalho podem ocorrer várias vezes.

  • Os cabeçalhos têm como objetivo adicionar novos recursos e funcionalidades.

  • O cabeçalho SOAP contém entradas de cabeçalho definidas em um namespace.

  • O cabeçalho é codificado como o primeiro elemento filho imediato do envelope SOAP.

  • Quando vários cabeçalhos são definidos, todos os elementos filho imediatos do cabeçalho SOAP são interpretados como blocos de cabeçalho SOAP.

Atributos do cabeçalho SOAP

Um cabeçalho SOAP pode ter os dois atributos a seguir -

Atributo de ator

O protocolo SOAP define um caminho de mensagem como uma lista de nós de serviço SOAP. Cada um desses nós intermediários pode realizar algum processamento e, em seguida, encaminhar a mensagem para o próximo nó da cadeia. Ao definir o atributo Ator, o cliente pode especificar o destinatário do cabeçalho SOAP.

Atributo MustUnderstand

Indica se um elemento Header é opcional ou obrigatório. Se definido como verdadeiro, o destinatário deve compreender e processar o atributo Header de acordo com sua semântica definida ou retornar uma falha.

O exemplo a seguir mostra como usar um cabeçalho em uma mensagem 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>

O corpo SOAP é um elemento obrigatório que contém os dados XML definidos pelo aplicativo sendo trocados na mensagem SOAP. O corpo deve estar contido dentro do envelope e deve seguir quaisquer cabeçalhos que possam ser definidos para a mensagem.

O corpo é definido como um elemento filho do envelope e a semântica do corpo é definida no esquema SOAP associado.

O corpo contém informações obrigatórias destinadas ao receptor final da mensagem. Por exemplo -

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

O exemplo acima solicita uma cotação de aparelhos de computador. Observe que os elementos m: GetQuotation e Item acima são elementos específicos do aplicativo. Eles não fazem parte do padrão SOAP.

Aqui está a resposta à consulta acima -

<?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, o aplicativo também define um esquema para conter a semântica associada aos elementos de solicitação e resposta.

O serviço de cotação pode ser implementado usando um EJB em execução em um servidor de aplicativos; em caso afirmativo, o processador SOAP seria responsável por mapear as informações do corpo como parâmetros de entrada e saída da implementação EJB do serviço GetQuotationResponse . O processador SOAP também pode mapear as informações do corpo para um objeto .NET, um objeto CORBA, um programa COBOL e assim por diante.

Se ocorrer um erro durante o processamento, a resposta a uma mensagem SOAP é um elemento de falha SOAP no corpo da mensagem e a falha é retornada ao remetente da mensagem SOAP.

O mecanismo de falha SOAP retorna informações específicas sobre o erro, incluindo um código predefinido, uma descrição e o endereço do processador SOAP que gerou a falha.

Pontos a serem observados

  • Uma mensagem SOAP pode conter apenas um bloco de falha.

  • A falha é uma parte opcional de uma mensagem SOAP.

  • Para ligação HTTP, uma resposta bem-sucedida está vinculada ao intervalo de códigos de status de 200 a 299.

  • A falha SOAP está vinculada à faixa de 500 a 599 de códigos de status.

Subelementos de falha

A falha SOAP possui os seguintes subelementos -

Sr. Não Subelemento e descrição
1

<faultCode>

É um código de texto usado para indicar uma classe de erros. Consulte a próxima tabela para obter uma lista dos códigos de falha predefinidos.

2

<faultString>

É uma mensagem de texto explicando o erro.

3

<faultActor>

É uma string de texto que indica quem causou a falha. É útil se a mensagem SOAP percorrer vários nós no caminho da mensagem SOAP e o cliente precisar saber qual nó causou o erro. Um nó que não atua como destino final deve incluir um elemento faultActor .

4

<detail>

É um elemento usado para transportar mensagens de erro específicas do aplicativo. O elemento de detalhe pode conter elementos filho chamados de entradas de detalhes.

Códigos de falha SOAP

Os valores de faultCode definidos abaixo devem ser usados ​​no elemento de código de falha ao descrever as falhas.

Sr. Não Descrição de erro
1

SOAP-ENV:VersionMismatch

Encontrado um namespace inválido para o elemento SOAP Envelope.

2

SOAP-ENV:MustUnderstand

Um elemento filho imediato do elemento Header, com o atributo mustUnderstand definido como "1", não foi compreendido.

3

SOAP-ENV:Client

A mensagem foi formada incorretamente ou continha informações incorretas.

4

SOAP-ENV:Server

Ocorreu um problema com o servidor, por isso a mensagem não pôde continuar.

Exemplo de falha SOAP

O código a seguir é um exemplo de falha. O cliente solicitou um método denominado ValidateCreditCard , mas o serviço não oferece suporte a esse método. Isso representa um erro de solicitação do cliente e o servidor retorna a seguinte resposta 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 inclui um conjunto integrado de regras para codificar tipos de dados. Ele permite que a mensagem SOAP indique tipos de dados específicos, como inteiros, flutuantes, duplos ou matrizes.

  • Os tipos de dados SOAP são divididos em duas categorias amplas - tipos escalares e tipos compostos.

  • Os tipos escalares contêm exatamente um valor, como sobrenome, preço ou descrição do produto.

  • Os tipos compostos contêm vários valores, como um pedido de compra ou uma lista de cotações de ações.

  • Os tipos compostos são subdivididos em matrizes e estruturas.

  • O estilo de codificação para uma mensagem SOAP é definido por meio do atributo SOAP-ENV: encodingStyle .

  • Para usar a codificação SOAP 1.1, use o valor http://schemas.xmlsoap.org/soap/encoding/

  • Para usar a codificação SOAP 1.2, use o valor http://www.w3.org/2001/12/soap-encoding

  • A especificação SOAP mais recente adota todos os tipos integrados definidos pelo XML Schema. Ainda assim, o SOAP mantém sua própria convenção para definir construções não padronizadas pelo XML Schema, como matrizes e referências.

Tipos escalares

Para tipos escalares, o SOAP adota todos os tipos simples integrados especificados pela especificação do Esquema XML. Isso inclui strings, floats, doubles e inteiros.

A tabela a seguir lista os principais tipos simples, extraídos do XML Schema Parte 0 - Primer http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

Tipos simples integrados ao esquema XML
Tipo Simples Exemplos)
corda Confirme que é elétrico.
boleano verdadeiro, falso, 1, 0.
flutuador -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
em dobro -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
decimal -1,23, 0, 123,4, 1000,00.
binário 100010
inteiro -126789, -1, 0, 1, 126789.
nonPositiveInteger -126789, -1, 0.
negativeInteger -126789, -1.
grandes -1, 12678967543233
int -1, 126789675
baixo -1, 12678
byte -1, 126
nonNegativeInteger 0, 1, 126789
unsignedLong 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
PositiveInteger 1, 126789.
encontro 31/05/1999, --- 05.
Tempo 13: 20: 00.000, 13: 20: 00.000-05: 00

Por exemplo, aqui está uma resposta SOAP com um tipo de dados duplo -

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

Tipos Compostos

Os arrays SOAP têm um conjunto de regras muito específico, que exige que você especifique o tipo de elemento e o tamanho do array. SOAP também oferece suporte a arrays multidimensionais, mas nem todas as implementações de SOAP oferecem suporte a funcionalidade multidimensional.

Para criar um array, você deve especificá-lo como um xsi: type de array. A matriz também deve incluir um atributo arrayType . Este atributo é necessário para especificar o tipo de dados para os elementos contidos e as dimensões da matriz.

Por exemplo, o seguinte atributo especifica uma matriz de 10 valores duplos -

arrayType = "xsd:double[10]"

Em contraste, o seguinte atributo especifica uma matriz bidimensional de strings -

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

Aqui está um exemplo de resposta SOAP com uma matriz de valores duplos -

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

As estruturas contêm vários valores, mas cada elemento é especificado com um elemento acessador exclusivo. Por exemplo, considere um item em um catálogo de produtos. Nesse caso, a estrutura pode conter um SKU do produto, nome do produto, descrição e preço. Aqui está como tal estrutura seria representada em uma mensagem 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- Tome cuidado com a indentação adequada ao escrever seu código SOAP. Cada elemento em uma estrutura é especificado com um nome de acessador exclusivo. Por exemplo, a mensagem acima inclui quatro elementos do acessador - nome, preço, descrição e SKU. Cada elemento pode ter seu próprio tipo de dados. Por exemplo, o nome é especificado como uma string, enquanto o preço é especificado como duplo.

SOAP não está vinculado a nenhum protocolo de transporte. O SOAP pode ser transportado via SMTP, FTP, MQSeries da IBM ou Microsoft Message Queuing (MSMQ).

A especificação SOAP inclui detalhes apenas sobre HTTP. O HTTP continua sendo o protocolo de transporte SOAP mais popular.

SOAP via HTTP

Logicamente, as solicitações SOAP são enviadas por meio de uma solicitação HTTP e as respostas SOAP são retornadas dentro do conteúdo da resposta HTTP. Embora as solicitações SOAP possam ser enviadas por meio de HTTP GET, a especificação inclui detalhes apenas no HTTP POST.

Além disso, tanto as solicitações quanto as respostas HTTP são necessárias para definir seu tipo de conteúdo como text / xml.

A especificação SOAP exige que o cliente forneça um cabeçalho SOAPAction, mas o valor real do cabeçalho SOAPAction depende da implementação do servidor SOAP.

Por exemplo, para acessar o serviço de tradução do AltaVista BabelFish, hospedado por XMethods, você deve especificar o seguinte como um cabeçalho SOAPAction.

urn:xmethodsBabelFish#BabelFish

Mesmo se o servidor não exigir um cabeçalho SOAPAction completo, o cliente deve especificar uma string vazia ("") ou um valor nulo. Por exemplo -

SOAPAction: ""
SOAPAction:

Aqui está um exemplo de solicitação enviado via HTTP para o serviço de tradução 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>

Observe o tipo de conteúdo e o cabeçalho SOAPAction. Observe também que o método BabelFish requer dois parâmetros String. O modo de tradução en_fr traduz do inglês para o francês.

Aqui está a resposta 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>

As respostas SOAP entregues via HTTP devem seguir os mesmos códigos de status HTTP. Por exemplo, um código de status de 200 OK indica uma resposta bem-sucedida. Um código de status 500 Erro interno do servidor indica que há um erro do servidor e que a resposta SOAP inclui um elemento Falha.

No exemplo abaixo, uma solicitação GetQuotation é enviada a um servidor SOAP por HTTP. A solicitação possui um parâmetro QuotationName e uma Quotation será retornada na resposta.

O namespace para a função é definido em http://www.xyz.org/quotation endereço.

Aqui está a solicitação 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>

Uma resposta SOAP correspondente se parece com -

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>

O SOAP 1.1 foi submetido originalmente ao W3C em maio de 2000. Os responsáveis ​​pelo envio oficial incluíram grandes empresas como Microsoft, IBM e Ariba, e empresas menores, como UserLand Software e DevelopMentor.

Em julho de 2001, o Grupo de Trabalho do Protocolo XML lançou um "esboço de trabalho" do SOAP 1.2. No W3C, este documento é oficialmente um trabalho em andamento, o que significa que é provável que seja atualizado muitas vezes antes de ser finalizado.

SOAP versão 1.1 está disponível online em http://www.w3.org/TR/SOAP/

O esboço de trabalho do SOAP Versão 1.2 está disponível em http://www.w3.org/TR/soap12/

Observe que o W3C também hospeda um envio para "Mensagens SOAP com anexos", que se separa da especificação SOAP principal. Esta especificação permite que as mensagens SOAP incluam anexos binários, como imagens e arquivos de som. Para obter detalhes completos, consulte a Nota W3C emhttp://www.w3.org/TR/SOAP-attachments.