SOAP содержит встроенный набор правил для кодирования различных типов данных, что позволяет SOAP сообещнию указывать такие типы данных, целочиленные, с плавающей точкой и т.д.
Ключевые аспекты
Для понимания кодирования в SOAP стоит отметить следующие моменты:
- Типы данных SOAP разделены на две категории: скалярные и составные типы.
- Скалярные типы содержат только одно значение (id, имя, адресс, описание и т.д.).
- Составные типы содержат несколько значений, например, список сотрудников.
- Составные типы, в свою очередь, разделяются на массивы и структуры.
- Стиль кодировки задаётся через аттрибут SOAP-ENV:encodingStyle.
- Для использования кодировки SOAP 1.1 используется значение http://schemas.xmlsoap.org/soap/encoding/
- Для использования кодировки SOAP 1.2 используется значение https://www.w3.org/2001/12/soap-encoding
- Крайняя спецификаия SOAP включает все встроенные типы, определённые схемой XML. SOAP, также, поддерживает собственное соглащение для опредления нестандартизированных схемой XML контсрукций, таких как ссылки и массивы.
Скалярные типы
Скалярные типы SOAP поодерживают все встроенные типы, определённые схемой XML.
Ниже приведён список основныз скалярных типов SOAP:
Simple Type | Example(s) |
---|---|
string | Confirm this is electric. |
boolean | true, false, 1, 0. |
float | -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN. |
double | -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN. |
decimal | -1.23, 0, 123.4, 1000.00. |
binary | 100010 |
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 |
Ниже приведён пример SOAP сообщения ответа с использованием типа данных Integer:
<?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:getProuductIdResponse xmlns:ns1="urn:market:productService" SOAP-ENV:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<return xsi:type="xsd:int">1000</return>
</ns1:getProductIdResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Составные типы
Массивы в SOAP имеют опредёлнный набор правил, которые требуют, чтобы мы указывали как тип даных, так и размер массива. SOAP также поддерживает многомерные массивы, но не все реализации SOAP поодерживают их.
Рассмотрим пример 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:getProductIdListResponse xmlns:ns1="urn:market:productIdService" 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:int">1000</item>
<item xsi:type="xsd:double">1001</item>
</return>
</ns1:getProductIdListResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Структуры состоят из нескольких значений, но при этом, каждый элемент имеет уникальный элемент доступа. Например, у нас есть сущность, которая входит в каталог продуктов. В этом случае, структура может содержать такие поля, как ID, название продукта, описание и цена.
Рассмотрим конкретный пример:
<?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:productmarket:productservice" SOAP-ENV:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<return xmlns:ns2="urn:productmarket" xsi:type="ns2:product">
<name xsi:type="xsd:string">Milk</name>
<price xsi:type="xsd:double">15.60</price>
<description xsi:type="xsd:string">
Very good milk
</description>
<ID xsi:type="xsd:string">12345</ID>
</return>
</ns1:getProductResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<>/code>
На этом мы заканчиваем изучение типов данных в SOAP.
В следующей статье мы рассмотрим передачу SOAP сообщений.