Разработка веб-служб средствами Java. Ильдар ХабибуллинРазработкаWebслужбсредствами
Скачать 9.24 Mb.
|
содержащий указание на применяемый HTTP-метод — строку "GET" или строку "POST". Элемент вкладываемый в элемент элемента Третий элемент элемента Кроме этих трех элементов, вводятся еще два элемента-пометки Эти элементы МОЖНО ПО- местить в элементы и/или для указания способа кодиров- ки строки запроса GET или POST. Элемент показывает, что запрос послан в то есть, в строке запроса стоят пары "имя=значение", разделенные амперсендами, пробелы заменены плюсами, а специальные символы записаны за знаком процента в форме. Листинг 4.4. показывает вложенность дополнительных элементов HTTP. Глава 4. Описание Web Services на языке 197 Листинг 4.4. Вложенность дополнительных элементов протокола HTTP . . . . > verb="GET | POST" /> адрес /> Web-службы — строка URI" /> Приведем пример. Запрос посылается HTTP-методом GET или POST. На- пример: GET HTTP/1.1 198 Разработка Web-служб средствами Java Он содержит табельный номер empid сотрудника некоторой фирмы. Web- служба возвращает клиенту информацию о сотруднике в виде документа XML, содержащего сведения вида > <пате>Иванов П. С.пате> етр> Описание этих элементов и всей Web-службы приведено в документе WSDL, записанном в листинге 4.5. Листинг 4.5. Описание WSDL с дополнительными элементами HTTP name="name" /> name="age" /> Глава 4. Описание Web Services на языке name="position" /> /> verb="GET" /> /> 200 Разработка Web-служб средствами Java /> content /> /> Глава 4. Описание Web Services на языке /> Дополнительные элементы В описании WSDL, приведенном в листинге 4.5 использованы дополни- тельные элементы, описывающие Они определены в про- странстве имен с идентификатором Будем считать, что этим именам дан префикс mime. Существует всего три дополнительных элемента описания МШЕ-типа. Элемент type="text/xml" /> type="image/jpeg" /> Отсутствие атрибута type означает "любой тип", то есть, эквивалентно content /> Элемент part="signature" type="image/jpeg"/> Разработка Web-служб средствами Java Третий элемент описывает являющийся произ- вольным документом XML. Необязательный атрибут part ссылается на часть послания, содержащую схему, в которой описан корневой элемент этого документа. Дополнительные элементы с вкладываются в элементы Инструменты создания описаний WSDL Описания WSDL в листингах 4.2 и 4.5 сделаны вручную. Однако строгая формализация языка WSDL позволяет автоматизировать этот процесс. Мно- гие инструментальные средства создания Web-служб содержат утилиты, ко- Глава 4. Описание Web Services на языке WSDL 203 торые автоматически создают WSDL-файлы, описывающие готовые Web- службы. Например, уже упоминавшееся в главе 3 средство создания Web- служб Apache Axis содержит в своем составе класс Java2wsDL, создающий WSDL-файл по классу или интерфейсу Java, описывающему Web-службу. Пакет IBM WSTK, в состав которого входит Axis, содержит утилиту создающую и запускающую объект этого класса. Она работает из командной строки. Достаточно набрать в командной строке $ java2wsdl EchoService и будет создан файл EchoService.wsdl, содержащий по одному элементу для каждого открытого метода класса, указанного в командной строке. В листинге 4.6 показан этот файл. Листинг 4.6. Описание Web-службы EchoService, сделанное ?> xmlns="http://schemas.xmlsoap.org/wsdl/" : targetNamespace="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema"> 204 Разработка Web-служб средствами Java name="getEchoRequest"> name="EchoService"> name="getEcho" name="getEchoRequest" /> name="getEchoResponse" /> /> name="getEcho"> soapAction="" /> encodingStyle= Глава 4. Описание Web Services на языке 205 "http://schemas.xmlsoap.org/soap/encoding/" namespace= use="encoded" /> name="getEchoResponse"> encodingStyle= namespace= use="encoded" /> name="EchoServiceService"> name="EchoService"> location= /> Интересно, что Axis может выполнить и обратное действие: по имеющемуся WSDL-файлу класс wsDL2java создаст все классы Java, необходимые для работы Web-службы. В пакете IBM класс можно вызвать из командной строки утилитой Например: $ EchoService.wsdl 206 Разработка Web-служб средствами Java Такие же утилиты есть в составе уже упоминавшегося продукта GLUE фир- мы The Mind Electric. Пакет Microsoft SOAP Toolkit содержит графическую утилиту вызываемую из стартового меню WSDL Generator, и утилиту командной строки которые создают WSDL-файлы. Фирма Sun Microsystems готовит к выпуску пакет интерфейсов JWSDL (Java API for WSDL), преобразующих описание WSDL в классы Java и обратно. Это позволяет программно создавать, изменять, читать описания WSDL. Фирма IBM уже реализовала этот пакет в своем продукте WSTK, назвав на- бор интерфейсов и реализующих их классов WSDL4J (WSDL for Java). Этот набор можно использовать в составе WSTK или отдельно, загрузив его с сайта Мы рассмот- рим его подробнее в следующем разделе. Самое ценное в описаниях WSDL то, что клиент Web-службы может обра- титься не к ней самой, а к ее WSDL-описанию. В состав GLUE входит ути- лита командной строки invoke, обращающаяся к Web-службе по ее WSDL- описанию. Например, достаточно набрать в командной строке: $ invoke Эхо и на консоли появится ответ Web-службы. Фирма IBM выпускает пакет классов WSIF (Web Services Invocation Frame- work), работающий в Web-контейнере Tomcat под управлением Apache SOAP. С помощью этого пакета можно, в частности, сделать ту же работу: $ \ \ getEcho Эхо Напомним, что обратная наклонная черта здесь означает продолжение ко- мандной строки на следующую строку текста. После окончания работы D y n a m i c l n v o k e r на сообщения WSIF и ответ сервера. Пакет JWSDL и его реализация WSDL4J Пакет JWSDL состоит из интерфейсов и классов, собранных в пакет и несколько его подпакетов. Они реализованы в пакете com. ibm. и его подпакетах, входящих в пакет IBM WSDL4J. В пакете javax.wsdi содержатся интерфейсы, описывающие различные XML-элементы WSDL-ДОКумента: Definition, Types, Message, PortType, Binding, Service, И вложенные В НИХ Operation, Part, Input, Глава 4. Описание Web Services на языке 207 Output, Port, BindingOperation, Binding- Fault. Методы этих интерфейсов позволяют читать соответствую- щие элементы, а методы setxxx () — записывать их. В интерфейсе Definition, кроме того, есть методы createXxxO, создающие объекты этих интерфейсов, например, Message = Методы добавляют созданные объекты к документу WSDL, на- пример: Сам же объект типа Definition создается фабричным методом newDefini- tion() класса ИЗ javax.wsdl. factory: Definition def = Экземпляр класса WSDLFactory, в свою очередь, создается статическим ме- тодом о , следующим образом: WSDLFactory fact = Этот метод отыскивает класс-фабрику, сначала просматривая СВОЙСТВО ПОТОМ потом загружает фабрику по умолчанию. Можно загрузить другую фабрику классов, воспользовавшись вторым методом: public static WSDLFactory factory); Кроме объекта типа Definition, класс-фабрика WSDLFactory создает объек- ты типа читающие описание WSDL, и объекты типа wsDLWriter, записывающие заранее подготовленный документ WSDL. Ин- терфейсы WSDLReader И WSDLWriter содержатся В пакете Создание объектов выполняется методами newWSDLReader () и newwsDLWriter () следующим образом: WSDLReader reader = WSDLWriter writer = После создания объекта reader можно определить его свойства методом public void name, boolean value); Спецификация WSDL определяет два свойства объекта типа • если значение свойства равно true, то объект вы- водит свои сообщения в стандартный вывод out; • если свойство равно true, то все импор- тированные документы будут обработаны, если false — то они игнори- руются. 208 Разработка Web-служб средствами Java По умолчанию оба свойства равны true. После того как объект reader получен, с помощью его методов можно получить объект типа Definition, заполненный содержимым прочи- танного документа WSDL, например: Definition def = В листинге 4.7 приведен пример программы, читающей и разбирающей средствами пакета JWSDL файл sample.wsdl, содержащий документ WSDL, и выводящий встреченные в нем сообщения и имена в стандартный вывод. Листинг 4.7. Чтение документа WSDL import javax.wsdl.*; import import j public class public static void args){ try{ fact = reader = Definition def = Service service = new "SomeService")); Port port = Binding binding = PortType = Map messages = Глава 4. Описание Web Services на языке WSDL 209 Iterator = О while Message = if } List operations = Iterator = while Operation operation = if } e){ Листинг 4.8 показывает процесс создания описания WSDL средствами па- кета JWSDL. '. Листинг 4.8. Создание документа WSDL import j import j import j public class public static void args) try{ 210 Разработка Web-служб средствами Java fact = writer Definition def = ; Part = Part part2 = Message = Message msg2 = Input input = Output output = Operation operation = PortType portType = String tns = "http://some.com/wsdl"; QName(tns, "SomeService")); tns); String xsd = "http://www.w3.org/2001/XMLSchema"; xsd); "string")); QName(xsd, "float")); QName(tns, "getQuoteOutput")); Глава 4. Описание Web Services на языке 211 ; ; ; "GetQuote")); ; ; e){ ГЛАВА 5 Регистрация Web Services в реестре UDDI В главе 2 мы вкратце рассмотрели порядок регистрации и поиска Web- служб в различных системах поиска и обнаружения информации. Наиболее распространены две системы: универсальная система описания, обнаруже- ния и интеграции UDDI и электронный бизнес-реестр ebXML Registry (electronic business XML Registry). Обе системы, особенно ebXML, предна- значены для предоставления информации не только о Web-службах, но и о любом другом бизнесе. Поэтому они хранят информацию не столько об ус- лугах, сколько о фирме, предоставляющей товары и услуги: ее название, логотип, устав, контактные телефоны, образцы договоров, прейскуранты и прочую деловую информацию. Схема взаимодействия клиента Web-службы с ее поставщиком через реестр показана на рис 2.3. Система описания, обнаружения и интеграции UDDI создана фирмами IBM и Microsoft (http://uddi.microsoft.com/). Сейчас она развивается группой крупных компаний, среди которых активное участие принимают, кроме IBM и Microsot, компании Oracle, Hewlett-Packard и SAP На официальном сайте сообщества UDDI http://www.uddi.org/ приве- ден список около трехсот компаний-участников проекта. Сообщество выпус- тило несколько спецификаций, описывающих требования к UDDI, которые можно получить на том же сайте. Спецификации уже реализованы множеством продуктов разработки реестра UDDI. Реестр UDDI (UDDI Business Registry) состоит из множества узлов (nodes), размещенных в Интернете. Они хранят информацию о Web-службах, дос- тупную на всех узлах, образующих распределенный Клиент "видит" UDDI-реестр как единое целое, совершенно не ощущая того, что он размещен на нескольких машинах. Конечно, сами узлы можно организовать Глава 5. Регистрация Web Services в реестре 213 как Web-службы, а реестр UDDI — как слабо связанное распределенное приложение. Многие крупные компании организовали и содержат свои Наибольшей известностью пользуются следующие реестры: • реестр фирмы IBM, расположенный по адресу • реестр компании Hewlett Packard, его адрес реестр корпорации Microsoft находится на сайте • реестр фирмы SAP AG расположен по адресу Эти UDDI-реестры связаны между собой и постоянно обмениваются информацией. Кроме это открытые (public) реестры. Любой же- лающий может зарегистрировать в них свою Web-службу или отыскать нужную Web-услугу. Фирмы могут организовать и закрытые частные (private) реестры, доступные только зарегистрированным участникам. Список можно посмотреть на сайте проекта UDDI Состав реестра UDDI Реестр UDDI разбивает хранящуюся в нем информацию на несколько групп. Четыре основные группы состоят из следующих отдельных документов или частей одного документа. • Бизнес-информация — документ с корневым элементом — описание фирмы-поставщика Web-услуг: ее ключ (Unique Universal Identifier), уникальный в пределах реестра и описанный ат- рибутом businessKey, название фирмы — вложенный элемент краткое описание сферы ее деятельности, типы предоставляемых услуг, контактная информация, ссылки URL. Эта информа- ция предназначена для всех, кто хочет воспользоваться услугами фирмы. • Бизнес-услуги — элемент услуги — вложенный элемент ее краткое описание и ссылки на 214 Разработка Web-служб средствами Java на подробную информацию. Услуги могут быть любыми, не обязательно Web-услугами. • Указатели на услуги — элемент вложенный в эле- мент например, описание WSDL или IDL. Каждый способ получения услуги описывается одним вложенным элементом Его ат- рибут bindingKey определяет уникальный ключ UUID указателя. Эле- мент содержит ссылку на соответствующий элемент • Модель услуги — элемент (technical Model) — подробное фор- мальное описание каждой услуги. Оно используется программным обес- печением узла. Обычно это отдельный документ XML. В реестре есть еще несколько дополнительных элементов. • Утверждение — элемент — описание установ- ленных ранее отношений между фирмами (утверждение "peer-peer") или фирмой и ее подразделениями (утверждение "parent-child"). Фирма утверждает, что она тесно связана с перечисляемыми фирмами или что это — ее подразделения. Третий вид утверждения — "identity" — отношение между одинаковыми фирмами — это фактически псевдо- ним. Описание утверждения выполняется вложенными элементами Отношение входит в силу, когда его утвер- дят оба участника. Это отдельный документ, использующий элементы • Информация — элемент — дата создания и послед- ней модификации записи в реестре, идентификатор узла реестра, иден- тификатор владельца информации. Подписка — элемент — список фирм и сведений, кото- рые надо послать перечисленным фирмам при каких-либо изменениях в деятельности фирмы. Эти элементы определены в пространстве имен UDDI. Идентификатор про- странства имен UDDI версии 3.0 равен "urn:uddi-org:api_v3". Уникальный ключ UUID, встречающийся в этих элементах, имеет пример- но такой вид: "uddi:example.com: 1" или "uddi:example.com:sales-division:53". Устаревшая форма записи UUID выглядит примерно так: "4CD7E4BC- 648B-426D-9936-443EAAC8AE23". В листинге 5.1 приведена схема документа XML, хранящегося в UDDI- реестре и описывающего бизнес-информацию. В этой схеме показаны не все, а только основные элементы первого уровня вложенности. В листин- ге 5.1 использованы те же пометки, что и в главе 4: Глава 5. Регистрация Web Services в реестре UDDI 215 • символ [?] означает, что элемент или атрибут может появиться в доку- менте нуль или один раз; • символ [*] означает, что элемент может появиться нуль или несколько раз; • символ [+] означает, что элемент может появиться один или несколь- ко раз; • отсутствие символа в квадратных скобках означает, что атрибут должен появиться ровно один раз. | Листинг 5.1. Основные элементы UDDI-описания бизнес-информации [?] [+] [?] UUID" [?] > [+] Рассмотрим подробнее каждый элемент. У элементов ИЛИ ветственно. Структура остальных элементов сложнее. Мы рассмотрим их в следующих разделах. 216 Разработка Web-служб средствами Java Элемент У элемента В элемент вкладывается восемь элементов, из них обяза- телен только один элемент Ниже перечислены эти элементы. • Элемент содержит один или несколько вложенных эле- ментов содержащих ссылки на файлы, в которых расположено описание бизнес-информации. Элементы которые могут встретиться несколько раз, содержат названия фирмы в полном и сокращенном виде на разных языках. • Элемент содержащий произвольное описание бизнес- информации, тоже может встретиться несколько раз, например, на раз- ных языках. • Элемент • нуль или несколько элементов • один или несколько элементов с именами или должно- стями партнеров; • нуль или несколько элементов с номерами контактных теле- фонов; • нуль или несколько элементов с адресами электронной почты; • нуль или несколько элементов , содержащих почтовые ад- реса фирмы. • Уже ОПИСанНЫЙ Элемент • Элемент Они записываются в атрибутах одного или нескольких вложенных эле- ментов содержащий ключ элемента описывающего систему идентификации, и со значением идентификатора. Не- обязательный атрибут keyName содержит произвольное краткое имя идентификатора. Это имя должно быть уникальным в пределах данной Глава 5. Регистрация Web Services в реестре 217 системы идентификации. Таким образом, значение атрибута работает аналогично идентификатору пространства имен, обеспечивая уникальность имени. • Элемент НУЛЬ ИЛИ НеСКОЛЬКО С атрибутом tModeiKey И ВЛОЖеННЫМИ Бизнес-информация может быть подписана цифровыми подписями, рас- положенными В элементах Как видите, элемент Листинг 5.2. Пример бизнес-информации useType="businessEntity"> 620-be39-6631bb74b6el 218 Разработка Web-служб средствами Java на завтра в указанном населенном И. П. 234-45-67 318123 Жилки, Ягодная, 23-6 Глава 5. Регистрация Web в реестре 219 /> Элемент У элемента два необязательных атрибута serviceKey И Атрибут serviceKey содержит уникальный ключ UUID описываемой услу- ги. Если он отсутствует, то ключ будет сгенерирован реестром UDDI. Атрибут businessKey содержит ключ UUID соответствующего элемента ЯВНО ВЛОЖеН В < b u s i n e s s E n t i t y > . В элемент И уже зна- КОМЫе нам В листинге 5.3 приведен пример описания бизнес-услуги. Листинг 5.3. Пример описания бизнес-услуги serviceKey="d8091de4-0a4a-4061-9979-5dl9131aece5" businessKey="677cfala-2717-4620-be39-6631bb74b6el"> Service Разработка Web-служб средствами Java Элемент В открывающем теге элемента описывающего сетевой адрес и другие способы получения услуги, два необязательных атрибута bindingKey И serviceKey. Атрибут bindingKey содержит уникальный ключ UUID элемента. Если этот атрибут отсутствует, то его значение генерируется реестром UDDI. Атрибут serviceKey содержит КЛЮЧ UUID элемента котором он содержится. В элемент вкладывается нуль или несколько описаний |