Главная » Java, Web, XML » Пакет JAXR

0

Итак, уже разработано несколько различных систем регистрации и поиска Web-служб: UDDI, ebXML, WS-lnspection. Есть и другие системы, не указанные в этой книге. Все эти системы требуют разных методов доступа к реестру и работы с ним. Для каждой системы приходится создавать своего клиента, работающего с реестром по правилам данной системы поиска Web-служб.

Фирма Sun решила разработать единую методику доступа к реестрам разных типов и создала набор интерфейсов JAXR (Java API for XML Registries). Этот набор реализован в пакете Sun WSDP. Там же приведен пример клиента JAXR. Это графическая утилита просмотра реестров Registry Browser. Она вызывается из командной строки просто набором имени командного файла

$ jaxr-browser

В составе WSDP есть и простой тренировочный реестр, реализованный в виде сервлета RegistryServerServlet. Реестр работает в Web-контейнере Tomcat и хранит информацию в небольшой базе данных Apache Xindice (произносится, как говорят авторы, "Зин-ди-чи", с итальянским акцентом), тоже входящей в состав WSDP. Для запуска реестра надо запустить Tomcat и стартовать базу данных:

$ cd $WSDP_HOME/bin

$ startup $ xindice-start

Для проверки работы реестра и для посылки ему сообщений применяется специальная утилита, работающая из командной строки. Для входа в реестр надо набрать следующую командную строку:

‘ $ registry-server-test run-cli-request -Dxml/GetAuthToken.xml

Для работы с реестром прямо через базу данных Xindice в составе WSDP есть графическая утилита          Она запускается из командной строки:

$ registry-server-test run-indri

Мы рассмотрим подробнее работу с реестром в главе 5, а пока займемся набором интерфейсов JAXR.

Поскольку набор JAXR рассчитан на работу с реестрами самых разных типов, он содержит только интерфейсы, которые должен реализовать поставщик услуг (service provider) конкретного реестра. Интерфейсы будут по- разному реализованы поставщиком услуг     и поставщиком услуг

ebXML, но клиент этого не замечает, он просто связывается с поставщиком

Набор JAXR СОСКШ" ИЗ двух пакетов javax.xmi. registry И javax. xml. registry. infomodel. Интерфейсы первого пакета применяются клиентом для работы с реестром, интерфейсы второго пакета — поставщиком услуг для преобразования информации к виду, пригодному для хранения в базе данных реестра.

Для связи с поставщиком услуг клиент пользуется интерфейсом Экземпляр этого класса клиент получает с помощью класса-фабрики ConnectionFactory. Сначала статическим методом newinstance (> создается объект этого класса, затем методом setProperties о в него заносятся характеристики реестра, после этого методом                                                                                   создается объект типа connection.

После того            связь с поставщиком услуг установлена, методом

интерфейса Connection получаем объект типа RegistryService, в котором сосредоточены методы работы с реестром. Например, методом getBusinessQueryManager () МЖЮ ПОЛУЧИТЬ объект ТИП а

содержащий методы                                              () получения инфор

мации из реестра.

В листинге 2.10 показано, как можно связаться с реестром и получить из него различную информацию с помощью JAXR.

Листинг 2.10. Получение информации из реестра с помощью JAXR

import javax.xml. registry. *;

import j avax.xml.registry.infomodel.*;

услуг и пользуется интерфейсами пакета JAXR. Схема обращения клиента к реестру через поставщика услуг показана на рис. 2.4.

import j ava. net. *;

import

public class

public static void main(String[] args){

// Несколько адресов реестров на выбор. String queryURL =

"http://www-3.ibm.com/services/uddi/inquiryapi"; //"http://uddi.rte.microsoft.com/inquire";

//"http://localhost:8080/registry-server/RegistryServerServlet";

if (args.length < 1) {

System.out.println("Usage: java JAXRClient <name>"); System.exit(1);

}

JAXRClient jq = new JAXRClient();

String httpProxyHost = "localhost"; String httpProxyPort = "8080";

Properties props = new

props.setProperty("j avax.xml.registry.queryManagerURL",

queryURL);

props.setProperty("com.sun.xml.registry.http.proxyHost",

httpProxyHost); props.setProperty("com.sun.xml.registry.http.proxyPort",

httpProxyPort);

Connection connection = null; try{

ConnectionFactory factory =

ConnectionFactory.newInstance();

factory.setProperties(props);

5 Зэк. 748 connection = factory.createConnection();

System.out.println("Связь с реестром установлена");

RegistryService rs = connection.getRegistryService(); BusinessQueryManager bqm = rs.getBusinessQueryManager();

Collection findQualifiers = new ArrayList () ; findQualifiers.add(FindQualifier.SORT_BY_NAME_DESC);

Collection           = new

namePatterns.add("%"+args[0]+ " % " ) ;

// Поиск фирмы по имени. response = bqm.findOrganizations(findQualifiers,

namePatterns, null, null, null, null);

Collection orgs =

// Сведения о фирме . Iterator orglter = orgs.iterator(); while (orglter.hasNext ()){

Organization org = (Organization) orglter.next();

System.out.println("Название: " + org.getName().getValue());

System.out.println("Описание: " +

org.getDescription().getValue());

System.out.println("Идентификатор: " + org.getKeyO .getld() ) ;

// Контактная информация User pc = org.getPrimaryContact();

if (pc != null) (

PersonName pcName = pc.getPersonName ();

System.out.println("Название: " + pcName.getFullName ());

Collection phNums =

pc.getTelephoneNumbers(null);

Iterator phlter = phNums.iterator ();

while (phlter.hasNext()){

TelephoneNumber num =

(TelephoneNumber)phlter.next();

System.out.println("Номер телефона: " + num.getNumber()) ;

}

Collection eAddrs = pc.getEmailAddresses(); Iterator ealter = eAddrs.iterator();

while

EmailAddress eAd =                           ‘

(EmailAddress) ealter.next();

System.out.println("E-mail: " + eAd.getAddress());

}

}

/ / Услуги и доступ к ним Collection services = org.getServices();

Iterator svclter = services.iterator();

while (svcIter.hasNext()){

Service svc = (Service) svclter.next();

System.out.println("Название услуги: " + svc.getName().getValue());

System.out.println("Описание услуги: " + svc.getDescription() .getValue ());

Collection serviceBindings =

svc.getServiceBindings();

Iterator sblter = serviceBindings.iterator();

while

ServiceBinding sb

(ServiceBinding)sblter.next() ;

System.out.println("Адрес URI: " + sb.getAccessURI());

I

I

System.out.println("——— ") ;

}

}catch(Exception e){

e.printStackTrace(); }finally{

if (connection != null) try {

connection.close(); }catch(JAXRException je){}

}

}

)

Литература:

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

По теме:

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