Главная страница

Разработка веб-служб средствами Java. Ильдар ХабибуллинРазработкаWebслужбсредствами


Скачать 9.24 Mb.
НазваниеИльдар ХабибуллинРазработкаWebслужбсредствами
АнкорРазработка веб-служб средствами Java.pdf
Дата03.02.2018
Размер9.24 Mb.
Формат файлаpdf
Имя файлаРазработка веб-служб средствами Java.pdf
ТипКнига
#15148
КатегорияИнформатика. Вычислительная техника
страница11 из 21
1   ...   7   8   9   10   11   12   13   14   ...   21
, который оставлен в вер- сии UDDI 3.0 для совместимости со старыми версиями.
Кроме того, в элемент можно вложить один из трех не- обязательных элементов. Два из них — уже знакомые нам элементы
И .
Третий элемент содержит один или несколько вложенных элементов ссылающихся на соответст- вующее описание обязательным атрибутом
Кроме того,
В
МОЖНО ВЛОЖИТЬ описания И
сведения . Элемент ,
в свою очередь, содержит или элементы , содержащие ссылки на дополнительные описания в виде URL, или элемент содержащий дополнительные параметры.
В листинге 5.4 приведен пример описания способов получения услуги.
Листинг 5.4. Пример описания UDDI способов получения услуги

Глава 5. Регистрация Web Services в реестре UDDI 221








Элемент
Открывающий тег элемента описывающего технические детали представления бизнес-услуги, может содержать два необязательных атрибу- та:
содержащий уникальный ключ UUID, и deleted, прини- мающий значения "true" (по умолчанию), или "false", говорящее о том,

Разработка Web-служб средствами Java
что описание логически удалено. Отсутствие атрибута означает,
что ключ UUID будет сгенерирован реестром UDDI.
В элемент вкладывается один обязательный элемент — имя описания в виде строки URI — и пять необязательных элементов:
,
И
. Их содержание и смысл описаны выше.
В листинге 5.5 приведен пример описания технических деталей.
Листинг 5.5. Описание UDDI технических деталей
Meteo Service
Интерфейс метеослужбы.

Описание метеослужбы.




Глава 5. Регистрация Web Services в реестре
223
/>
keyedRe
/>


Элемент

Элемент описывающий связи между фирмами, уст- роен проще всего. В него ровно один раз вкладываются три элемента
и и может присутствовать одна несколько цифровых подписей, занесенных в элементы .
Элемент уже встречался
Его атрибут содержит ссылку на полное описание связи между фирмами.
Элементы и просто содержат ключи UUID связанных между собой фирм, как показано в листинге 5.6.
' Листинг 5.6. Описания связи между фирмами
677cfala-2717-4620-be27-6631bb45b34
Программный интерфейс UDDI
Клиент обращается к UDDI-реестру для того, чтобы зарегистрировать свою
Web-службу, изменить ее, или для того, чтобы отыскать нужную Web-

Разработка Web-служб средствами Java
Реестр предоставляет необходимый для этого интерфейс. Функции,
входящие в UDDI API, можно разделить на четыре группы:
• регистрация Web-службы и ее последующие изменения выполняются функциями вида save_xxx;
• описание Web-службы можно получить функциями вида
• для поиска Web-службы применяются функции вида ind_xxx;

ФУНКЦИЯМИ ВИДа delete_xxx.
Здесь под символами "ххх" понимается тип объекта, например, "business",
"service", "binding" или "tModel".
Хотя спецификация UDDI и называет объекты, входящие в состав API,
"функциями", на самом деле это элементы XML. То, что спецификация на- зывает "аргументами функций" — это атрибуты открывающих тегов или вложенные элементы XML. В дальнейшем мода на XML может пройти, и
UDDI API можно будет реализовать функциями языка С или методами языка Java, или чем-нибудь более модным.
Клиент реестра UDDI оформляет запрос в виде элемента XML, например,
поиск Web-услуги по имени может выглядеть так:
Service

Этот элемент помещается в тело SOAP-послания и отправляется Web- службе, обслуживающей реестр UDDI. Она отыскивает все Web-службы с именем "Meteo Service" и посылает клиенту их ключи UUID в SOAP- послании, содержащем список найденных Web-служб в элементе
, например:
serviceKey="7cl9ab87-lbc5-4fb6-841b businessKey="">
Service

