T.M. SoftStudio

feci quod potui, faciant meliora potentes

JAX-WS API

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

Пакеты javax.xml.ws.handler и javax.xml.ws.handler.soap позволяют создавать обработчиков входящих и исходящих SOAP-сообщений как на стороне клиента, так и на стороне сервера. На стороне сервера цепочки обработчиков устанавливаются с помощью аннотации @javax.jws.HandlerChain, на стороне клиента цепочки обработчиков конфигурируются посредством интерфейса javax.xml.ws.handler.HandlerResolver.

Объект HandlerResolver используется в качестве аргумента метода Service.setHandlerResolver(HandlerResolver handlerResolver) и создается как объект клиентского класса, реализующего интерфейс HandlerResolver. Интерфейс HandlerResolver имеет единственный метод java.util.List<Handler> getHandlerChain(PortInfo portInfo), вызываемый средой выполнения для получения списка обработчиков. Таким образом, основной задачей переопределения метода getHandlerChain() является создание списка обработчиков сообщений на стороне клиента. Объект javax.xml.ws.handler.PortInfo является внутренним для JAX-WS-реализации и предоставляет информацию о порте Web-сервиса, для которого создается цепочка обработчиков, с помощью перечисленных далее методов.

  • javax.xml.namespace.QName getServiceName()

Возвращает имя WSDL-элемента <service>.

  • javax.xml.namespace.QName getPortName()

Возвращает имя WSDL-элемента <port>.

  • java.lang.String getBindingID()

Возвращает идентификатор связывания с протоколом передачи сообщений.

Интерфейс javax.xml.ws.handler.Handler<C extends MessageContext> является базовым интерфейсом для реализации классами JAX-WS обработчиков сообщений. Интерфейс Handler имеет следующие методы.

  • boolean handleMessage(C context)

Вызывается средой выполнения для обработки входящих и исходящих сообщений. Возвращает false, если дальнейшая обработка сообщения в цепочке заблокирована.

  • boolean handleFault(C context)

Вызывается средой выполнения для обработки сообщений об ошибках.

  • void close(MessageContext context)

Вызывается после окончания обработки для освобождения ресурсов.

Интерфейс javax.xml.ws.handler.MessageContext представляет контекст обрабатываемых сообщений и имеет следующие поля:

  • static final java.lang.String MESSAGE_OUTBOUND_PROPERTY — если true, тогда сообщение исходящее;

  • static final java.lang.String INBOUND_MESSAGE_ATTACHMENTS — набор типа java.util.Map вложений входящего сообщения {MIME Content-ID, DataHandler};

  • static final java.lang.String OUTBOUND_MESSAGE_ATTACHMENTS — набор типа java.util.Map вложений исходящего сообщения {MIME Content-ID, DataHandler};

  • static final java.lang.String WSDL_DESCRIPTION — входящий источник типа org.xml.sax.InputSource для WSDL-документа;

  • static final java.lang.String WSDL_SERVICE — QName-имя WSDL-элемента <service>;

  • static final java.lang.String WSDL_PORT — QName-имя WSDL-элемента <port>;

  • static final java.lang.String WSDL_INTERFACE — QName-имя WSDL-элемента <interface> или <portType>;

  • static final java.lang.String WSDL_OPERATION — QName-имя WSDL-элемента <operation>;

  • static final java.lang.String HTTP_RESPONSE_CODE — HTTP-код ответа;

  • static final java.lang.String HTTP_REQUEST_HEADERS — HTTP-заголовки запроса;

  • static final java.lang.String HTTP_RESPONSE_HEADERS — HTTP-заголовки ответа;

  • static final java.lang.String HTTP_REQUEST_METHOD — HTTP-метод запроса;

  • static final java.lang.String SERVLET_REQUEST — объект запроса javax.servlet.http.HttpServletRequest;

  • static final java.lang.String SERVLET_RESPONSE — объект ответа javax.servlet.http.HttpServletResponse;

  • static final java.lang.String SERVLET_CONTEXT — объект javax.servlet.ServletContext;

  • static final java.lang.String QUERY_STRING — строка запроса;

  • static final java.lang.String PATH_INFO — HTTP-свойство PathInfo;

  • static final java.lang.String REFERENCE_PARAMETERS — SOAP-заголовки, имеющие атрибут wsa:IsReferenceParameter="true".

Интерфейс MessageContext имеет следующие методы:

void setScope(java.lang.String name, MessageContext.Scope scope)

MessageContext.Scope getScope(java.lang.String name)

Первый метод устанавливает, второй метод возвращает область действия свойства. Перечисление javax.xml.ws.handler.MessageContext.Scope имеет константы APPLICATION и HANDLER.

Интерфейс javax.xml.ws.handler.LogicalHandler<C extends LogicalMessageContext> расширяет интерфейс Handler<C> и позволяет создавать обработчиков, имеющих доступ к свойствам контекста сообщения и к его содержимому за исключением заголовков, специфичных для протокола передачи сообщений.

Интерфейс javax.xml.ws.handler.LogicalMessageContext расширяет интерфейс MessageContext и имеет дополнительно метод LogicalMessage getMessage(), возвращающий объект javax.xml.ws.LogicalMessage, который представляет содержимое сообщения без специфичных для протокола заголовков. Интерфейс LogicalMessage имеет методы javax.xml.transform.Source getPayload(), void setPayload(javax.xml.transform.Source payload), java.lang.Object getPayload(JAXBContext context), void setPayload(java.lang.Object payload, JAXBContext context), возвращающие и устанавливающие логическое содержимое сообщения.

Интерфейс javax.xml.ws.handler.soap.SOAPHandler<T extends SOAPMessageContext> расширяет интерфейс Handler<T> и позволяет создавать обработчиков заголовков сообщения. Интерфейс SOAPHandler дополнительно имеет метод java.util.Set<javax.xml.namespace.QName> getHeaders(), возвращающий QName-имена обрабатываемых заголовков сообщения.

Интерфейс javax.xml.ws.handler.soap.SOAPMessageContext расширяет интерфейс MessageContext и дополнительно имеет методы javax.xml.soap.SOAPMessage getMessage(), void setMessage(javax.xml.soap.SOAPMessage message), java.lang.Object[] getHeaders(javax.xml.namespace.QName header, JAXBContext context, boolean allRoles), java.util.Set<java.lang.String> getRoles().