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

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

>

>

Эта аннотация также включает и другие элементы, предназначенные для настройки WSDL, такие как пространство имен XML для возвращенного значения, и выглядит как аннотация @WebParam, показанная в листинге 14.12.


Листинг 14.12. @WebParam API

>@Retention(RUNTIME) @Target(PARAMETER)

>public @interface WebParam {

>··String name() default "";

>··public enum Mode {IN, OUT, INOUT};

>··String targetNamespace() default "";

>··boolean header() default false;

>··String partName() default "";

>};

@WebParam

Аннотация @javax.jws.WebParam, показанная в листинге 14.12, похожа на аннотацию @WebResult, поскольку она настраивает параметры для методов веб-службы. Ее API позволяет изменить имя параметра в WSDL (листинг 14.13), пространство имен и тип. Допустимые типы: IN, OUT или INOUT (оба), которые определяют, является параметр входящим или возвращаемым (по умолчанию IN).


Листинг 14.13. Параметр метода переименован

>@WebService

>public class CardValidator {

>··public boolean validate(@WebParam(name= "Credit-Card", mode = IN) 

>··························CreditCard creditCard) {

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

>··}

>}

Опять же если вы сравните это со стандартным XSD, определенным в листинге 14.2, то заметите, что по умолчанию имя этого параметра — arg0. Аннотация @WebParam переопределяет это значение по умолчанию именем Credit-Card:

>

>

>

>

@OneWay

Аннотация @OneWay может быть использована для методов, которые не имеют возвращаемого значения, например возвращающих значение типа void. Эта аннотация не содержит элементов и может рассматриваться как интерфейс разметки, который информирует контейнер, что вызов может быть оптимизирован, поскольку нет возвращения (можно, например, использовать асинхронный вызов).

@SoapBinding

Связывание описывает, как веб-служба связана с протоколом обмена сообщениями, в частности с протоколом SOAP. Существует два стиля программирования для связывания SOAP, определенного в WSDL 1.1: RPC и документ (он же обмен сообщениями). От этого выбора зависит то, как будет структурировано тело содержимого SOAP.

• Документ — сообщение SOAP включает в себя документ. Оно посылается в виде одного документа в элементе без дополнительных правил форматирования и содержит все, о чем договорились отправитель и получатель. Выбирается стандартный стиль документа.

• RPC — сообщение SOAP содержит параметры и возвращаемые значения. включает элемент с именем метода или удаленной процедуры. Этот элемент, в свою очередь, хранит элемент для каждого параметра данной процедуры.

При связывании SOAP (независимо от того, какой стиль задан) следует выбрать один из двух различных форматов сериализации/десериализации.

• Буквальный — данные сериализуются в соответствии с XML-схемой.

• Закодированный — кодирование SOAP определяет, как должны быть сериализованы объекты, структуры, массивы и деревья объектов.

Это позволяет вам выбрать один из четырех вариантов пар «стиль/использование»:

• документ/буквальная сериализация (по умолчанию);

• документ/закодированная сериализация (не совместима с WS-*);

• RPC/буквальная сериализация;

• RPC/закодированная сериализация.

По умолчанию сгенерированная WSDL, которую вы видели ранее, использует первую модель (документ/буквальная сериализация). Применение аннотации @SoapBinding для класса, как показано в листинге 14.14, может изменить это.


Листинг 14.14. Веб-служба, использующая модель «RPC/буквальная сериализация»

>@WebService

>@SOAPBinding(style = RPC, use = LITERAL)

>public class CardValidator {

>··public boolean validate(CreditCard creditCard) {

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

>··}

>}

В листинге 14.14 переопределяется стандартное связывание, вместо документа используется стиль RPC. Это оказывает влияние на WSDL и XML-схему, которая генерируется для поставщика веб-служб SOAP и потребителя. В листинге 14.15 продемонстрированы эти различия.


Листинг 14.15. Различия в WSDL между стилями «документ» и RPC

>

>

>··

>

>

>··

>

>…

>

>··

>

>

>··

>

>

>··

>

>…

>

Собираем все преобразования воедино

Чтобы иметь более полное понимание того, какое влияние оказывают эти аннотации на веб-службы SOAP, соберем их вместе и посмотрим на различные артефакты. Я буду использовать простую веб-службу CardValidator, определенную в листинге 14.5, и добавлю большую часть рассмотренных аннотаций для преобразования (листинг 14.16).


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