Глава 5. Регистрация Web Services в реестре UDDI 225



Функции API делятся на две группы:
• Inquiry API — функции, запрашивающие информацию в реестре;
• Publish API — функции, регистрирующие Web-службу, удаляющие ее из реестра или изменяющие информацию о ней.
Рассмотрим подробнее состав каждого API.
Функции запроса информации
В состав Inquiry API входят 9 функций — элементов XML, отыскивающих информацию в реестре. У них может быть три необязательных атрибута:
• атрибут serviceKey содержит ключ UUID того элемента реестра, в кото- ром следует производить поиск;
• атрибут ограничивает число строк, возвращаемых функцией;
атрибут listHead задает номер пункта, с которого надо начать возвра- щаемую информацию.
У многих функций есть аргумент (вложенный элемент)
Он задает условия поиска, например, можно запросить сортировку резуль- тата поиска вложенными элементами , ,
,
,
.
Перечислим функции Inquiry API.
• Функция find_business отыскивает
С ПО-
МОЩЬЮ
(аргументов)
,
,
,
. Результат по- иска — найденные элементы
— отправляется клиенту в элементе (SOAP-структуре) .
• Функция find_relatedBusinesses ищет бизнес-информацию О фирмах,
связанных с фирмой, указанной в запросе, аргументами
, , ОДНИМ ИЗ трех элементов
, ,
Результат поиска возвращается кли- енту В элементе .
8 Зак. 748

Разработка Web-служб средствами Java
• Функция f i n d s e r v i c e отыскивает элементы
признакам
,
Результат поиска возвращается в элементе
.
• Функция find_binding осуществляет поиск элементов
по признакам, указываемым вложенными элемента-
ми (аргументами функции)
,
Результат поиска, то есть найденные эле-
менты
возвращается в элементе (SOAP-структуре)
.
• Функция
ищет элементы
по признакам, указан-
ным элементами
,
Результат возвращается в элементе
• Функция get_businessDetail отыскивает элементы
по аргументу
содержащему ключи UUID отыскиваемых
элементов. Она отсылает клиенту структуру
Функция get_serviceDetail ищет элементы
ПО ар-
гументу serviceKey, содержащему ключи UUID отыскиваемых элемен-
тов. Она отсылает
.
• ФуНКЦИЯ get_bindingDetail ОТЫСКИВаеТ

по аргументу bindingKey, содержащему ключи UUID отыскиваемых
элементов. Она отсылает клиенту структуру
• Функция
осуществляет поиск элементов по
аргументу
содержащему ключи UUID отыскиваемых элемен-
тов. Она отсылает клиенту структуру

ищет
ПО
аргументу
содержащему ключи UUID отыскиваемых элемен-
тов. Она отсылает клиенту структуру
Функции регистрации и модификации Web-службы
Функции Publish API регистрируют, добавляют, изменяют и удаляют ин-
формацию в реестре UDDI, а также выдают служебную информацию о за-
регистрированных Web-службах. Перечислим эти функции.
• Функция
регистрирует
элементы

аргументы функции, или изменяет существующие элементы.
Функция delete_business удаляет элементы , задан-
ные аргументом businessKey, содержащим ключи UUID удаляемых эле-
ментов.

Глава 5. Регистрация Web Services в реестре
227
• Функция save_service регистрирует элементы
аргументы функции, или изменяет существующие элементы.
• Функция удаляет элементы , задан- ные аргументом serviceKey, содержащим ключи UUID удаляемых эле- ментов.
• Функция save_binding регистрирует новые элементы
— аргументы функции, или изменяет существую- щие элементы.

delete_binding удаляет за- данные аргументом bindingKey, содержащим ключи UUID удаляемых элементов.
• Функция регистрирует новые элементы
— аргу- менты функции, или изменяет существующие элементы.
• Функция удаляет элементы заданные аргумен- том содержащим ключи UUID удаляемых элементов.

добавляет элементы
— аргументы функции.
• Функция обновляет все элементы
Функция delete_publisherAssertions удаляет один или несколько эле- ментов
• Функция возвращает клиенту элемент содержащий список фирм, связанных с данной фирмой.
• Функция get_assertionStatusReport возвращает клиенту информа- цию о связях между фирмами в виде элемента-структуры
.
• Функция выдает сокращенную информацию о заре- гистрированных данным клиентом Web-службах.
Реализации UDDI API
Функции, входящие в UDDI API, предоставляют все средства для работы клиента с реестром UDDI, но записывать элементы XML, реализующие эти функции — тяжелая и кропотливая работа. Для того чтобы облегчить эту работу, создаются библиотеки классов, автоматически создающих SOAP- послания с запросами к реестру UDDI.

