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.