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

20

我创建了一个实现了SOAPHandler<SOAPMessageContext>LoggingHandler

它应该在handleMessage被触发时记录日志(但在我的情况下从未被调用)

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

现在我尝试这样做:

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

我没有看到任何请求/响应的XML。

你能提供任何解决方案吗?也许有另一种方法可以查看输出和请求的XML?

3个回答

27

如果使用这种方法,它就会开始运行:

binding.setHandlerChain(handlerList);

那么,首先用以下代码初始化这个列表:

binding.getHandlerChain();

然后将您的元素添加到列表中,在所有元素之后

setHandlerChain();

3

您可以在log4j.xml文件中添加日志记录器:

<!-- Log WebService's inputs and outputs -->
<logger name="org.apache.cxf.interceptor">
    <level value="INFO" />
    <appender-ref ref="[YOUR_LOGGER]" />
</logger>

1
如果有人想知道@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来更新实际的列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接