SOAP Encoding

serializzazione e soap encoding messaggio soap

SOAP Encoding

Il SOAP Enconding, o anche codifica dei tipi è utilizzata per la serializzazione dei valori nei messaggi. Il SOAP Encoding è utilizzato anche nel WSDL. Il SOAP Encoding prevede dei tipi built-in per la codifica dei dati. Essi servono per specificare i dati contenuti in un messaggio SOAP, che possono essere integers, floats, doubles, o arrays.
Il SOAP Encoding di un messaggio viene impostato tramite l’attributo SOAP-ENV:encodingStyle, specificato nell’elemento SOAP-ENV:Envelope.
Nell’attributo encodingStyle avremo:

I tipi di dati SOAP si dividono in due grandi categorie: i tipi semplici (o scalari) ed i tipi composti (anche detti compound).

SOAP-ENCODING DI TIPI SEMPLICI

I tipi semplici contengono esattamente un valore, come ad esempio il cognome, il prezzo, o la descrizione del prodotto, essi vengono serializzati all’interno di un elemento detto accessor del valore. Di seguito si riepilogano i principali tipi semplici, tale tabella è stata estrapolata dalla guida dei tipi XML del W3C.

TIPI SEMPLICI SOAP ENCODING
TIPO SEMPLICE ESEMPIO
string “example”
boolean true, false, 1, 0
double -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN
decimal -1.23, 0, 123.4, 1000.00
month 1999-05
year 1999
century 19
timeDuration P1Y2M3DT10H30M12.3S
binary 100010
uriReference http://www.example.com/doc.html#ID5
language en-GB, en-US, fr
NMTOKEN US
NMTOKENS US UK
QName po:Address
integer -126789, -1, 0, 1, 126789
nonPositiveInteger -126789, -1, 0
negativeInteger -126789, -1
long -1, 12678967543233
int -1, 126789675
short -1, 12678
byte -1, 126
nonNegativeInteger 0, 1, 126789
unsignedLong 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
positiveInteger 1, 126789
date 1999-05-31, —05
time 13:20:00.000, 13:20:00.000-05:00

In questi messaggi il tipo semplice è specificato nell’attributo xsi:type (proveniente dal namespace http://www.w3.org/1999/XMLSchema-instance) sempre specificato nell’elemento SOAP-ENV:Envelope.

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" 
xmlns:xsd:="http://www.w3.org/1999/XMLSchema">
	<SOAP-ENV:Body>
		<m:SayHelloTo xmlns:m="https://www.gianlucadivincenzo.it/helloworld">
			<name xsi:type="xsd:string">Gianluca</name>
		</m:SayHelloTo>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Il corpo del messaggio SOAP in questo caso possiede un solo valore, accessibile tramite l’accessor name.

SOAP-ENCODING DI TIPI COMPOSTI

Accessor Multipli

Esempio di Accessor Multipli

Particolari strutture dati possono prevedere più accessor in questo caso effettueremo una distinzione tra serializzazione di strutture e serializzazione di arrays.

SOAP ENCODING DI STRUTTURE

Accessor dei membri delle Strutture

Accessor dei membri delle Strutture

Una struttura dati in SOAP è codificata mediante un elemento che a sua volta contiene altri elementi nidificati, che sono gli accessor dei singoli membri della struttura. Gli accessor dei singoli membri sono sempre locali e non possono essere puntati dall’esterno.
Di seguito si riporta un codice di esempio per la serializzazione di una struttura.

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
	<SOAP-ENV:Body>
		<e:Book xmlns:e="https://www.gianlucadivincenzo.it/book">
			<author>Gianluca Di Vincenzo</author>
			<intro>Questa è una struttura con due membri.</intro>
		</e:Book>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

dove la struttura è definita nel Namespace XML https://www.gianlucadivincenzo.it/book che possiede il seguente complexType.

<element name="Book">
	<complexType>
		<element name="author" type="xsd:string"/>
		<element name="intro" type="xsd:string"/>
	</complexType>
</element>

E’ possibile anche serializzare più strutture che prevedono dei puntatori, tale tipologia di soap encoding è detta multi-reference.

SOAP ENCODING DI ARRAYS

Il SOAP Encoding fornisce anche un elemento Array, che può essere usato per la serializzazione di matrici e di vettori.
Le istanze di un elemento di tipo Array devono contenere l’attributo arrayType che specifica il tipo degli elementi dell’Array.
Ad esempio, il seguente attributo specifica un array di 10 valori double:

arrayType="xsd:double[10]"

mentre quì si mostra un esempio di una matrice di double:

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

Infine per completare la trattazione si propone la serializzazione di un messaggio che prevede al suo interno una matrice (o anche detto array multidimensionale).

<p:Persona>
	<nome>Gianluca Di Vincenzo</nome>
	<phoneNumbers SOAP-ENC:arrayType="p:phoneNumber[2,2]">
		<phoneNumber>Home - Phone</phoneNumber>
		<phoneNumber>Home - Fax</phoneNumber>
		<phoneNumber>Office - Phone</phoneNumber>
		<phoneNumber>Office - Fax</phoneNumber>
	</phoneNumbers>
</p:Persona>

dove nel Namespace XML è definito il complexType Persona.

<element name="ArrayOfPhoneNumbers">
	<complexType>
		<element name="phoneNumber" type="phoneNumber" maxOccurs="unbounded" />
	</complexType>
	<anyAttribute/>
</element>
<element name="Persona">
	<complexType>
		<element name="nome" type="string"/>
		<element name="phoneNumbers" type="ArrayOfPhoneNumbers" />
	</complexType>
</element>
SOAP Encoding ultima modidfica: 2015-01-08T23:23:16+01:00 da Gianluca Di Vincenzo
Posted in: SOA

By on 8 Gennaio 2015

Tagged: , , , , , , ,