Руководство по SOAP. Кодировка.

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 сообщений.