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.