Изучаем Java EE 7 - [230]
>········
>········
>········
>··········
>············
>············
>··············
>··············
>············
>··········
>········
>······
>····
>··
>
При использовании 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.
>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. Он располагается здесь:
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.