HandlerChain в java SOAP веб-сервисе. Применение цепочки handler’ов

Использование аннотации @HandlerChain при создании Java SOAP web-service.

Используемые технологии и библиотеки
  • Apache CXF 3.1.6
  • Spring MVC 4.3.0.Release

1. Описание задачи

Показать на примере использование цепочки обработчиков, которые задаются с помощью аннотации @HandlerChain и xml файла с описанием хендлеров.

2. Структура проекта

handlerchainStructure

l;
Относительно начального проекта SOAP java веб сервис. Пример Hello World, здесь добавлен один класс HandlerValidator и один xml файл — handler-chain.xml. Именно они и являются основными для темы данной статьи.

Данная статья будет описывать серверную часть (сам веб-сервис). К ней доступна статья описывающая клиентскую часть для тестирования этого веб-сервиса и handler’а.

3. Конфигурация: pom.xml, application-context.xml

Изменений относительно hello world примера из статьи чуть выше в этих файлах нет.

4. @HandlerChain

Аннотация @HandlerChain (цепочка обработчиков) используется для указания SOAP веб-сервису списка классов-обработчиков. В общем случае эти классы используются для изменения входящих и исходящих сообщений SOAP веб-сервиса. Если вы знакомы с сервлетами или перехватчиками, то хендлеры являются аналогом Servlet Filters или CDI\EJB Interceptors.

В классе HelloSoap была добавлена аннотация @HandlerChain и параметр file.

Обратите внимание как описан путь, чтобы xml файл был корректно найден в проекте.

4.1. handler-chain.xml

Наш веб-сервис HelloSoap ассоциируется с цепочкой обработчиков в указанном xml файле.

В примере используется только один handler и для добавления новых классов обработчиков нужно просто добавить описание в новом теге <handler>.

4.2. HandlerValidator implements SOAPHandler

Handler должен реализовывать интерфейс SOAPHandler.

HandlerValidator:

Данный обработчик принимает на вход контекст SOAP сообщения и использует его данные для преобразования исходящего сообщения.

Вначале мы проверяем входящие или исходящие это сообщение.

Мы будем преобразовывать только исходящее (response) сообщение. Вначале мы получаем заголовок сообщения и если он отсутствует, то выводим сообщение с ошибкой. Далее получаем итератор элементов в заголовке. Каждый элемент это node, которую можно изменить или прочитать. Для нашего примера мы получаем значения элемента и далее сравниваем его с заранее заданным значением.

Сразу поясню, что «пароль» мы будем записывать на клиенте. Эта информация известна и поэтому проверочный код достаточно сильно упрощен. В реальных случаях логика метода handleMessage() может быть намного сложнее.

Для тестирования работоспособности нашей цепочки из одного обработчика напишем клиентскую часть. Ее описание доступно по ссылке — HandlerChain в java SOAP веб-сервисе. Клиентская часть

 

Исходные коды

Handlers Server

Share Button
3
9992 Total Views 3 Views Today

Добавить комментарий