Главная » Java, Web, XML » Конкретизация описания WSDL

0

Спецификация WSDL 1.2 задает правила описания адреса Web-службы и предоставляемых ею услуг для протокола SOAP, методов GET и POST протокола HTTP и — для пересылки документов с различными МШЕ-типами. Эти правила записываются дополнительными элементами XML, специфичными для каждого протокола.

Дополнительные элементы протокола SOAP

При использовании протокола SOAP в элемент <binding> и в элемент <service>, точнее, во вложенный в него элемент <port>, документа WSDL вкладывается несколько дополнительных элементов. Для версии WSDL 1.2 они определены в пространстве имен с идентификатором http://www.w3.org/2002/07/wsdl/soapl2. Будем считать, что префиксом имен из этого пространства выбрано слово soap.

Непосредственно в элемент <binding> обязательно вкладывается элемент <soap:binding>, определяющий необязательным атрибутом style документный ("document") или процедурный ("грс") стиль SOAP. По умолчанию принимается документный стиль. Второй, обязательный атрибут transport определяет строкой URI транспортный протокол пересылки SOAP-посланий. Протокол HTTP определяется строкой

для других протоколов в спецификации нет никаких обозначений.

В элемент <operation> — тот, что вложен в элемент <binding> — вкладывается необязательный элемент <soap:operation>. Он выбирает документный или процедурный стиль операции необязательным атрибутом style, принимающим значения  или "document", а также определяет

поле заголовка soAPAction необязательным атрибутом soapAction.

В элементы <input> и <output>, вложенные в элемент <operation>, вкладываются элементы <soap:header> И <soap:body>, а В элемент <fault> вкладывается элемент <soap:faultx В элемент <soap:header> можно вложить один или несколько элементов       У каждого из этих элементов есть обязательный атрибут use, принимающий одно из двух значений — "literal" или "encoded". Он указывает способ сериализации заголовка или содержимого послания.

Значение "encoded" атрибута use говорит о том, что послание использует способы сериализации, описание которых надо искать через атрибуты type, namespace И encodingStyle.

Значение "literal" атрибута use указывает, что способы сериализации определены в схеме документа.

В элемент <port>, вложенный в элемент <service>, вкладывается ровно один элемент <soap:address>, в атрибуте location которого записывается адрес интерфейса Web-службы в виде строки URI.

Примеры всех этих элементов уже приведены в листинге 4.2. В следующем листинге 4.3 показана схема расположения элементов протокола SOAP (они помечены префиксом soap) внутри элементов WSDL. Символы в квадратных скобках имеют то же значение, что и в листинге 4.1.

Листинг 4.3. Схема вложенности элементов протокола SOAP

<definitions …. >

<binding …. >

<soap;binding style="rpc | document" [?] transport="cTpoKa URI" />

•«operation …. >

<soap:operation soapAction="CTpoKa URI" [?]

style="rpc | document" [?] /> [?]

<input>

parts="HMH" [?] <soap:body use=»iiteral| encoded"

encodingStyle="cTpoKn URI" [?] патезрасе="идентификатор" [?] />

<soap: header message="HMH" раЛ="имя" use = "literal | encoded" encodingStyle="uri-list" [?] патезрасе="идентификатор" [?] > [*] <soap:headerfault

messaqe="imx" part="HMH"

use="literal j encoded" encodingStyle="cTpoKH URI" [?] патезрасе="идентификатор" [?] /> [*] </soap:header>

</input>

<output>

<soap:body parts="HMH" [?]

use="literal | encoded" [?]

encodingStyle="cTpoKH URI" ^’^