Разработка Web-служб средствами Java
Пакет IBM UDDI4J
Есть уже много библиотек классов и отдельных функций, написанных на различных языках. В технологии Java чаще всего используется пакет классов UDDI4J
for Java), разработанный фирмой IBM
(http://www.uddi4j.org/). Пакет UDDI4J входит в состав IBM WSTK.
Классы, входящие в пакет UDDI4J, обеспечивают работу клиента в
Все обращения к реестру UDDI идут через класс-посредник реализованный в пакете UDDI4J. Класс UDDiProxy преобразует эти обраще- ния в функции UDDI API. Методы этого класса называются так же, как и функции UDDI API: save_business (), f
() И
далее.
Они возвращают объекты классов, представляющих SOAP-структуры:
ServiceList,
И
собранные В пакет com.
response.
Аргументами методов класса дублирующих функции UDDI API,
служат объекты классов, представляющих аргументы функций UDDI API:
CategoryBag,
BusinessKey, ServiceKey И
классы, собран- ные В пакет com.ibm.uddi.util.
С помощью перечисленных методов и классов можно полностью смодели- ровать работу UDDI API.
Другой способ использования UDDI API, предлагаемый пакетом
UDDI4J, — сначала смоделировать функцию UDDI API объектом одного
ИЗ классов SaveBusiness, SaveService, SaveTModel, FindBusiness,
FindService, DeleteBusiness, GetServiceDetail ИЛИ другого класса ИЗ
кета
Все эти классы расширяют абстрактный класс
После того как объект-запрос создан, он посылается реестру методом public el, boolean inquiry);
Метод возвращает результат запроса в виде дерева элементов XML, которое затем надо разобрать каким-нибудь DOM-парсером.
При создании объекта-запроса полезны классы, моделирующие элементы реестра UDDI: BusinessEntity, BusinessServices, BusinessService,
BindingTemplates,
TModel И
Других. Они СОб- раны в пакет и его подпакеты.
В листинге 5.7 показано, как можно средствами UDDI4J зарегистрировать
Web-службу в том или ином UDDI-реестре.

Глава 5. Регистрация Web Services в реестре
229
; Листинг 5.7. Регистрация Web-службы в UDDI-реестре
import import import import import import import public class SaveSomeService{
public static void main args){
app = new proxy = new try{
// Выбираем
// Тестовый реестр IBM
+
"uddi/testregistry/inquiryapi");
+
// Официальный реестр IBM
//
+
// "uddi/inquiryapi");
//
+
//
// Тестовый реестр Microsoft
//
// "http://test.uddi.microsoft.com/inquire");
//

230 Разработка Web-служб средствами Java
// Официальный реестр Microsoft
//
//
// Реестр Hewlett Packard
//
//
// Отладочный локальный реестр из пакета
//
//
//
// "http://localhost:8080/services/uddi/publishapi");
// Заходим на сайт
AuthToken token
"userid", "password");
"Регистрационный код: " +
Vector entities = new
// Создаем элемент .
// Первый аргумент —
— пока неизвестен.
BusinessEntity be = new
// Регистрируем Web-службу
BusinessDetail bd =
entities);
// Для проверки получаем UUID.

