SOAP - Guia Rápido

O que é SOAP?

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

Pontos a serem observados

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

  • O SOAP pode estender o HTTP para mensagens XML.

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

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

  • O SOAP pode ser usado para transmitir uma mensagem.

  • SOAP é independente de plataforma e idioma.

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

  • O SOAP permite que aplicativos clientes 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 através de uma variedade de protocolos de transporte, o foco inicial do SOAP são as 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 gravadas inteiramente em XML e, portanto, são independentes da plataforma e da linguagem.

SOAP - Estrutura da mensagem

Uma mensagem SOAP é um documento XML comum que contém os seguintes elementos -

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

  • Cabeçalho - Contém qualquer atributo opcional da mensagem usada no processamento da mensagem, em um ponto intermediário ou no ponto final final. É um elemento opcional.

  • Corpo - contém os dados XML que compõem a mensagem que está sendo enviada. É um elemento obrigatório.

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

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

NOTA - Todas essas especificações estão sujeitas a alterações. Portanto, mantenha-se atualizado com as últimas especificações disponíveis no site W3.

Estrutura de mensagem SOAP

O bloco a seguir mostra 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>

SOAP - 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ê termina de receber uma mensagem e está pronto para processá-la. O envelope SOAP é, portanto, basicamente um mecanismo de empacotamento.

Pontos a serem observados

  • Toda mensagem SOAP possui um elemento Envelope raiz.

  • Envelope é uma parte obrigatória da mensagem SOAP.

  • Todo elemento Envelope deve conter exatamente um elemento Body.

  • Se um envelope contiver um elemento de cabeçalho, ele deverá conter não mais de um e aparecer como o primeiro filho do envelope, antes do corpo.

  • O envelope muda quando as versões SOAP são alteradas.

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

  • A codificação SOAP opcional também é especificada usando um nome de espaço para nome e o elemento opcional encodingStyle , 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 espaço para nome do envelope v1.2.

  • Um processador SOAP compatível com a v1.2 gera uma falha VersionMismatch se receber uma mensagem que não inclua o espaço para nome do envelope da v1.2.

Mensagem SOAP compatível com v1.2

A seguir, é apresentado um exemplo de mensagem SOAP compatível com a 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 para o servidor. Ele mostra os espaços de nomes para a definição de esquema de envelope e para a definição de esquema das regras de codificação. A referência OrderEntry no cabeçalho HTTP é o nome do programa a ser chamado no site it-brain.online.

POST /OrderEntry HTTP/1.1
Host: www.it-brain.online
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>

NOTA - A ligação HTTP especifica a localização do serviço.

SOAP - Cabeçalho

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

Pontos a serem observados

  • É uma parte opcional de uma mensagem SOAP.

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

  • Os cabeçalhos destinam-se a adicionar novos recursos e funcionalidades.

  • O cabeçalho SOAP contém entradas de cabeçalho definidas em um espaço para nome.

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

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

Atributos de cabeçalho SOAP

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

Atributo 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 executar algum processamento e encaminhar a mensagem para o próximo nó na 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 true, o destinatário deve entender 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.it-brain.online/transaction/" 
         SOAP-ENV:mustUnderstand = "true">5
      </t:Transaction>
   </SOAP-ENV:Header>
   ...
   ...
</SOAP-ENV:Envelope>

SOAP - Corpo

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

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

O corpo contém informações obrigatórias destinadas ao destinatário 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 conjuntos de computadores. 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 para a 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; Nesse caso, o processador SOAP seria responsável por mapear as informações do corpo como parâmetros para dentro e para fora 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.

SOAP - Falha

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 transportar 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 200 a 299 códigos de status.

  • A falha SOAP está vinculada ao intervalo de 500 a 599 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 de códigos de falha predefinidos.

2

<faultString>

É uma mensagem de texto explicando o erro.

3

<faultActor>

