SOAP - Encodage

SOAP inclut un ensemble intégré de règles pour le codage des types de données. Il permet au message SOAP d'indiquer des types de données spécifiques, tels que des entiers, des flottants, des doubles ou des tableaux.

  • Les types de données SOAP sont divisés en deux grandes catégories: les types scalaires et les types composés.

  • Les types scalaires contiennent exactement une valeur telle qu'un nom de famille, un prix ou une description de produit.

  • Les types composés contiennent plusieurs valeurs telles qu'un bon de commande ou une liste de cotations boursières.

  • Les types composés sont subdivisés en tableaux et structures.

  • Le style de codage d'un message SOAP est défini via l' attribut SOAP-ENV: encodingStyle .

  • Pour utiliser le codage SOAP 1.1, utilisez la valeur http://schemas.xmlsoap.org/soap/encoding/

  • Pour utiliser le codage SOAP 1.2, utilisez la valeur http://www.w3.org/2001/12/soap-encoding

  • La dernière spécification SOAP adopte tous les types intégrés définis par XML Schema. Pourtant, SOAP maintient sa propre convention pour définir les constructions non standardisées par XML Schema, telles que les tableaux et les références.

Types scalaires

Pour les types scalaires, SOAP adopte tous les types simples intégrés spécifiés par la spécification XML Schema. Cela inclut les chaînes, les flottants, les doubles et les entiers.

Le tableau suivant répertorie les principaux types simples, extraits de XML Schema Part 0 - Primer http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

Types simples intégrés au schéma XML
Type simple Exemples)
chaîne Confirmez que c'est électrique.
booléen vrai, faux, 1, 0.
flotte -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
double -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
décimal -1,23, 0, 123,4, 1000,00.
binaire 100010
entier -126789, -1, 0, 1, 126789.
nonPositiveInteger -126789, -1, 0.
négatifInteger -126789, -1.
longue -1, 12678967543233
int -1, 126789675
court -1, 12678
octet -1, 126
nonNegativeInteger 0, 1, 126789
non signé 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
positiveInteger 1, 126789.
Date 1999-05-31, --- 05.
temps 13: 20: 00.000, 13: 20: 00.000-05: 00

Par exemple, voici une réponse SOAP avec un double type de données -

<?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>

Types de composés

Les tableaux SOAP ont un ensemble de règles très spécifiques, qui nécessitent que vous spécifiiez à la fois le type d'élément et la taille du tableau. SOAP prend également en charge les tableaux multidimensionnels, mais toutes les implémentations SOAP ne prennent pas en charge les fonctionnalités multidimensionnelles.

Pour créer un tableau, vous devez le spécifier en tant que type xsi: de tableau. Le tableau doit également inclure un attribut arrayType . Cet attribut est requis pour spécifier le type de données des éléments contenus et la ou les dimension (s) du tableau.

Par exemple, l'attribut suivant spécifie un tableau de 10 valeurs doubles -

arrayType = "xsd:double[10]"

En revanche, l'attribut suivant spécifie un tableau bidimensionnel de chaînes -

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

Voici un exemple de réponse SOAP avec un tableau de valeurs doubles -

<?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>

Les structures contiennent plusieurs valeurs, mais chaque élément est spécifié avec un élément accesseur unique. Par exemple, considérez un article dans un catalogue de produits. Dans ce cas, la structure peut contenir une référence produit, un nom de produit, une description et un prix. Voici comment une telle structure serait représentée dans un message 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- Veuillez prendre soin de l'indentation appropriée pendant que vous écrivez votre code SOAP. Chaque élément d'une structure est spécifié avec un nom d'accesseur unique. Par exemple, le message ci-dessus comprend quatre éléments d'accesseur - nom, prix, description et SKU. Chaque élément peut avoir son propre type de données. Par exemple, le nom est spécifié sous forme de chaîne, tandis que le prix est spécifié comme double.