SOAP - Codifica

SOAP include un set integrato di regole per la codifica dei tipi di dati. Consente al messaggio SOAP di indicare tipi di dati specifici, come interi, float, double o array.

  • I tipi di dati SOAP sono suddivisi in due grandi categorie: tipi scalari e tipi composti.

  • I tipi scalari contengono esattamente un valore come il cognome, il prezzo o la descrizione del prodotto.

  • I tipi composti contengono più valori come un ordine di acquisto o un elenco di quotazioni di borsa.

  • I tipi composti sono ulteriormente suddivisi in array e strutture.

  • Lo stile di codifica per un messaggio SOAP viene impostato tramite l' attributo SOAP-ENV: encodingStyle .

  • Per utilizzare la codifica SOAP 1.1, utilizzare il valore http://schemas.xmlsoap.org/soap/encoding/

  • Per utilizzare la codifica SOAP 1.2, utilizzare il valore http://www.w3.org/2001/12/soap-encoding

  • La specifica SOAP più recente adotta tutti i tipi incorporati definiti da XML Schema. Tuttavia, SOAP mantiene la propria convenzione per la definizione di costrutti non standardizzati da XML Schema, come array e riferimenti.

Tipi scalari

Per i tipi scalari, SOAP adotta tutti i tipi semplici incorporati specificati dalla specifica XML Schema. Ciò include stringhe, float, double e interi.

La tabella seguente elenca i principali tipi semplici, estratti da XML Schema Part 0 - Primer http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

Tipi semplici incorporati nello schema XML
Tipo semplice Esempio / i
corda Conferma che è elettrico.
booleano vero, falso, 1, 0.
galleggiante -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN.
Doppio -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN.
decimale -1,23, 0, 123,4, 1000,00.
binario 100010
numero intero -126789, -1, 0, 1, 126789.
nonPositiveInteger -126789, -1, 0.
negativeInteger -126789, -1.
lungo -1, 12678967543233
int -1, 126789675
corto -1, 12678
byte -1, 126
nonNegativeInteger 0, 1, 126789
unsignedLong 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
intero positivo 1, 126789.
Data 31/05/1999, --- 05.
tempo 13: 20: 00.000, 13: 20: 00.000-05: 00

Ad esempio, ecco una risposta SOAP con un doppio tipo di dati:

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

Tipi composti

Gli array SOAP hanno un insieme di regole molto specifico, che richiedono di specificare sia il tipo di elemento che la dimensione dell'array. SOAP supporta anche array multidimensionali, ma non tutte le implementazioni SOAP supportano funzionalità multidimensionali.

Per creare un array, è necessario specificarlo come xsi: type of array. L'array deve includere anche un attributo arrayType . Questo attributo è necessario per specificare il tipo di dati per gli elementi contenuti e le dimensioni dell'array.

Ad esempio, il seguente attributo specifica un array di 10 valori doppi:

arrayType = "xsd:double[10]"

Al contrario, il seguente attributo specifica un array bidimensionale di stringhe:

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

Ecco un esempio di risposta SOAP con un array di valori doppi:

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

Le strutture contengono più valori, ma ogni elemento è specificato con un elemento di accesso univoco. Ad esempio, considera un articolo all'interno di un catalogo di prodotti. In questo caso, la struttura potrebbe contenere uno SKU del prodotto, un nome del prodotto, una descrizione e un prezzo. Ecco come una tale struttura sarebbe rappresentata in un messaggio 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- Si prega di fare attenzione alla corretta indentazione mentre si scrive il codice SOAP. Ogni elemento in una struttura è specificato con un nome di accesso univoco. Ad esempio, il messaggio sopra include quattro elementi di accesso: nome, prezzo, descrizione e SKU. Ogni elemento può avere il proprio tipo di dati. Ad esempio, il nome è specificato come una stringa, mentre il prezzo è specificato come doppio.