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

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

Написание интеграционного теста CardValidatorIT

Интеграционное тестирование веб-службы SOAP означает ее развертывание на веб-сервер, доступ к ее WSDL с использованием всех возможностей контейнера и т. д. Ранее это было трудоемкой задачей, поскольку вы должны были запустить среду выполнения контейнера, упаковать ваше приложение, развернуть и протестировать его. Но с появлением Java SE 6 вы можете использовать встроенный веб-сервер благодаря API javax.xml.ws.Endpoint.

В листинге 14.38 показан класс теста JUnit, который публикует нашу веб-службу CardValidator SOAP в заданный URL (http://localhost:8080/cardValidator). После публикации (endpoint.isPublished()) он может получить доступ к сгенерированной WSDL через URL http://localhost:8080/cardValidator?wsdl и использовать его для создания службы (Service.create(wsdlDocumentLocation, serviceQN)). Метод service.getPort возвращает прокси клиента веб-службе SOAP, где можно затем вызывать метод (cardValidator.validate(creditCard)). Прежде чем закончить тестирование, необходимо свернуть веб-службу (endpoint.stop()).


Листинг 14.38. Интеграционный тест CardValidatorIT

>public class CardValidatorIT {

>··@Test

>··public void shouldCheckCreditCardValidity() throws MalformedURLException {

>····// Публикует веб-службу SOAP

>····Endpoint endpoint = 

>······Endpoint.publish("http://localhost:8080/cardValidator", 

>·······················new CardValidator());

>····assertTrue(endpoint.isPublished());

>····assertEquals("http://schemas.xmlsoap.org/wsdl/soap/http", 

>·················endpoint.getBinding(). getBindingID());


>····// Необходимые свойства для доступа к веб-службе

>····URL wsdlDocumentLocation = 

>······new URL("http://localhost:8080/cardValidator?wsdl");

>····String namespaceURI = "http://chapter14.javaee7.book.agoncal.org/";

>····String servicePart = "CardValidatorService";

>····String portName = "CardValidatorPort";

>····QName serviceQN = new QName(namespaceURI, servicePart);

>····QName portQN = new QName(namespaceURI, portName);


>····// Создает объект службы

>····Service service = Service.create(wsdlDocumentLocation, serviceQN);

>····Validator cardValidator = service.getPort(portQN, Validator.class);


>····// Вызывает веб-службу

>····CreditCard creditCard = new CreditCard("123 41234", "10/10", 1234, "VISA");

>····assertTrue("Кредитная карта действительна", 

>····cardValidator.validate(creditCard));


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

>····assertFalse("Кредитная карта недействительна", 

>····cardValidator.validate(creditCard));


>····// Отключает видимость веб-службы SOAP

>····endpoint.stop();

>····assertFalse(endpoint.isPublished());

>··}

>}

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

Компиляция, тестирование и упаковка с помощью Maven

Веб-служба CardValidator (интерфейс в листинге 14.35 и реализации в листинге 14.36) должна быть скомпилирована, проверена и упакована в архив. war (war). Файл pom.xml (листинг 14.39) объявляет зависимость glassFish-embedded-all, которая является удобным способом получить доступ ко всем спецификациям Java EE 7, в том числе к метаданным JAX-WS и веб-службам. На самом деле glassFish-embedded-all содержит полную реализацию GlassFish 4.0 в одном файле. jar, полезную для компиляции и встраивания. Установка версии 1.7 в maven-compiler-plugin явно указывает, что вы хотите использовать Java SE 7 (1.7).


Листинг 14.39. Файл pom.xml для компиляции, тестирования и упаковки веб-службы

>

>

>·········xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" 

>·········xsi: schemaLocation="http://maven.apache.org/POM/4.0.0 

>·········http://maven.apache.org/xsd/maven-4.0.0.xsd">

>··4.0.0


>··

>····chapter14

>····org.agoncal.book.javaee7

>····1.0

>··


>··org.agoncal.book.javaee7.chapter14

>··chapter14-service

>··1.0

>··war


>··

>····

>······org.glassfish.main.extras

>······glassfish-embedded-all

>······4.0

>······provided

>····


>····

>······junit

>······junit

>······4.11

>·····test

>····

>··


>··

>····

>······

>········org.apache.maven.plugins

>········maven-compiler-plugin

>········2.5.1

>········

>··········1.7

>··········1.7

>········

>······

>······

>········org.apache.maven.plugins

>········maven-war-plugin

>········2.2

>········

>··········false

>········

>······

>······

>········org.apache.maven.plugins


Рекомендуем почитать
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 так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.