Главная » Java, Web, XML » Протокол SOAP

0

возник в 1998 году в фирме UserLand и корпорации Microsoft, но затем его разработка была передана в консорциум W3C, который и готовит сейчас рекомендации по его применению. Их можно посмотреть на странице проекта http://www.w3.org/TR/SOAP/.

не различает вызов процедуры и ответ на него, а просто определяет формат послания (message) в виде документа XML. Послание может содержать вызов процедуры, ответ на него, запрос на выполнение каких-то других действий или просто текст. Спецификацию SOAP не интересует содержимое послания, она задает только его оформление.

Корневой элемент посылаемого документа XML                        содержит не

обязательный заголовок <Header> и обязательное тело <Body>. Схема SOAP- послания такова:

<?xml version-Ч.О’ ?> <env:Envelope

xmlns:env="http://www.w3.org/2002/06/soap-envelope">

<env:Header>

<!— Блоки заголовка —> </env:Header>

<env:Body>

< ! — Содержимое послания —> </env:Body>

</env:Envelope>

В заголовке содержится один или несколько блоков, оформление и содержание которых никак не регламентируются. Точно так же ничего не говорится о содержании тела послания. Тем не менее, различают процедурный стиль послания SOAP, предназначенный для вызова удаленных процедур, и документный стиль, предназначенный для обмена документами XML. Процедурный стиль часто называют RPC-стилем, а документный стиль — XML- стилем.

Процедурный стиль послания SOAP

При вызове удаленных процедур по протоколу SOAP в заголовке послания устанавливают параметры вызова, например, номер транзакции, в которой выполняется процедура. В теле послания перечисляются аргументы вызываемой процедуры.

Например, обращение к процедуре получения прогноза погоды, приведенной в предыдущем разделе, может выглядеть так:

<?xml version=’1.0′ ?> <env:Envelope

xmlns:env="http://www.w3.org/2002/06/soap-envelope"> <env:Body>

<met:getWeatherForecast env:encodingStyle=

"http://www.w3.org/2002/06/soap-encoding"

xmlns:met="http://www.meteoservice.com/"> <met: location>ra,moKMHo</met: location> </met:getWeatherForecast> </env:Body> </env:Envelope>

Аргументы вызываемой процедуры записываются как члены структуры, именем которой служит имя процедуры. Оно же служит именем элемента XML, представляющего структуру. Имя аргумента становится именем элемента XML, в теле которого записывается значение аргумента. Типы аргументов определены в пространстве имен, указанном атрибутом encodings t у 1е. Приведенное в примере значение этого атрибута http://www.w3.org/2002/06/soap-encoding определяет стандартное пространство имен SOAP, описанное в спецификации. В этом пространстве имен определены стандартные типы SOAP.

Записанное таким образом SOAP-послание передается серверу по сети каким-нибудь прикладным протоколом. Чаще всего это протокол HTTP или SMTP. При пересылке по протоколу HTTP редко используется метод GET. Обычно это метод POST с типом содержимого

Content-Type: appl i cat i on/ s oap+xml;

Ответ сервера выглядит так: <?xml version=’1.0′ ?>

<env:Envelope

xmlns:env="http://www.w3.org/2002/06/soap-envelope"> <env:Body>

<met:getWeatherForecastResponse

env:enccdingStyle=,,http: //wшг.w3.org/2002/06/scap-enccding,, xmlns:rpc="http://www.w3.org/2002/06/soap-rpc" xmlns:met="http://www.meteoservice.com/">

<rpc:result>met:forecast</rpc:result>

<met:forecast>ByflyT дожди</те!:forecast>

</met:getWeatherForecastResponse>

</env:Body> </env:Enve1ope>

Имя элемента, вложенного в тело, не имеет значения, но часто повторяется имя процедуры, дополненное словом "Response", как сделано в примере.

Возвращаемое значение представляется структурой или массивом. Имя структуры или массива определяется элементом Этот элемент определен в пространстве имен с идентификатором http://www.w3.org/2002/06/ soap-rpc. Такое двухступенчатое описание возвращаемого значения — сначала описывается элемент met: forecast, а уж потом возвращаемое значение — удобно тем, что можно точно описать тип возвращаемого значения в схеме документа XML. В приведенном примере это можно сделать при определении элемента <met:forecast> в пространстве имен с идентификатором http://www.meteoservice.com/.

Впрочем, можно вернуть результат и прямо в теле элемента

Типы данных SOAP, определенные в пространстве имен с идентификатором http://www.w3.org/2002/06/soap-encoding, во многом совпадают с типами данных языка XSD (см. главу 1). Их можно указать в схеме документа или прямо в документе, например:

<?xml version=" 1. 0" ?> <env:Envelope

env:encodingStyle="http://www.w3.org/2002/06/soap-encoding" xmlns:env="http://www.w3.org/2002/06/soap-envelope"

xmlns: xscl= "http:/ /www. w3. org/2001/XMLSchema1"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<env:Body>

<met:getWeatherForecast

xmlns:met="http://www.meteoservice.com/"> <met: location xsi: type="xsd: string">

Гадюкино </met:location»

</met:getWeatherForecast>

</env:Body> </env:Envelope>

Как видно из приведенных примеров, кроме типов XSD, в SOAP-посланиях широко применяются массивы и структуры.

Массив состоит из безымянных элементов, они различаются своим порядковым номером, например:

<person enc:arrayType="xsd:string[3]" xsi:type="enc:Array"> <пате>Иван</name> <пате>Петрович</пате> <пате>Сидоров</пате> </person>

Элементы массива надо записывать в определенном порядке.

В отличие от массива у каждого элемента структуры есть свое имя, например:

<person>

<firstname>PlBaH</firstname> <secondname>neTpoBH4</secondname> <surname>CnflopoB</surname> </person>

Элементы структуры можно записывать в любом порядке.

Документный стиль послания SOAP

Послание SOAP может содержать не аргументы вызова какой-то процедуры, а просто документ XML или структуру данных. Важно только сохранить схему послания — у него может быть необязательный заголовок и должно быть обязательное тело. Например:

<?xml version=’1.0′ ?> <env:Envelope

xmlns:env="http://www.w3.org/2002/06/soap-envelope">

<env:Header>

<!— Блоки заголовка –> </env:Header>

<env:Body>

<ms-.passport xmlns:ms="http: //burou. org/">

<ms :series>13-XM</ms:series> <ms:numbe r>123456</ms:number>

</ms:passport>

</env:Body> </env:Envelope>

Такие послания характерны для асинхронного обмена сообщениями в духе электронной почты. Очень часто они пересылаются не по протоколу HTTP, а по какому-нибудь почтовому протоколу, например, SMTP .

Мы ознакомимся подробно с протоколом SOAP в следующей главе, а пока заметим лишь, что консорциум W3C решил разработать стандартный протокол пересылки документов XML, взяв за основу XML-RPC, SOAP и другие известные протоколы. Новый протокол сначала был назван ХР (XML Protocol). Это сокращение совпало с широко распространенным обозначением экстремального программирования (eXtreme. Programming). Кроме того, в моду вошли четырехбуквенные аббревиатуры, и новый протокол назвали XMLP (XML Protocol). Его разработка затягивается. На время написания книги она была на начальной стадии, и не было ни одной производственной реализации протокола XMLP. Более того, появились сведения, что консорциум оставит за ним название SOAP, изменив только номер версии протокола.

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

  • Комментарии