Статьи

Улучшения переносимости и производительности в клиентах JAX-WS, созданных в среде IDE NetBeans 6.7

В среде IDE NetBeans 6.7 клиенты веб-службы JAX-WS быстрее и удобнее переносятся, поскольку клиенту больше не нужно находить и анализировать удаленный файл WSDL. Когда вы создаете клиента из WSDL, IDE создает копию этого WSDL и сохраняет ее в своем проекте. Более того, если WSDL ссылается на какие-либо файлы схемы или рекурсивно ссылается на другие файлы WSDL, IDE также создает копии этих файлов. В среде IDE также создается файл jax-ws-catalog.xml, который отображает ссылки удаленной системы на локальные пути.

Прежде чем клиент сможет вызвать операцию веб-службы, он должен проанализировать WSDL службы, чтобы получить такую ​​информацию, как URL-адрес конечной точки. Благодаря локальным копиям WSDL и отображению каталога удаленный WSDL не должен быть доступен для запуска клиента. (Даже если удаленный WSDL доступен, клиент работает быстрее без необходимости искать WSDL в Интернете.) Это означает, что вы можете распространять файл .war или .jar, созданный из вашего клиентского проекта. Пока служба работает, клиент будет работать на других машинах.

Чтобы увидеть, насколько переносимы клиенты JAX-WS, созданные в NetBeans 6.7, создайте простой клиент из файла WSDL, который имеется на вашем компьютере. Реальный сценарий будет использовать URL WSDL в Интернете. Для удобства загрузите WSDL на свой компьютер вместо использования его URL.

Для генерации и тестирования клиента:

  1. В браузере перейдите на webservicex.net и загрузите файл WSDL для их службы Currency Convertor [sic]. WSDL находится по адресу http://www.webservicex.net/CurrencyConvertor.asmx?wsdl .
  2. Откройте IDE NetBeans 6.7 и создайте новый проект приложения Java. Назовите проект CurrencyConvertorClient.
  3.  

  4. В окне «Projects» щелкните правой кнопкой мыши узел проекта CurrencyConvertorClient. Выберите «Создать»> «Другие»> «Веб-службы»> «Клиент веб-службы». Откроется мастер нового клиента веб-службы.
  5.  

  6. На экране WSDL и расположение клиента выберите Локальный файл и найдите местоположение загруженного файла CurrencyConvertor.asmx.wsdl:

  7.  

  8. Нажмите Готово. Мастер закроется, и среда IDE создаст следующее содержимое в дереве проекта:

  9.  

  10. Откройте файл Main.java в своем проекте CurrencyConvertorClient. Перетащите операцию CurrencyConvertorSoap ConversionRate из окна «Проекты» в тело метода основного метода, где в комментарии говорится // здесь логика приложения кода TODO . Среда IDE вставляет следующий блок try в основной метод:
    try { // Call Web Service Operation
    net.webservicex.CurrencyConvertor service = new net.webservicex.CurrencyConvertor();
    net.webservicex.CurrencyConvertorSoap port = service.getCurrencyConvertorSoap();
    // TODO initialize WS operation arguments here
    net.webservicex.Currency fromCurrency = null;
    net.webservicex.Currency toCurrency = null;
    // TODO process result here
    double result = port.conversionRate(fromCurrency, toCurrency);
    System.out.println("Result = "+result);
    } catch (Exception ex) {
    // TODO handle custom exceptions here
    }
  11.  

  12. Чтобы получить вывод, замените следующие две строки:
    net.webservicex.Currency fromCurrency = null;
    net.webservicex.Currency toCurrency = null;

    … со следующими строками, которые жестко кодируют клиента для возврата обменного курса доллара США к евро.

    net.webservicex.Currency fromCurrency = net.webservicex.Currency.USD;
    net.webservicex.Currency toCurrency = net.webservicex.Currency.EUR;
  13.  

  14. Запустите проект. Окно вывода в IDE показывает следующее. (Ваши пути, вероятно, будут другими, и обменный курс тоже может отличаться!)
    wsimport-client-generate:
    Created dir: G:\NetBeansProjects\67M2\CurrencyConvertorClient\build\classes
    Compiling 10 source files to G:\NetBeansProjects\67M2\CurrencyConvertorClient\build\classes
    Copying 2 files to G:\NetBeansProjects\67M2\CurrencyConvertorClient\build\classes
    compile:
    run:
    Result = 0.7544
    BUILD SUCCESSFUL (total time: 18 seconds)
  15.  

  16. Перейдите в окно «Проекты» и найдите папку META-INF проекта в разделе «Пакеты с исходным кодом». В этой папке откройте jax-ws-catalog.xml . Он отображает исходные ссылки на файл WSDL на копию WSDL в вашем проекте в файле META-INF.wsdl. Обратите внимание, что клиент сначала ищет ресурс в атрибуте uri, а затем ищет оригинальный файл WSDL.
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
    <system systemId="file:/G:/installation_files/CurrencyConvertor.asmx.wsdl"
    uri="wsdl/CurrencyConvertor.asmx.wsdl"/>
    </catalog>
  17.  

  18. Измените путь в атрибуте uri на что-то недопустимое. Очистите и постройте свой проект и запустите его снова. Проект строится и успешно работает. Хотя клиент не смог найти локальный ресурс, он мог найти ресурс в systemId .
  19.  

  20. Переместите или переименуйте загруженный WSDL, который указан в атрибуте systemId . Запустите проект снова. Проект компилируется, потому что у вас есть копия всех необходимых файлов Java в Сгенерированных источниках. Однако среда IDE не отображает никаких результатов, поскольку не удалось найти WSDL и, следовательно, конечную точку службы.
  21.  

  22. Измените значение атрибута uri обратно на правильный путь, wsdl / CurrencyConvertor.asmx.wsdl . Запустите проект снова. Теперь результат отображается правильно, потому что компилятор может найти локальную копию WSDL в файлах проекта.

Теперь у вас есть клиент JAX-WS, который может работать на любом компьютере, подключенном к Интернету. Очистите и постройте проект. CurrencyConverterClient.jar файл находится в директории Dist проекта. Вы можете найти его в окне файлов. Вы можете скопировать файл JAR и перенести его на любой компьютер с Java, подключенный к Интернету.