繁体   English   中英

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

[英]Java JAX-WS web-service client: how log request & response xml?

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

它应该在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文件中添加记录器:

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

如果有人想知道@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()方法返回List的副本而不是列表本身。 所以你必须使用setHandlerChain来更新实际的List。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM