Клиент веб-службы Java JAX-WS: как регистрировать запросы и ответы в формате xml? - PullRequest
17 голосов
/ 11 мая 2010

Я создал реализацию LoggingHandler, которая реализует SOAPHandler<SOAPMessageContext>

Он должен регистрироваться всякий раз, когда handleMessage срабатывает (и он никогда не вызывается в моем случае)

MyService service = new MyService();
MyServicePort port = service.getPortType();

Теперь я пытаюсь это:

BindingProvider bindingProvider = (BindingProvider)port;
bindingProvider.getBinding().getHandlerChain().add(new LoggingHandler());

Я не вижу ни одного запроса / ответа в формате xml.

Можете ли вы предложить какое-либо решение? Может быть, есть другой способ увидеть вывод и запросить XML?

Ответы [ 3 ]

23 голосов
/ 11 мая 2010

Он начинает работать, если вы используете этот метод:

binding.setHandlerChain(handlerList);

Итак, сначала инициализируйте этот список с помощью

binding.getHandlerChain();

затем добавьте свой элемент в список и после всего

setHandlerChain();
2 голосов
/ 23 января 2013

вы можете добавить регистратор в ваш файл log4j.xml:

<!-- Log WebService's inputs and outputs -->
<logger name="org.apache.cxf.interceptor">
    <level value="INFO" />
    <appender-ref ref="[YOUR_LOGGER]" />
</logger>
1 голос
/ 09 апреля 2018

Если кому-то интересно, «почему» @EugeneP отличный ответ.

В интерфейсе javax.xml.ws.Binding есть следующий комментарий.

/**
 * Gets a copy of the handler chain for a protocol binding instance.
 * If the returned chain is modified a call to 
 <code>setHandlerChain</code>
 * is required to configure the binding instance with the new chain.
 *
 *  @return java.util.List&lt;Handler> Handler chain
 */
 public java.util.List<javax.xml.ws.handler.Handler> getHandlerChain();

Таким образом, метод getHandlerChain () возвращает копию списка, а не сам список. Поэтому вы должны использовать setHandlerChain для обновления фактического списка.

...