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

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

• аннотации связывания SOAP — относятся к пакету javax.jws.soap и позволяют настроить связывание SOAP (@SoapBinding и @SOAPMessageHandler).

Как и все другие спецификации Java EE 7, аннотации веб-служб могут быть переопределены в необязательном дескрипторе развертывания XML (webservices.xml). Внимательнее посмотрим на аннотации преобразования WSDL.

@WebService

Аннотация @javax.jws.WebService помечает класс Java или интерфейс как веб-службу. Если аннотация использована непосредственно для класса (как во всех примерах выше), то процессор аннотаций контейнера сгенерирует интерфейс, так что следующие фрагменты кода эквивалентны. Вот пример аннотации для класса:

>@WebService

>public class CardValidator {…}

А следующий фрагмент кода показывает аннотацию на интерфейсе, который реализует класс. Как вы можете видеть, реализация должна определить полное имя интерфейса в атрибуте endpointInterface:

>@WebService

>public interface Validator {…}

>@WebService (endpointInterface = "org.agoncal.book.javaee7.chapter14.Validator")

>public class CardValidator implements Validator {…}

Аннотация @WebService имеет набор атрибутов (листинг 14.8), которые позволяют настроить имя веб-службы в файле WSDL (элементы или ) и в его пространстве имен, а также изменить расположение самой WSDL (атрибут wsdlLocation).


Листинг 14.8. @WebService API

>@Retention(RUNTIME) @Target(TYPE)

>public @interface WebService {

>··String name() default "";

>··String targetNamespace() default "";

>··String serviceName() default "";

>··String portName() default "";

>··String wsdlLocation() default "";

>··String endpointInterface() default "";

>}

Поэтому, когда правила преобразования WSDL по умолчанию не подходят для вашей веб-службы SOAP, просто используйте необходимые атрибуты. Приведенный ниже код изменяет порт и имя службы:

>@WebService(portName = "CreditCardValidator", 

>············serviceName = "ValidatorService")

>public class CardValidator {…}

Если вы сравните этот код со стандартным WSDL, описанным в листинге 14.1, то увидите следующие изменения:

>

>··

>··

>··

>

Когда вы используете аннотацию @WebService, будут предоставлены все общедоступные методы веб-служб, за исключением случаев, когда применяется аннотация @WebMethod.

@WebMethod

По умолчанию все общедоступные методы веб-служб SOAP попадают в WSDL и используют все правила отображения по умолчанию. Чтобы настроить некоторые элементы этого преобразования, вы можете добавить аннотацию @javax.jws.WebMethod для методов. API этой аннотации достаточно прост: он позволяет переименовать метод или исключить его из WSDL. В листинге 14.9 показано, как в веб-службе CardValidator переименовываются два первых метода и исключается последний.


Листинг 14.9. Два метода переименованы, последний исключен

>@WebService

>public class CardValidator {

>··@WebMethod(operationName = "ValidateCreditCard")

>··public boolean validate(CreditCard creditCard) {

>····// Бизнес-логика

>··}


>··@ WebMethod(operationName = "ValidateCreditCardNumber")

>··public void validate(String creditCardNumber) {

>····// Бизнес-логика

>··}


>··@WebMethod(exclude = true)

>··public void validate(Long creditCardNumber) {

>····// Бизнес-логика

>··}

>}

Как вы можете видеть во фрагменте WSDL, описанном в листинге 14.10, определены только два метода: ValidateCreditCard и ValidateCreditCardNumber. Последний был исключен из WSDL.


Листинг 14.10. Фрагмент WSDL с переименованными методами

>

>··

>

>

>··

>

>

>···

>

>

>··

>

>

>··

>····

>····

>··

>··

>····

>····

>··

>

@WebResult

Аннотация @javax.jws.WebResult управляет сгенерированным именем сообщения, возвратившего значение в WSDL. В листинге 14.11 возвращаемый результат метода validate() переименован в IsValid.


Листинг 14.11. Возвращаемый результат метода переименован

>@WebService

>public class CardValidator {

>··@WebResult(name = "IsValid")

>··public boolean validate(CreditCard creditCard) {

>····// Бизнес-логика

>··}

>}

По умолчанию имя возвращаемого значения в WSDL — return. Но с помощью аннотации @WebResult вы можете быть конкретнее и иметь более выразительный контракт:

>

>


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