T.M. SoftStudio

feci quod potui, faciant meliora potentes

JAX-RPC API

Пакеты javax.xml.rpc.handler и javax.xml.rpc.handler.soap

Пакеты javax.xml.rpc.handler и javax.xml.rpc.handler.soap позволяют создавать обработчики SOAP-сообщений, как на стороне клиента, так и на стороне сервера. При этом обработчики группируются в цепочки, которые будут служить фильтрами для входящих и исходящих SOAP-сообщений. Цепочки обработчиков связываются с Service-объектом с помощью конфигурационного файла config.xml или программным образом, используя реестр обработчиков HandlerRegistry, или с конечной точкой Web-сервиса с помощью конфигурационных файлов config.xml и jaxrpc-ri.xml.

Каждый класс обработчика SOAP-сообщений должен реализовывать интерфейс javax.xml.rpc.handler.Handler, предоставляющий следующие методы.

  • boolean handleRequest(MessageContext context)

boolean handleResponse(MessageContext context)

boolean handleFault(MessageContext context)

Обрабатывают запросы, ответы и SOAP-ошибки, используя объекты javax.xml.rpc.handler.MessageContext, представляющие контекст сообщения. Интерфейс MessageContext имеет методы:

    – void setProperty(java.lang.String name, java.lang.Object value)

java.lang.Object getProperty(java.lang.String name)

void removeProperty(java.lang.String name)

устанавливающие, возвращающие и удаляющие используемые свойства контекста;

    – boolean containsProperty(java.lang.String name)

java.util.Iterator getPropertyNames()

проверяющие наличие свойства и возвращающие итератор свойств.

Сама же обработка SOAP-сообщений базируется на пакете javax.xml.soap. Для получения SOAP-сообщения используется интерфейс javax.xml.rpc.handler.soap.SOAPMessageContext, расширяющий интерфейс MessageContext и имеющий методы javax.xml.soap.SOAPMessage getMessage(), void setMessage(javax.xml.soap.SOAPMessage message) и java.lang.String[] getRoles().

  • void init(HandlerInfo config)

Обеспечивает инициализацию обработчика, используя объект javax.xml.rpc.handler.HandlerInfo, представляющий информацию об обработчике. Класс HandlerInfo имеет следующие конструкторы и методы:

    – public HandlerInfo(), public HandlerInfo(java.lang.Class handlerClass, java.util.Map config, javax.xml.namespace.QName[] headers) — создают объекты HandlerInfo;

    – public void setHandlerClass(java.lang.Class handlerClass) и public java.lang.Class getHandlerClass() — первый метод устанавливает, второй метод возвращает класс обработчика;

    – public void setHandlerConfig(java.util.Map config) и public java.util.Map getHandlerConfig() — первый метод устанавливает, второй метод возвращает конфигурацию обработчика;

    – public void setHeaders(javax.xml.namespace.QName[] headers) и public javax.xml.namespace.QName[] getHeaders() — первый метод устанавливает, второй метод возвращает подлежащие обработке блоки SOAP-заголовка.

  • void destroy()

Позволяет очистить все ресурсы по завершении работы обработчика.

  • javax.xml.namespace.QName[] getHeaders()

Возвращает подлежащие обработке блоки SOAP-заголовка.

Как правило, пользовательский класс обработчика не реализует напрямую интерфейс Handler, а расширяет абстрактный класс javax.xml.rpc.handler.GenericHandler, который реализует интерфейс Handler и имеет методы:

public boolean handleRequest(MessageContext context)

public boolean handleResponse(MessageContext context)

public boolean handleFault(MessageContext context)

public void init(HandlerInfo config)

public void destroy()

public abstract javax.xml.namespace.QName[] getHeaders()

Интерфейс javax.xml.rpc.handler.HandlerRegistry обеспечивает программную конфигурацию цепочек обработчиков на стороне клиента. Объект HandlerRegistry получается методом javax.xml.rpc.Service.getHandlerRegistry(), после чего его методы java.util.List getHandlerChain(javax.xml.namespace.QName portName) и void setHandlerChain(javax.xml.namespace.QName portName, java.util.List chain) позволяют возвратить и установить списки обработчиков в цепочке, состоящие из объектов javax.xml.rpc.handler.HandlerInfo.

При выполнении цепочки обработчиков управляются объектами javax.xml.rpc.handler.HandlerChain среды выполнения JAX-RPC, причем за создание класса реализации интерфейса HandlerChain отвечает сама JAX-RPC реализация.