Глава 5. Регистрация Web Services в реестре UDDI 231
Vector
=
BusinessEntity returnedBusinessEntity
" +
e){
DispositionReport dr =
if (dr != null)(
println (
"UDDIException faultCode:" +
+
"\n operator:" +
+
"\n generic:" +
+
"\n errno:" +
+
"\n errCode:" +
+
"\n
+
}
e){
proxy: " + e ) ;
Программа листинга 5.8 отыскивает Web-службу в том или ином реестре
UDDI и получает информацию о зарегистрированных в нем Web-службах.
Листинг 5.8. Поиск информации в реестре UDDI
import import import import import

232
Разработка Web-служб средствами Java
import import public class public static void main args){
SaveSomeService app = new proxy = new UDDIProxyO;
try{
// Выбираем
// Тестовый реестр IBM
+
"uddi/testregistry/inquiryapi");
+
// Официальный реестр IBM
//
+
// "uddi/inquiryapi");
//
+
//
// Тестовый реестр Microsoft
//
// "http://test.uddi.microsoft.com/inquire");
//
//
// Официальный реестр Microsoft
//
//
,
// Реестр Hewlett Packard

Глава 5. Регистрация Web Services в реестре
233
II
//
// Отладочный локальный реестр из пакета
//
//
//
// "http://localhost:8080/services/uddi/publishapi");
// Заходим на сайт token =
"userid", "password");
"Регистрационный код: " +
Web-служб:");
// Получаем список зарегистрированных
// Web-служб, чьи имена начинаются с буквы "S".
BusinessList
=
null, 0);
Vector businessInfoVector =
for (int i = 0; i <
i++){
=
e){
DispositionReport dr =
if (dr != null){

234 Разработка Web-служб средствами Java
faultCode:" +
+
"\n operator:" +
+
"\n generic:" +
+
"\n errno:" +
+
"\n errCode:" +
+
"\n
+
}
e){
proxy: " + e ) ;
Пакет JAXR
В главе 2 и в этой главе мы говорили о нескольких различных системах ре- гистрации и поиска Web-служб:
ebXML,
Есть и дру- гие системы, не рассматриваемые в этой книге. Все эти системы требуют разных методов доступа к реестру и работы с ним. Для каждой системы приходится создавать своего клиента, работающего с реестром по правилам данной системы поиска Web-служб.
Как уже говорилось в главе 2, фирма Sun Microsystems решила разработать единую методику доступа к реестрам разных типов и создала набор интер- фейсов JAXR. Этот набор реализован в пакете Sun WSDP и будет включен в состав J2EE, предположительно начиная с версии 1.4. В пакет Sun WSDP
включен пример клиента реестра, созданного средствами JAXR. Это графи- ческая утилита просмотра реестров Registry Browser. Она вызывается из ко- мандной строки просто набором имени командного файла.
$
Как мы уже говорили в главе 2, в составе WSDP есть и простой трениро- вочный реестр, реализованный в виде сервлета RegistryServerServlet. Ре- естр работает в Web-контейнере Tomcat и хранит информацию в небольшой базе данных Xindice (произносится, как говорят авторы, "Зин-ди-чи" — с итальянским акцентом), созданной сообществом Apache Software Foundation и тоже входящей в состав WSDP. Для запуска реестра надо запустить
Tomcat и стартовать базу данных:

Глава 5. Регистрация Web Services в реестре
235
$ cd
$ startup
$ xindice-start
Для проверки работы реестра и для посылки ему сообщений применяется специальная утилита, работающая из командной строки. Для входа в реестр надо набрать следующую командную строку:
$ registry-server-test
Для работы с реестром прямо через базу данных Xindice в составе WSDP
есть графическая утилита
Она запускается из командной строки:
$ registry-server-test run-indri
Поскольку набор JAXR рассчитан на работу с реестрами самых разных ти- пов, он содержит только интерфейсы, которые должен реализовать постав-
щик услуг (service provider) конкретного реестра. Интерфейсы будут по- разному реализованы поставщиком услуг реестра UDDI и поставщиком ус- луг реестра ebXML, но клиент этого не замечает, он просто связывается с услуг и пользуется интерфейсами пакета JAXR. Схема обра- щения клиента к реестру через поставщика услуг показана на рис 2.4.
Состав пакета JAXR
Набор JAXR состоит из двух Java-пакетов registry и
Интерфейсы первого пакета применяются клиентом для работы с реестром, интерфейсы второго пакета — поставщи- ком услуг для преобразования информации к виду, пригодному для хране- ния в базе данных реестра.
Для связи с поставщиком услуг клиент пользуется интерфейсом connection.
Экземпляр этого класса клиент получает с помощью класса-фабрики
ConnectionFactory. Сначала статическим методом
() создается объект этого класса, затем методом setProperties () в него заносятся ха- рактеристики реестра, после этого методом создается объект типа
Вот примерная схема соединения:
Properties props new queryURL);
ConnectionFactory fact =
Connection conn =

