SOAP - kodowanie

SOAP zawiera wbudowany zestaw reguł kodowania typów danych. Umożliwia komunikatowi SOAP wskazanie określonych typów danych, takich jak liczby całkowite, liczby zmiennoprzecinkowe, liczby podwójne lub tablice.

  • Typy danych SOAP są podzielone na dwie szerokie kategorie - typy skalarne i typy złożone.

  • Typy skalarne zawierają dokładnie jedną wartość, na przykład nazwisko, cenę lub opis produktu.

  • Typy złożone zawierają wiele wartości, takich jak zamówienie zakupu lub lista notowań giełdowych.

  • Typy złożone są dalej dzielone na tablice i struktury.

  • Styl kodowania dla komunikatu SOAP jest ustawiany za pomocą atrybutu SOAP-ENV: encodingStyle .

  • Aby użyć kodowania SOAP 1.1, użyj wartości http://schemas.xmlsoap.org/soap/encoding/

  • Aby użyć kodowania SOAP 1.2, użyj wartości http://www.w3.org/2001/12/soap-encoding

  • Najnowsza specyfikacja SOAP przyjmuje wszystkie wbudowane typy zdefiniowane przez schemat XML. Mimo to, SOAP zachowuje własną konwencję definiowania konstrukcji, które nie są standaryzowane przez schemat XML, takich jak tablice i odwołania.

Typy skalarne

W przypadku typów skalarnych protokół SOAP przyjmuje wszystkie wbudowane typy proste określone w specyfikacji schematu XML. Obejmuje to łańcuchy, liczby zmiennoprzecinkowe, liczby podwójne i liczby całkowite.

W poniższej tabeli wymieniono główne typy proste, zaczerpnięte z części 0 schematu XML - elementarz http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

Proste typy wbudowane w schemat XML
Prosty typ Przykład (y)
strunowy Potwierdź, że to elektryczne.
boolean prawda, fałsz, 1, 0.
pływak -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
podwójnie -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
dziesiętny -1,23, 0, 123,4, 1000,00.
dwójkowy 100010
liczba całkowita -126789, -1, 0, 1, 126789.
nonPositiveInteger -126789, -1, 0.
NegativeInteger -126789, -1.
długo -1, 12678967543233
int -1, 126789675
krótki -1, 12678
bajt -1, 126
nonNegativeInteger 0, 1, 126789
unsignedLong 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
Dodatnia liczba całkowita 1, 126789.
data 1999-05-31, --- 05.
czas 13: 20: 00.000, 13: 20: 00.000-05: 00

Na przykład tutaj jest odpowiedź SOAP z podwójnym typem danych -

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

Typy złożone

Tablice SOAP mają bardzo specyficzny zestaw reguł, które wymagają określenia zarówno typu elementu, jak i rozmiaru tablicy. SOAP obsługuje również tablice wielowymiarowe, ale nie wszystkie implementacje SOAP obsługują funkcjonalność wielowymiarową.

Aby utworzyć tablicę, musisz określić ją jako typ tablicy xsi:. Tablica musi również zawierać atrybut arrayType . Atrybut ten jest wymagany do określenia typu danych dla zawartych elementów i wymiaru (-ów) tablicy.

Na przykład następujący atrybut określa tablicę 10 podwójnych wartości -

arrayType = "xsd:double[10]"

Natomiast następujący atrybut określa dwuwymiarową tablicę ciągów -

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

Oto przykładowa odpowiedź SOAP z tablicą podwójnych wartości -

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

Struktury zawierają wiele wartości, ale każdy element jest określony za pomocą unikatowego elementu dostępu. Weźmy na przykład pod uwagę pozycję w katalogu produktów. W takim przypadku struktura może zawierać kod SKU produktu, nazwę produktu, opis i cenę. Oto jak taka struktura byłaby reprezentowana w wiadomości 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- Zadbaj o odpowiednie wcięcia podczas pisania kodu SOAP. Każdy element w strukturze jest określony za pomocą unikatowej nazwy akcesorium. Na przykład powyższy komunikat zawiera cztery elementy akcesory - nazwę, cenę, opis i SKU. Każdy element może mieć własny typ danych. Na przykład nazwa jest podawana jako ciąg znaków, a cena jako podwójna.