É uma sequência de texto indicando 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 o destino final deve incluir um elemento faultActor .

4

<detalhe>

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

Códigos de falha SOAP

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

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

SOAP-ENV: VersionMismatch

Foi encontrado um espaço para nome inválido para o elemento SOAP Envelope.

2

SOAP-ENV: deve entender

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

3

SOAP-ENV: cliente

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

4

SOAP-ENV: servidor

Houve um problema com o servidor, portanto 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 chamado ValidateCreditCard , mas o serviço não suporta 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 - codificação

O SOAP inclui um conjunto interno de regras para codificar tipos de dados. Ele permite que a mensagem SOAP indique tipos de dados específicos, como números inteiros, flutuantes, duplos ou matrizes.

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

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

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

  • Os tipos de 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 internos 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 internos especificados pela especificação do Esquema XML. Isso inclui cadeias, flutuadores, duplos e números inteiros.

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

Tipos simples incorporados ao esquema XML
Tipo Simples Exemplos)
corda Confirme se isso é elétrico.
boleano verdadeiro, falso, 1, 0.
flutuador -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
Duplo -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
curto -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 de compostos

As matrizes SOAP têm um conjunto muito específico de regras, que exigem que você especifique o tipo de elemento e o tamanho da matriz. O SOAP também suporta matrizes multidimensionais, mas nem todas as implementações SOAP suportam funcionalidade multidimensional.

Para criar uma matriz, você deve especificá-la como um tipo xsi: de matriz. 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 atributo a seguir especifica uma matriz de 10 valores duplos -

arrayType = "xsd:double[10]"

Por outro lado, o atributo a seguir especifica uma matriz bidimensional de seqüências de caracteres -

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

Aqui está uma resposta SOAP de amostra 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, nome do produto, descrição e preço do produto. Aqui está como essa 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>

NOTA - Por favor, cuide da indentação adequada enquanto escreve seu código SOAP. Cada elemento em uma estrutura é especificado com um nome exclusivo de acessador. Por exemplo, a mensagem acima inclui quatro elementos de 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 sequência, enquanto o preço é especificado como duplo.

SOAP - Transporte

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

A especificação SOAP inclui detalhes apenas em 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 no conteúdo da resposta HTTP. Embora as solicitações SOAP possam ser enviadas por meio de um HTTP GET, a especificação inclui detalhes apenas no HTTP POST.

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

A especificação SOAP exige que o cliente precise fornecer 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 pelo XMethods, você deve especificar o seguinte como um cabeçalho SOAPAction.

urn:xmethodsBabelFish#BabelFish

Mesmo que o servidor não exija um cabeçalho SOAPAction completo, o cliente deve especificar uma sequência vazia ("") ou um valor null . Por exemplo -

SOAPAction: ""
SOAPAction:

Aqui está uma solicitação de amostra enviada via HTTP para o serviço XMethods Babelfish Translation -

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 de inglês para francês.

Aqui está a resposta do 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 são necessárias para seguir os mesmos códigos de status HTTP. Por exemplo, um código de status 200 OK indica uma resposta bem-sucedida. Um código de status 500 Internal Server Error indica que há um erro no servidor e que a resposta SOAP inclui um elemento Fault.

SOAP - Exemplos

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

O espaço para nome da função é definido no endereço http://www.xyz.org/quotation .

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>

SOAP - Padrões

O SOAP 1.1 foi enviado originalmente ao W3C em maio de 2000. Os remetentes oficiais incluíam 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 "rascunho de trabalho" do SOAP 1.2. No W3C, este documento é oficialmente um trabalho em andamento, o que significa que o documento provavelmente será atualizado várias vezes antes de ser finalizado.

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

O rascunho 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 separa da especificação SOAP principal. Essa especificação permite que as mensagens SOAP incluam anexos binários, como imagens e arquivos de som. Para detalhes completos, consulte a Nota do W3C em http://www.w3.org/TR/SOAP-attachments .