236 Разработка Web-служб средствами Java
После того как связь с поставщиком услуг установлена, методом
() интерфейса Connection получаем объект
RegistryService rs =
Интерфейс RegistryService — это центральный интерфейс в пакете JAXR.
Своими методами он предоставляет основные объекты, содержа- щие методы работы с реестром.
Так,
объект
B u s i n e s s Q u e r y M a n a g e r :
=
Поиск в реестре
В интерфейсе BusinessQueryManager собран десяток методов получения информации из реестра. Конечно, их сигнатуры не совпадают с сигнатурами функций
API, поскольку пакет JAXR рас- считан на разные реестры, не только UDDI. Вот заголовок одного из этих методов:
public BulkResponse orgKey,
Collection findQualifiers, Collection
Collection classifications, Collection
Первый аргумент этого метода orgKey содержит идентификатор отыскивае- мой Web-службы, которым может быть ключ UDDI.
Во втором аргументе findQualifiers, аналогичном аргументу функций UDDI, в метод передается набор условий поис- ка. Условия поиска записаны строковыми константами интерфейса
Например, условие сортировки результата поиска по имени записывается константой
Третий аргумент namePatterns содержит набор шаблонов имен для поиска.
Каждый шаблон — строка символов, содержащая метасимволы в духе SQL.
Четвертый аргумент classifications передает в метод набор объектов типа classification, классифицирующих искомую Web-службу. Этот аргумент аналогичен
UDDI API.
Наконец, пятый аргумент, specifications, содержит набор технических деталей, аналогично аргументу
UDDI API. Тип каждого эле- мента ЭТОЙ
RegistryObject. Интерфейс RegistryObject — ЭТО
суперинтерфейс большинства объектов реестра. Среди них service,
ServiceBinding, User, Organization.

Глава 5. Регистрация Web Services в реестре
237
Как видите, аргументы метода
() весьма сложны, что отражает сложность поиска в реестре.
Метод findservices о возвращает объект типа содержащий сведения о найденных Web-службах в виде коллекции типа collection.
Прежде чем воспользоваться результатом, следует проверить успешность запроса. Проверка выполняется методом getstatus (), возвращающим одну из четырех констант
Итак, искать Web-службу надо примерно так:
BulkResponse resp = bqrn. findService (key, null, null, null, null);
if
=
Collection coll =
}
Полученная коллекция должна содержать объекты типа Service, аналогич- ные элементу реестра UDDI. Выделив из коллекции один такой объект:
S e r v i c e s e r v =
извлекаем из него информацию многочисленными методами интерфейса
Service И его Предка — интерфейса RegistryObject:
,
И другими.
Остальные методы findXxx()
BusinessQueryManager ОТЫСКИва- ют сведения о фирме, фирмы, связанные с фирмой, указанной в запросе,
способы классификации, принятые в реестре, и другую информацию о рее- стре. Наиболее полезен из них метод findServiceBindings о с теми же ар- гументами и возвращаемым значением, что и метод
(). По информации, возвращаемой методом findServiceBindings () можно узнать способы доступа к реестру. Метод возвращает самую обширную информацию о всей фирме.
В листинге 5.9 показано, как можно связаться с реестром и получить из не- го различную информацию о фирме с помощью JAXR.
•• Листинг 5.9. Получение информации из реестра с помощью JAXR
import import import import

235 Разработка Web-служб средствами Java
public class JAXRClient{
public static void args)(
// Несколько адресов реестров на выбор.
String
=
//"http://localhost:8080/registry-server/RegistryServerServlet";
if
< 1){
JAXRClient ");
JAXRClient jq = new
String httpProxyHost = "localhost";
String httpProxyPort = "8080";
Properties props = new queryURL);
httpProxyHost);
httpProxyPort);
Connection conn = null;
try{
ConnectionFactory fact =
conn =
с реестром установлена");

Глава 5. Регистрация Web Services в реестре
239
RegistryService rs
=
Collection findQualifiers = new
Collection
= new
+
+
// Поиск фирмы имени.
response =
namePatterns, null, null, null, null);
Collection orgs =
// Сведения о фирме.
Iterator while
Organization org =
" +
" +
" +
;
// Контактная информация
User
=
if (pc != null){
pcName =
" +

240 Разработка Web-служб средствами Java
Collection
=
Iterator phlter =
while
TelephoneNumber
=
телефона: " +
}
Collection eAddrs =
Iterator
=
while
EmailAddress eAd =
" +
}
}
// Услуги и доступ к
Collection services
Iterator
=
while
Service svc = (Service)
услуги: " +