[

<soap:header message="nMH" part="iraw" use="literal I encoded" encodingStyle="cTpoKM URI" [?] патезрасе="идентификатор" [?] > [*] <soap:headerfault

message="HMH" ра^="имя"

use="literal | encoded" encodingStyle="cTpoKK URI" [?] патезрасе="идентификатор" [?] /> [*]

</soap:header>

</output> <fault>

<soap:fault пате="имя"

encoded" encodingStyle="cTpoKH URI" [?] патезрасе="идентификатор" [?] />

</fault>

</operation>

</binding> <service …. > <port … . >

<soap:address location="aflpec в виде строки URI" />

</port>

</service> </definitions>

Дополнительные элементы протокола HTTP

Дополнительные элементы протокола HTTP определены в пространстве имен с идентификатором http://www.w3.org/2002/07/wsdl/http. Будем считать, что этим именам дан префикс http.

Для описания пересылки посланий по протоколу HTTP вводятся три дополнительных элемента.

Элемент <http:binding>, вкладываемый непосредственно в элемент <binding>, указывает, что это именно протокол HTTP. У него один атрибут verb, содержащий указание на применяемый HTTP-метод — строку "GET" или строку "POST".

Элемент                           вкладываемый в элемент <port> элемента <ser

vice>, своим единственным атрибутом location определяет абсолютный адрес интерфейса Web-службы в форме строки URI.

Третий элемент <http:operation>, вкладываемый в элемент <operation> элемента <binding>, своим единственным атрибутом location задает относительный адрес URI операции. Вместе с элементом <http:address> этот адрес образует абсолютный адрес Web-услуги.

Кроме этих трех элементов, вводятся еще два элемента-пометки <http:urlEncoded/> И <http:urlReplacement/>. Эти элементы МГЖЕЮ Поместить в элементы <input> и/или <output> для указания способа кодировки строки запроса GET или POST.

Элемент                                 показывает, что запрос послан в

то есть, в строке запроса стоят пары "имя=значение", разделенные амперсендами, пробелы заменены плюсами, а специальные символы записаны за знаком процента в                                                                          форме.

Листинг 4.4. показывает вложенность дополнительных элементов HTTP.

| Листинг 4.4. Вложенность дополнительных элементов протокола HTTP

definitions ______  >

<binding ___  >

<http:binding verb="GET | POST" />

<operation …. >

<http:operation 1оса^оп="относительный адрес URI" />

<input …. >

<http:urlEncoded/> [?] <http:urlReplacement/> [?] </input>

<output …. >

[?]

<http:urlReplacement/> [?] </output>

</operation>

</binding> <service>

<port …. >

<http:address location="aflpec Web-службы — строка URI" /> </port>

</service> </definitions>

Приведем пример. Запрос посылается HTTP-методом GET или POST. Например:

GET /services/EmpService?empid=123456 HTTP/1.1

Он содержит табельный номер empid сотрудника некоторой фирмы. Web- служба            возвращает клиенту информацию о сотруднике в виде

документа XML, содержащего сведения вида

<emp xmlns="http://some.com/emp" >

<пате>Иванов П. С.</пате> <age>27</age>

<position>MH«eHep</position>

</етр>

Описание этих элементов и всей Web-службы приведено в документе WSDL, записанном в листинге 4.5.

РЯВЯРЯПВМНР^^

‘ Листинг 4.5. Описание WSDL с дополнительными элементами HTTP

<definitions

xmlns="http://www.w3.org/2 0 02/07/wsdl"

xmlns:http="http://www.w3.org/2002/07/wsdl/http"

xmlns:tns="http://some.com/emp"

targetNamespace="http://some.com/emp"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:mime="http://www.w3.org/2002/07/wsdl/mime">

<types>

<xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://some.com/emp">

<xsd:element name="emp"

type="tns:EmpInfoType" /> <xsd:complexType name="EmpInfoType">

<xsd:sequence>

<xsd: element name=" name" type="xsd: string" /> <xsd:element name="age" type="xsd:int" />

<xsd:element name="position" type="xsd:string" />

</xsd:sequence>

</xsd:complexType>

</xsd:schema> </types>

<message name="EmpIn">

<part name="empid" type="xsd:string" />

</message>

<message name="EmpOut">

<part name="EmpInfo" element="tns:emp" /> </message>

<portType name="EmpPortType"> <operation name="Employeelnfo"> <input message="tns:EmpIn" />

/>

</operation> </portType>

<binding name="EmpGET" type="tns:EmpPortType"> <http:binding verb="GET" />

<operation name="Employee">

/>

<input>

<http:urlEncoded/>

</input>

<output>

<mime:mimeXml part="EmpInfo" />

</output>

</operation> </binding>

<binding name="EmpPOST" type="tns:EmpPortType"> <http:binding verb="POST" /> <operation name="Employee">

/>

<input>

Cmime: content

type="application/x-www-form-urlencoded" />

</input>

<output>

<mime :mimeXrnl part="EmpInfo" />

</output>

</operation> </binding>

<service name="Employee">

<port name="EmpGETPort" binding="tns:EmpGET"> <http:address

/>

</port>

<port name="EmpPOSTPort" binding="tns:EmpPOST"> <http:address

location="http://some.com:8080/services/EmpService" />

</port> </service> </definitions>

Дополнительные элементы MIME-типов

В описании WSDL, приведенном в листинге 4.5 использованы дополнительные элементы, описывающие MIME-типы. Они определены в пространстве имен с идентификатором Будем считать, что этим именам дан префикс mime.

Существует всего три дополнительных элемента описания МШЕ-типа.

Элемент <mime:content> содержит только два атрибута. Необязательный атрибут name задает имя этой части послания, а необязательный атрибут type определяет MIME-тип содержимого, например:

cmime: content type=" text/xml" /> cmime: content type= " image/jpeg" />

Отсутствие атрибута type означает "любой тип", то есть, эквивалентно cmime: content type="*/*" />

Элемент <mime:multipartRelated> содержит несколько вложенных элементов <mime:part>, которые описывают каждую часть MIME-типа "multipart/related" необязательным атрибутом name. Например:

<mime :multipartRelated> cmime:part>

<scap:fcccУ parts= "contract" use="literal" /> </mime:part>

Cmime:part>

cmime: content part=" signature" type=" images/jpeg"/>

</mime:part> </mime:multipartRelated>

Третий элемент <mime:mimeXml> описывает MIME-ТИП, являющийся произвольным документом XML. Необязательный атрибут part ссылается на часть послания, содержащую схему, в которой описан корневой элемент этого документа.

Дополнительные элементы с MIME-типами вкладываются в элементы <input> и/или <output> при описании операции элементом <operation>, вложенным в элемент <binding>. Структура вложенности показана в листинге 4.6.

definitions …. >

<binding …. > <operation …. >

<input …. >

<        ! — Сюда вкладываются дополнительные элементы —> </input>

<output …. >

<        ! — Сюда вкладываются дополнительные элементы —> </output>

</operation>

</binding>

</definitions>

Литература:

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

По теме:

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