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

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


Листинг 14.16. Веб-служба CardValidator, к которой применены аннотации преобразования

>@WebService(portName = "CreditCardValidator", 

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

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

>public class CardValidator {

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

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

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

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

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

>··}


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

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

>··public void validate(@WebParam(name = "Credit-Card-Number") 

>·······················String creditCardNumber) {

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

>··}


>··@WebMethod(exclude = true)

>··public void validate(Long creditCardNumber) {

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

>··}

>}

В листинге 14.16 определена веб-служба, которая следует модели «RPC/буквальное кодирование» и предоставляет только два метода (обратите внимание, что метод validate(Long CreditCardNumber) не виден из-за аннотации @WebMethod(exclude=true)). Каждый параметр метода и возвращаемые значения переименованы, чтобы WSDL получилась более выразительной. В листинге 14.17 показан результирующий WSDL-документ, который вы можете сравнить с исходным, приведенным в листинге 14.1 (различия выделены полужирным шрифтом).


Листинг 14.17. WSDL после настройки

>

>

>······xmlns: soap="http://schemas.xmlsoap.org/wsdl/soap/" 

>······xmlns: tns="http://chapter14.javaee7.book.agoncal.org/" 

>······xmlns: xsd="http://www.w3.org/2001/XMLSchema" 

>······xmlns="http://schemas.xmlsoap.org/wsdl/" 

>······targetNamespace="http://chapter14.javaee7.book.agoncal.org/" 

>······name="ValidatorService">

>··

>····

>······

>········schemaLocation="http://localhost:8080/chapter14/ValidatorService?xsd=1"/>

>····

>··

>··

>····

>··

>··

>····

>··

>··

>····

>··

>··

>··

>····

>······

>······

>····

>····

>······

>······

>····

>··

>··

>····

>······style="rpc"/>

>····

>······

>······

>········

>······

>······

>········

>······

>····

>····

>······

>······

>········

>······

>······

>········

>······

>····

>··

>··

>····

>·······binding="tns: CreditCardValidatorBinding">

>······

>····

>··

>

Аннотация @WebService переименовывает элементы WSDL и . Аннотация @WebMethod переименовывает элемент , а @WebResult и @WebParam — элемент , который является частью элемента .

XML-схема изменяется, как и запрос и ответ, определенные в элементе . Можно увидеть (листинг 14.18), что она значительно отличается от XSD, заданной в листинге 14.2. Это произошло потому, что веб-служба SOAP использует стиль RPC (не определены документы запроса/ответа, вместо этого применяются типы creditCard и boolean).


Листинг 14.18. XML-схема после настройки

>

>···········targetNamespace="http://chapter14.javaee7.book.agoncal.org/" version="1.0">

>··

>····

>····

>····

>····

>····

>··

>

WSDL (см. листинг 14.17) и XSD (см. листинг 14.18) используются для определения контракта между потребителем и поставщиком службы. Но во время выполнения они не применяются и потребитель и поставщик обмениваются только конвертами SOAP. В листинге 14.19 показан SOAP-запрос, который отправляется веб-службе. Он определяет вызываемый метод (ValidateCreditCard) и параметры, передаваемые этому методу (Credit-Card).


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