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.