SOAP - Codificación
SOAP incluye un conjunto integrado de reglas para codificar tipos de datos. Permite que el mensaje SOAP indique tipos de datos específicos, como enteros, flotantes, dobles o matrices.
Los tipos de datos SOAP se dividen en dos categorías amplias: tipos escalares y tipos compuestos.
Los tipos escalares contienen exactamente un valor, como un apellido, precio o descripción del producto.
Los tipos compuestos contienen varios valores, como una orden de compra o una lista de cotizaciones de acciones.
Los tipos de compuestos se subdividen en matrices y estructuras.
El estilo de codificación de un mensaje SOAP se establece mediante el atributo SOAP-ENV: encodingStyle .
Para usar la codificación SOAP 1.1, use el valor http://schemas.xmlsoap.org/soap/encoding/
Para usar la codificación SOAP 1.2, use el valor http://www.w3.org/2001/12/soap-encoding
La última especificación SOAP adopta todos los tipos integrados definidos por XML Schema. Aún así, SOAP mantiene su propia convención para definir construcciones no estandarizadas por XML Schema, como matrices y referencias.
Tipos escalares
Para los tipos escalares, SOAP adopta todos los tipos simples incorporados especificados por la especificación del esquema XML. Esto incluye cadenas, flotantes, dobles y enteros.
La siguiente tabla enumera los principales tipos simples, extraídos del esquema XML Parte 0 - Introducción http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/
Tipos simples integrados en el esquema XML | ||
---|---|---|
Tipo simple | Ejemplo (s) | |
cuerda | Confirma que esto es eléctrico. | |
booleano | verdadero, falso, 1, 0. | |
flotador | -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN. | |
doble | -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN. | |
decimal | -1,23, 0, 123,4, 1000,00. | |
binario | 100010 | |
entero | -126789, -1, 0, 1, 126789. | |
nonPositiveInteger | -126789, -1, 0. | |
negativeInteger | -126789, -1. | |
largo | -1, 12678967543233 | |
En t | -1, 126789675 | |
corto | -1, 12678 | |
byte | -1, 126 | |
nonNegativeInteger | 0, 1, 126789 | |
unsignedLong | 0, 12678967543233 | |
unsignedInt | 0, 1267896754 | |
unsignedShort | 0, 12678 | |
unsignedByte | 0, 126 | |
entero positivo | 1, 126789. | |
fecha | 1999-05-31, --- 05. | |
hora | 13: 20: 00.000, 13: 20: 00.000-05: 00 |
Por ejemplo, aquí hay una respuesta SOAP con un tipo de datos doble:
<?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 compuestos
Las matrices SOAP tienen un conjunto de reglas muy específico, que requieren que especifique tanto el tipo de elemento como el tamaño de la matriz. SOAP también admite matrices multidimensionales, pero no todas las implementaciones de SOAP admiten la funcionalidad multidimensional.
Para crear una matriz, debe especificarla como un tipo de matriz xsi : . La matriz también debe incluir un atributo arrayType . Este atributo es necesario para especificar el tipo de datos de los elementos contenidos y la (s) dimensión (es) de la matriz.
Por ejemplo, el siguiente atributo especifica una matriz de 10 valores dobles:
arrayType = "xsd:double[10]"
Por el contrario, el siguiente atributo especifica una matriz bidimensional de cadenas:
arrayType = "xsd:string[5,5]"
Aquí hay una respuesta SOAP de muestra con una matriz de valores dobles:
<?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>
Las estructuras contienen varios valores, pero cada elemento se especifica con un elemento de acceso único. Por ejemplo, considere un artículo dentro de un catálogo de productos. En este caso, la estructura puede contener un SKU de producto, un nombre de producto, una descripción y un precio. Así es como se representaría una estructura de este tipo en un mensaje 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- Tenga cuidado con la sangría adecuada mientras escribe su código SOAP. Cada elemento de una estructura se especifica con un nombre de acceso exclusivo. Por ejemplo, el mensaje anterior incluye cuatro elementos de acceso: nombre, precio, descripción y SKU. Cada elemento puede tener su propio tipo de datos. Por ejemplo, el nombre se especifica como una cadena, mientras que el precio se especifica como doble.