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. Каждый элемент в структуре указывается с уникальным именем метода доступа. Например, сообщение выше включает четыре вспомогательных элемента - имя, цену, описание и артикул. Каждый элемент может иметь свой тип данных. Например, имя указывается в виде строки, а цена - как двойная.