Клиент веб-сервиса Java JAX-WS: как запрос журнала и ответ xml?

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

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

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

теперь я пробую это:

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

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

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

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

 binding.setHandlerChain(handlerList); 

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

 binding.getHandlerChain(); 

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

 setHandlerChain(); 

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

      

Если кто-то задается вопросом «почему» от @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 setHandlerChain * is required to configure the binding instance with the new chain. * * @return java.util.List<Handler> Handler chain */ public java.util.List getHandlerChain(); 

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