SOAP - Codificação

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.