Глава 5. Регистрация Web Services в реестре
услуги: " +
Collection serviceBindings =
Iterator
=
while
) {
ServiceBlnding sb =
" +
}
e){
if (connection != null)
try{
();
je){}
Изменением информации в реестре занимаются методы интерфейса
Изменение записей реестра
В интерфейсе BusinessLifeCycleManager собраны методы и
удаляющие или изменяющие информацию, хранящуюся в рее- стре. Кроме того, поскольку этот интерфейс расширяет интерфейс можно воспользоваться многочисленными методами последнего интерфейса, создающими записи в реестре.

Разработка Web-служб средствами Java
Объект интерфейса получаем с помощью объек- та типа RegistryService следующим методом:
BusinessLifeCycieManager
=
Около сорока унаследованных методов полученного объекта создают раз- личные записи В реестре:
И
другие.
Шесть методов удаляют записи разных типов, например, метод
Их аргументами служат коллекции ключей удаляемых записей.
Шесть методов заносят новые сведения, например, метод saveservices
Аргументами этих методов служат коллекции объектов соответствующего типа.
В листинге 5.10 показано создание записи о фирме в реестре.
5,10. Создание записи в
import import import j import import public class
Connection connection = null;
public public static void args){
String
=
"http://www-3.ibm.com/services/uddi/v2beta/inquiryapi";
//"http://uddi.rte.microsoft.com/inquire";
String publishURL =

Глава 5. Регистрация Web Services в реестре
243
String
= "testuser";
String password = "testuser";
String
= "localhost";
String httpProxyPort = "8080";
Properties props = new httpProxyHost);
httpProxyPort);
httpsProxyHost);
try{
ConnectionFactory fact =
conn установлено.");
RegistryService rs =
=
=
PasswordAuthentication passwdAuth =

244 Разработка Web-служб средствами Java
new
Set creds = new
// Создание фирмы.
Organization org =
и копыта");
InternationalString s =
"Прием
// Контактная информация.
User primaryContact =
=
И. Бендер");
=
Collection phoneNums = new add
;
=
Collection emailAddresses = new
;
ClassificationScheme
=
null, "ntis-gov:naics");
classification = (Classification)

