Изучаем Java EE 7 - [230]

Шрифт
Интервал

>········maven-failsafe-plugin

>········2.12.4

>········

>··········

>············integration-test

>············

>··············integration-test

>··············verify

>············

>··········

>········

>······

>····

>··

>

При использовании Java EE 7 дескрипторы развертывания необязательны, поэтому вам не нужны файлы web.xml или webservices.xml. Однако, поскольку Maven по умолчанию обязывает вас добавить файл web.xml в файл с расширением. war, необходимо изменить атрибут failOnMissingWebXml maven-war-plugin на false, иначе Maven не сможет создать файл.

Для компиляции и упаковки веб-службы откройте в командной строке корневой каталог, содержащий файл pom.xml, и введите следующую команду Maven:

>$··mvn package

Перейдите в папку target, где вы должны получить файл chapter14-service-1.0.war. Если вы откроете его, то увидите, что Validator.class, CardValidator.class и CreditCard.class находятся в каталоге WEB-INF\classes. Файл. war не содержит ничего более, даже файла WSDL (который будет генерироваться средой выполнения JAX-WS).

Вы можете выполнить модульный тест (см. листинг 14.37) и интеграционный тест (см. листинг 14.38) с помощью Maven Surefire и плагина Failsafe, введя следующую команду Maven:

>$ mvn integration-test

Теперь, когда SOAP веб-служба CardValidator разработана и протестирована, мы можем развернуть ее на GlassFish.

Развертывание на GlassFish

Как только веб-служба упакована в архив. war, она должна быть развернута в GlassFish. Это может быть сделано в командной строке asadmin. Откройте консоль и перейдите в папку вашего проекта, в которой находится файл chapter14-service-1.0.war, убедитесь, что GlassFish работает, и введите следующую команду:

>$ asadmin deploy chapter14-service-1.0.war

>Application deployed with name chapter14-service-1.0.

>Command deploy executed successfully.

Если развертывание прошло успешно, следующая команда должна вернуть имена развернутых компонентов и их типы:

>$ asadmin list-components

>chapter14-service-1.0 

Интересно отметить, что GlassFish распознает веб-модуль (файл. war может содержать веб-страницы, сервлеты и т. д.) как веб-службу. Если вы зайдете в консоль администрирования GlassFish, показанную на рис. 14.7 (http://localhost:4848/), то увидите, что файл chapter14-service-1.0 развернут в меню Applications (Приложения).


Рис. 14.7. Веб-службы, развернутые в консоли администрирования GlassFish


На этой странице, если вы выберете ссылку WSDL, откроется окно браузера, в котором будет находиться следующий URL и отобразится сгенерированный WSDL веб-службы SOAP CardValidator:

>http://localhost:8080/chapter14-service-1.0/CardValidatorService?wsdl

Интересно отметить, что вы не создавали эту WSDL и не развертывали ее в файле. war. Стек Metro автоматически генерирует WSDL на основе аннотаций, содержащихся в веб-службе (а также запрос SOAP Validate и ответ SOAP ValidateResponse, показанные на рис. 14.6). Этот WSDL мы будем применять для генерации клиентского прокси, так что потребитель может получить удаленный доступ к веб-службе.

Написание класса WebServiceConsumer

Веб-служба уже развернута, GlassFish запущен и работает, и вы знаете, на каком URL сгенерирован WSDL. Благодаря этому WSDL потребитель будет иметь возможность генерировать необходимые артефакты для вызова веб-службы с помощью инструмента wsimport. Во-первых, напишем код потребителя, как показано в листинге 14.40.


Листинг 14.40. Класс WebServiceConsumer, вызывающий веб-службы с помощью внедрения

>public class WebServiceConsumer {

>··@WebServiceRef

>··private static CardValidatorService cardValidatorService;

>··public static void main(String[] args) {


>····CreditCard creditCard = new CreditCard();

>····creditCard.setNumber("123 41234");

>····creditCard.setExpiryDate("10/12");

>····creditCard.setType("VISA");

>····creditCard.setControlNumber(1234);


>····CardValidator cardValidator = cardValidatorService.getCardValidatorPort();


>····System.out.println(cardValidator.validate(creditCard));

>··}

>}

Класс WebServiceConsumer создает экземпляр объекта CreditCard, устанавливает значения некоторых его свойств, внедряет ссылку на веб-службу, вызывает метод validate() и отображает результат (true или false в зависимости от того, действительна ли кредитная карта). Интересно то, что потребитель не имеет ни одного из этих классов. CardValidatorService, CardValidator и CreditCard совершенно ему незнакомы. Код не будет скомпилирован, пока все эти классы не сгенерируются.

Создание артефактов потребителя и упаковка с помощью Maven

Перед компиляцией класса WebServiceConsumer вам нужно сгенерировать артефакты с помощью инструмента wsimport. Хорошая новость состоит в том, что Maven имеет плагин JAX-WS с целью wsimport, которая выполняется автоматически во время фазы жизненного цикла generate-resources. Maven использует богатый жизненный цикл для создания приложений. Фаза generate-resources применяется для генерации кода и выполняется перед компиляцией. Единственное, что нужно сделать, — это указать цели wsimport, где можно найти документ WSDL. У вас есть эта информация, потому что вы развернули веб-службу в GlassFish и отобразили содержимое WSDL. Он располагается здесь:


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.