В среде 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.
Для генерации и тестирования клиента:
- В браузере перейдите на webservicex.net и загрузите файл WSDL для их службы Currency Convertor [sic]. WSDL находится по адресу http://www.webservicex.net/CurrencyConvertor.asmx?wsdl .
- Откройте IDE NetBeans 6.7 и создайте новый проект приложения Java. Назовите проект CurrencyConvertorClient.
- В окне «Projects» щелкните правой кнопкой мыши узел проекта CurrencyConvertorClient. Выберите «Создать»> «Другие»> «Веб-службы»> «Клиент веб-службы». Откроется мастер нового клиента веб-службы.
- На экране WSDL и расположение клиента выберите Локальный файл и найдите местоположение загруженного файла CurrencyConvertor.asmx.wsdl:
- Нажмите Готово. Мастер закроется, и среда IDE создаст следующее содержимое в дереве проекта:
- Откройте файл 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
} - Чтобы получить вывод, замените следующие две строки:
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; - Запустите проект. Окно вывода в 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) - Перейдите в окно «Проекты» и найдите папку 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> - Измените путь в атрибуте uri на что-то недопустимое. Очистите и постройте свой проект и запустите его снова. Проект строится и успешно работает. Хотя клиент не смог найти локальный ресурс, он мог найти ресурс в systemId .
- Переместите или переименуйте загруженный WSDL, который указан в атрибуте systemId . Запустите проект снова. Проект компилируется, потому что у вас есть копия всех необходимых файлов Java в Сгенерированных источниках. Однако среда IDE не отображает никаких результатов, поскольку не удалось найти WSDL и, следовательно, конечную точку службы.
- Измените значение атрибута uri обратно на правильный путь, wsdl / CurrencyConvertor.asmx.wsdl . Запустите проект снова. Теперь результат отображается правильно, потому что компилятор может найти локальную копию WSDL в файлах проекта.
Теперь у вас есть клиент JAX-WS, который может работать на любом компьютере, подключенном к Интернету. Очистите и постройте проект. CurrencyConverterClient.jar файл находится в директории Dist проекта. Вы можете найти его в окне файлов. Вы можете скопировать файл JAR и перенести его на любой компьютер с Java, подключенный к Интернету.