T.M. SoftStudio

feci quod potui, faciant meliora potentes

Протокол SOAP 1.1

Корневой элемент SOAP 1.1 сообщения <SOAP-ENV:Envelope> (пространство имен xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/") может содержать дочерние элементы <SOAP-ENV:Header> и должен включать в себя элемент <SOAP-ENV:Body>. Кроме того, возможно наличие дополнительных элементов, имеющих свои пространства имен и следующих сразу после элемента <SOAP-ENV:Body>.

Все элементы SOAP 1.1 сообщения могут иметь атрибут encodingStyle, содержащий перечень URI-идентификаторов правил кодирования SOAP-сообщения. Спецификация предопределяет кодировку с URI-идентификатором "http://schemas.xmlsoap.org/soap/encoding/".

Элемент <SOAP-ENV:Header> содержит дочерние элементы SOAP-расширения, относящиеся к системе безопасности, надежности, поддержке транзакций и т. д. Каждый дочерний элемент элемента <SOAP-ENV:Header> может иметь атрибуты:

  • actor — URI-адрес получателя элемента. Если данный атрибут отсутствует, тогда получатель сообщения является конечным получателем элемента заголовка. Значение атрибута "http://schemas.xmlsoap.org/soap/actor/next" указывает, что элемент заголовка обрабатывается первым SOAP-приложением;

  • mustUnderstand — возможные значения: 0 (по умолчанию) или 1 (указывает обязательность обработки).

Дочерние элементы элемента <SOAP-ENV:Header> могут также иметь атрибут root (пространство имен http://schemas.xmlsoap.org/soap/encoding/). Значение атрибута root="0" указывает, что элемент сериализуется как независимый элемент.

Элемент <SOAP-ENV:Body> является контейнером для дочерних элементов, содержащих пересылаемую информацию. Дочерние элементы элемента <SOAP-ENV:Body> могут иметь атрибут root (возможное значение — 0 или 1).

Элемент <SOAP-ENV:Body> также может содержать элемент <SOAP-ENV:Fault>, который используется для передачи информации об ошибках или о статусе.

Элемент <SOAP-ENV:Fault> может содержать следующие элементы:

  • <faultcode> — содержит код ошибки. Спецификация предопределяет следующие ошибки:

    – VersionMismatch — неправильное пространство имен SOAP;

    – MustUnderstand — при значении атрибута mustUnderstand="1" элемент заголовка не может быть обработан;

    – Client — сообщение неверно оформлено или несет некорректную информацию;

    – Server — сообщение не может быть обработано получателем;

  • <faultstring> — текстовая информация об ошибке;

  • <faultactor> — источник ошибки;

  • <detail> — дополнительная информация об ошибке.

Передача SOAP-сообщения по протоколу HTTP подразумевает определение MIME-типа как text/xml.

При передаче SOAP-сообщения по протоколу HTTP-методом POST спецификация определяет HTTP-заголовок SOAPAction, указывающий URI-адрес получателя запроса.

При использовании SOAP-сообщений для удаленного вызова процедур RPC вызов метода и ответ представляются вложенным элементом элемента <SOAP-ENV:Body>. При этом вложенный элемент имеет имя, идентичное имени вызываемого метода, а его дочерние элементы представляют входящие и выходящие параметры метода и имеют соответственно имена, идентичные именам параметров метода. В случае ответа на вызов метода, первый дочерний элемент представляет возвращаемый результат, а далее следуют дочерние элементы, представляющие входящие и выходящие параметры метода согласно его сигнатуре. Имя элемента, несущего ответ на вызов метода, составлено из имени вызванного метода и "Response". Кроме того, при возникновении ошибки вызова метода, информация об ошибке содержится в элементе <SOAP-ENV:Fault>.

Спецификация SOAP Messages with Attachments определяет механизм передачи SOAP-сообщений с вложениями, которые могут нести данные в двоичном формате.

Для передачи SOAP-сообщения с вложениями, оно упаковывается внутри MIME-сообщения multipart/related, которое состоит из MIME-заголовков, первичного SOAP-сообщения и вложений:

MIME-Version: 1.0

Content-Type: Multipart/Related; boundary=MIME_boundary; type=text/xml;

start="ID-start"

Content-Description: This is the optional message description.



--MIME_boundary

Content-Type: text/xml; charset=UTF-8

Content-Transfer-Encoding: 8bit

Content-ID: ID-start



<?xml version='1.0' ?>

<SOAP-ENV:Envelope

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

<SOAP-ENV:Body>

. . .

<Named-element href="ID-attachment"/>

. . .

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>



--MIME_boundary

Content-Type: image/tiff

Content-Transfer-Encoding: binary

Content-ID: ID-attachment

...binary TIFF image...

--MIME_boundary—

Основные отличия протокола SOAP 1.1 от SOAP 1.2:

  • SOAP 1.1 основывается на XML 1.0, а SOAP 1.2 — на XML Infoset;

  • SOAP 1.2 не разрешает наличие дополнительных дочерних элементов после элемента <SOAP-ENV:Body>;

  • в SOAP 1.2 атрибут encodingStyle может использоваться только в дочерних элементах SOAP Body, Header и fault Detail;

  • SOAP 1.2 определяет новые заголовки NotUnderstood и Upgrade;

  • в SOAP 1.2 атрибут actor переименован в role, и к роли Next добавлены две предопределенные роли — None и Ultimate Receiver;

  • в SOAP 1.2 добавлены стандартные ошибки DataEncodingUnknown, ProcedureNotPresent и BadArguments. Ошибка Client переименована в Sender, а Server — в Receiver;

  • в SOAP 1.2 изменена структура элемента <Fault>;

  • в SOAP 1.2 отсутствует атрибут root;

  • в SOAP 1.2 возвращаемый RPC-результат представлен элементом <rpc:result>;

  • в SOAP 1.2 при передаче SOAP-сообщений по HTTP-протоколу MIME-тип text/xml изменен на application/soap+xml, а заголовок SOAPAction заменен дополнительным параметром action;

  • в SOAP 1.2 добавлена поддержка HTTP-метода GET;

  • в SOAP 1.2 атрибут mustUnderstand имеет значение true или false, а не 1 или 0;

  • для заголовков в SOAP 1.2 определен новый атрибут relay;

  • в SOAP 1.2 определена передача SOAP-сообщений по протоколу SMTP.