Java JAX-WS Web服务客户端:如何记录日志请求和响应xml?

我创建了一个实现SOAPHandlerLoggingHandler实现

它应该在handleMessage触发时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()方法返回List的副本而不是列表本身。 所以你必须使用setHandlerChain来更新实际的List。