SOAP - Кодирование
SOAP включает встроенный набор правил для кодирования типов данных. Он позволяет сообщению SOAP указывать определенные типы данных, такие как целые числа, числа с плавающей запятой, двойные числа или массивы.
Типы данных SOAP делятся на две большие категории - скалярные типы и составные типы.
Скалярные типы содержат ровно одно значение, такое как фамилия, цена или описание продукта.
Составные типы содержат несколько значений, например, заказ на покупку или список котировок акций.
Составные типы далее подразделяются на массивы и структуры.
Стиль кодирования сообщения SOAP устанавливается с помощью атрибута SOAP-ENV: encodingStyle .
Чтобы использовать кодировку SOAP 1.1, используйте значение http://schemas.xmlsoap.org/soap/encoding/
Чтобы использовать кодировку SOAP 1.2, используйте значение http://www.w3.org/2001/12/soap-encoding
Последняя спецификация SOAP принимает все встроенные типы, определенные XML-схемой. Тем не менее, SOAP поддерживает свое собственное соглашение для определения конструкций, не стандартизированных XML-схемой, таких как массивы и ссылки.
Скалярные типы
Для скалярных типов SOAP принимает все встроенные простые типы, указанные в спецификации схемы XML. Сюда входят строки, числа с плавающей запятой, числа с двойной точностью и целые числа.
В следующей таблице перечислены основные простые типы, взятые из XML Schema Part 0 - Primer. http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/
Простые типы, встроенные в схему XML | ||
---|---|---|
Простой тип | Примеры) | |
строка | Подтвердите, что это электрический. | |
логический | истина, ложь, 1, 0. | |
плавать | -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN. | |
двойной | -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN. | |
десятичный | -1,23, 0, 123,4, 1000,00. | |
двоичный | 100010 | |
целое число | -126789, -1, 0, 1, 126789. | |
nonPositiveInteger | -126789, -1, 0. | |
negativeInteger | -126789, -1. | |
долго | -1, 12678967543233 | |
int | -1, 126789675 | |
короткая | -1, 12678 | |
байт | -1, 126 | |
nonNegativeInteger | 0, 1, 126789 | |
unsignedLong | 0, 12678967543233 | |
unsignedInt | 0, 1267896754 | |
unsignedShort | 0, 12678 | |
unsignedByte | 0, 126 | |
положительное число | 1, 126789. | |
свидание | 1999-05-31, --- 05. | |
время | 13: 20: 00.000, 13: 20: 00.000-05: 00 |
Например, вот ответ SOAP с типом данных double -
<?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>
Составные типы
Массивы SOAP имеют очень специфический набор правил, которые требуют, чтобы вы указывали как тип элемента, так и размер массива. SOAP также поддерживает многомерные массивы, но не все реализации SOAP поддерживают многомерные функции.
Чтобы создать массив, вы должны указать его как массив xsi: type . Массив также должен включать атрибут arrayType . Этот атрибут требуется, чтобы указать тип данных для содержащихся элементов и размер (а) массива.
Например, следующий атрибут определяет массив из 10 двойных значений -
arrayType = "xsd:double[10]"
Напротив, следующий атрибут определяет двумерный массив строк -
arrayType = "xsd:string[5,5]"
Вот образец ответа 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: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>
Структуры содержат несколько значений, но каждый элемент определяется с помощью уникального элемента доступа. Например, рассмотрим элемент в каталоге продуктов. В этом случае структура может содержать артикул продукта, название продукта, описание и цену. Вот как такая структура будет представлена в сообщении 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- Пожалуйста, позаботьтесь о правильном отступе при написании кода SOAP. Каждый элемент в структуре указывается с уникальным именем метода доступа. Например, сообщение выше включает четыре вспомогательных элемента - имя, цену, описание и артикул. Каждый элемент может иметь свой тип данных. Например, имя указывается в виде строки, а цена - как двойная.