我创建了一个实现SOAPHandler<SOAPMessageContext>
的LoggingHandler
实现
它应该在handleMessage
触发时记录(在我的例子中它从来没有被调用过)
MyService service = new MyService();
MyServicePort port = service.getPortType();
现在我尝试这样做:
BindingProvider bindingProvider = (BindingProvider)port;
bindingProvider.getBinding().getHandlerChain().add(new LoggingHandler());
但是,我没有看到任何请求/响应xml。
你能提出什么解决方案吗?也许还有另一种方式来查看输出和请求XML?
发布于 2010-05-11 15:04:24
如果您使用以下方法,它将开始工作:
binding.setHandlerChain(handlerList);
因此,首先使用以下命令初始化此列表
binding.getHandlerChain();
然后将您的元素添加到列表中,毕竟
setHandlerChain();
发布于 2013-01-23 19:29:38
您可以在log4j.xml文件中添加记录器:
<!-- Log WebService's inputs and outputs -->
<logger name="org.apache.cxf.interceptor">
<level value="INFO" />
<appender-ref ref="[YOUR_LOGGER]" />
</logger>
发布于 2018-04-10 02:52:33
如果有人想知道@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<Handler> Handler chain
*/
public java.util.List<javax.xml.ws.handler.Handler> getHandlerChain();
因此,getHandlerChain()方法返回列表的副本,而不是列表本身。所以你必须使用setHandlerChain来更新实际的列表。
https://stackoverflow.com/questions/2808544
复制相似问题