Глава 5. Регистрация Web Services в реестре
245
"Snack and Nonalcoholic Beverage Bars", "722213");
Collection classifications = new
Collection services = new
Service service =
рогов");
InternationalString is =
качество");
Collection serviceBindings = new
ServiceBinding binding =
is =
Service Binding " +
"Description");
;
// allow us to publish a bogus URL without an error
// Add service bindings to service
// Add service to services, then add services to organization
;
// Add organization and submit to registry
// Retrieve key if successful
Collection orgs = new orgs.add(org) ;
BulkResponse response =
Collection exceptions =
if (exceptions == null){
saved");

246 Разработка Web-служб средствами Java
Collection keys =
Iterator
=
if
{
orgKey =
String id =
key is " + id);
}
}else{
Iterator exciter =
Exception exception = null;
while exception = (Exception)
on save: " +
e){
if (connection != null){
try{
je){}

ГЛАВА 6
Детали создания Web Services
В главе 3 мы разделили все средства создания Web-служб на четыре группы,
от самых простых, быстро создающих типичную Web-службу, до самых слож- ных, позволяющих детально прописать нужные свойства создаваемой Web- службы. В этой главе мы рассмотрим средства третьей группы — наборы ин- терфейсов и реализующих их классов, детально описывающие создаваемые
Web-службы. В настоящее время общеприняты интерфейсы фирмы Sun
Microsystems, образующие пакеты SAAJ, JAXM, JAXR, JAX-RPC. Мы уже об- ращались к этим пакетам на протяжении всей книги. Они распространяются отдельно или в составе набора инструментальных средств Sun WSDP (Web
Services Developer Pack). В набор WSDP входит, кроме этих пакетов, Web- контейнер Tomcat, выполняющий сервлеты и страницы JSP, и небольшой
Registry Server. В нем есть еще пакет JAXP со средствами об- работки документов XML и классы для создания сервлетов и страниц JSP.
С таким оснащением набор WSDP может работать самостоятельно, но его мощности недостаточно для обеспечения работы созданных с его помощью производственных Web-служб. Для создания мощных боевых Web-служб набор WSDP встраивается в систему уровня предприятия J2EE, а следова- тельно и во все серверы приложений, основанные на
ВЕА
WebLogic, IBM WebSphere, Sun ONE Application Server, JBoss, Sybase
EAServer, Oracle Application Server,
Orbix E2A, Borland Enterprise
Server. Начиная с версии 1.4 системы J2EE, набор WSDP будет сразу вхо- дить в ее состав.
Каждый из перечисленных выше пакетов, создающих Web-службы, состав- ляет один или несколько пакетов Java:
пакет SAAJ, предназначенный для создания отправляемого SOAP- послания или разбора полученного SOAP-послания, а также для син- хронного обмена SOAP-посланиями в документном стиле, расположен в одном Java-пакете j soap;

248 Разработка Web-служб средствами Java
• пакет JAXM, содержащий средства асинхронной отправки и получения
SOAP-посланий в документном стиле, находится в Java-пакете
• пакет JAX-RPC, реализующий процедурный стиль SOAP-посланий, образо- ван ИЗ семи Java-пакетов:
soap,
server.
В этой главе мы рассмотрим последовательно все эти пакеты и способы ра- боты с ними. Начнем с пакета SAAJ.
Создание SOAP-послания
Интерфейсы Java, входящие в пакет описывают SOAP- послание и его элементы. Для представления элементов XML, составляю- щих SOAP-послание, применяется модель дерева
(см. главу 7). По- этому во главе всех интерфейсов, описывающих послание, стоит интер- фейс Node.
Узел дерева элементов Node
Методы интерфейса Node традиционны для работы с узлом дерева:
• public string
— возвращает ссылку на значение первого узла-потомка, если оно представимо в виде строки; в противном случае возвращается null;
p u b l i c
()
возвращает ССЫЛКУ
узел- предок данного узла или null, если предка нет:
• public void parent) — устанавливает новый узел parent в качестве предка данного узла;
• public void
— удаляет узел из дерева.
Элемент послания SOAPElement
Интерфейс Node расширен интерфейсом SOAPElement, определяющим в об- щих чертах элементы XML, составляющие SOAP-послание. Его методы addxxx () наполняют создаваемый элемент содержимым:
• public SOAPElement name, String value) —
ляет атрибут name со значением value в открывающий тег данного эле- мента; возвращает ссылку на обновленный элемент с добавленным атри- бутом;

Глава 6. Детали создания Web Services 249
• public SOAPElement name) — создает НОВЫЙ
мент с именем name, вложенный в данный элемент, и возвращает ссылку на него;
• public SOAPElement
ляет элемент element, вложенный в данный элемент, и возвращает ссыл-
ку на него же;
public SOAPElement
создает НО-
ВЫЙ элемент с именем localName без префикса, вложенный в данный
элемент, и возвращает ссылку на него;
public SOAPElement localName, String
prefix) — создает новый элемент с расширенным именем
вложенный в данный элемент, и возвращает ссылку
на
public SOAPElement localName, String p r e f i x , s t r i n g u r i ) — создает новый элемент с расширенным именем
и идентификатором пространства имен uri, вложен-
ный в данный элемент, и возвращает ссылку на
public SOAPElement prefix, String
uri) — добавляет атрибут
со значением u r i к открывающему
данного элемента и возвращает ссылку на измененный элемент;
public SOAPElement text) —
тело
мента в виде строки t e x t и возвращает ссылку на измененный элемент;
public void encStyle) — добавляет атрибут
encodingstyle со значением
к открывающему тегу данного
элемента.
Остальные МеТОДЫ ВИДа getXxx () ,
()
SOAPElement
возвращают различные сведения об элементе и удаляют различные части
элемента.
Открывающий тег элемента XML
Интерфейс Name, используемый в перечисленных выше методах, определяет
имя элемента XML с префиксом или без префикса и с идентификатором
Пространства имен. Его методы
(),
() возвращают составные части имени XML в
виде строки типа s t r i n g .
Основные элементы SOAP-послания
Интерфейс SOAPElement расширен интерфейсами, описывающими корневой
элемент SOAP-послания
и вложенные в него элементы

250 Разработка Web-служб
Java
1   ...   7   8   9   10   11   12   13   14   ...   21


написать администратору сайта