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

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

Объект CreditCard (листинг 14.6) — это объект, которым обмениваются потребитель и веб-служба SOAP. При описании архитектуры веб-службы данные для обмена должны представлять собой XML-документ, поэтому требуется метод для преобразования объекта Java в документ XML. Здесь в действие вступает JAXB, который имеет простые аннотации и мощный API. Как показано в главе 12, объект типа CreditCard должен иметь аннотацию @javax.xml.bind.annotation.XmlRootElement, а также несколько других аннотаций для преобразования (например, @XmlAttribute), если вам нужно настроить преобразование. Тогда JAXB сможет преобразовать XML в Java и наоборот.


Листинг 14.6. Класс CreditCard с аннотациями JAXB

>@XmlRootElement

>public class CreditCard {

>··@XmlAttribute(required = true)

>··private String number;

>··@XmlAttribute(name = "expiry_date", required = true)

>··private String expiryDate;

>··@XmlAttribute(name = "control_number", required = true)

>··private Integer controlNumber;

>··@XmlAttribute(required = true)

>··private String type;

>··// Конструкторы, методы работы со свойствами

>}

Благодаря аннотациям JAXB можно избежать разработки низкоуровневых средств анализа XML, и это происходит неявно. Веб-служба манипулирует объектом Java, и то же верно для потребителя.

Структура веб-службы SOAP

Как и большинство компонентов Java EE 7, веб-службы SOAP полагаются на парадигму конфигурации с помощью исключений, которая указывает, что настройка компонента является исключением. Необходима только одна аннотация, чтобы превратить POJO в веб-службу SOAP @WebService. К написанию веб-службы предъявляются следующие требования:

• класс должен иметь аннотацию @javax.jws.WebService или XML-эквивалент в дескрипторе развертывания (webservices.xml);

• класс (он же реализация компонента службы) может реализовать нуль или более интерфейсов (интерфейс конечной точки службы), которые должны иметь аннотацию @WebService;

• класс должен быть определен как общедоступный и не должен иметь спецификаторы final или abstract;

• класс должен иметь общедоступный конструктор по умолчанию;

• класс не должен определять метод finalize();

• для того чтобы преобразовать веб-службу SOAP в компонент-конечную точку, класс должен иметь аннотацию @javax.ejb.Stateless или @javax.ejb.Singleton (см. главу 7);

• служба должна быть объектом, не сохраняющим состояние, и не должна сохранять характерное для клиента состояние во время вызовов методов.

Спецификация WS-Metadata (JSR 181) утверждает, что, пока объект отвечает этим требованиям, POJO может быть использован для реализации веб-службы, развернутой в контейнере сервлета. Его обычно называют сервлетом конечной точки. Компоненты, не сохраняющие состояния, или синглтоны также могут быть использованы для реализации веб-службы, которая будет развернута в контейнере EJB (конечная точка EJB).

Конечные точки веб-служб SOAP

JAX-WS позволяет использовать в качестве веб-служб обычные классы Java и EJB. Мы называем это интерфейсами конечной точки службы (SEI). Сравнивая код POJO (см. листинг 14.5) и веб-службы EJB (листинг 14.7), сложно увидеть какие-либо различия, за исключением того, что веб-служба EJB имеет дополнительные аннотации @Stateless (или @Singleton). Однако упаковка может отличаться, что вы увидите дальше.


Листинг 14.7. Веб-служба CardValidator в качестве конечной точки EJB

>@WebService

>@Stateless

>public class CardValidator {


>··public boolean validate(CreditCard creditCard) {

>····Character lastDigit = creditCard.getNumber(). charAt(

>··························creditCard.getNumber(). length() — 1);


>····if (Integer.parseInt(lastDigit.toString()) % 2!= 0) {

>······return true;

>····} else {

>······return false;

>····}

>··}

>}

Обе конечные точки имеют почти идентичное поведение, но если использовать конечные точки EJB, можно получить несколько преимуществ. Поскольку веб-служба — это тоже EJB, транзакции и безопасность будут управляться контейнером автоматически, а также могут быть задействованы перехватчики, что невозможно в том случае, если в качестве конечной точки используется сервлет. Бизнес-код может быть представлен в виде веб-службы и в виде EJB в одно и то же время. Это означает, что бизнес-логика может быть доступна через SOAP, а также через RMI, если добавить удаленный интерфейс.

Преобразование WSDL

На уровне служб системы определяются в терминах XML-сообщений, операций WSDL и сообщений SOAP. Между тем на уровне Java приложения определяются в терминах объектов, интерфейсов и методов. Необходимо выполнить преобразование объектов Java в операции WSDL. Среда выполнения JAXB использует аннотации, чтобы определить, как осуществить маршалинг/демаршалинг класса в XML и из него. Кроме того, JWS применяет аннотации для преобразования классов Java в WSDL и для определения того, как произвести маршалинг вызова метода в запрос SOAP и демаршалинг ответа SOAP в экземпляр возвращаемого методом типа.

В спецификациях JAX-WS (JSR 224) и WS-Metadata (JSR 181) определены два различных типа аннотаций:

• аннотации отображения WSDL — относятся к пакету javax.jws и позволяют вам изменить преобразование WSDL/Java. Аннотации @WebMethod, @WebResult, @WebParam и @OneWay используются веб-службой для настройки сигнатуры доступных методов;


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