我正在使用Apache CXF框架.在我的客户端程序中,我需要记录CXF SOAP请求和SOAP响应.我用的时候
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress(host);
factory.setServiceClass(MyService.class);
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
Run Code Online (Sandbox Code Playgroud)
我在控制台中获得了这些SOAP请求和SOAP响应:
Nov 9, 2011 6:48:01 PM org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
INFO: Outbound Message
---------------------------
ID: 2
Encoding: UTF-8
Content-Type: text/xml
Headers: {}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns4:MYResponse
--------------------------------------
Run Code Online (Sandbox Code Playgroud)
但我的实际要求是,我需要将它们放在日志文件中,而不是将它们打印到服务器控制台.
当我直接使用log4j时如图所示
log4j(factory.getInInterceptors().add(new LoggingInInterceptor()));
log4j(factory.getOutInterceptors().add(new LoggingOutInterceptor()));
Run Code Online (Sandbox Code Playgroud)
它只打印true并true在日志文件中.
有人可以告诉我如何配置吗?
我一直在摆弄CXF上的服务器端拦截器.但似乎实现简单的传入和传出拦截器并不是一项简单的任务,这些拦截器为我提供了包含SOAP XML的纯字符串.
我需要在拦截器中使用纯XML,以便我可以将它们用于特定的日志记录任务.标准的LogIn和LogOut拦截器不能胜任任务.是否有人愿意分享一些关于如何实现一个简单的传入拦截器的例子,它能够获取传入的SOAP XML和一个传出的拦截器来再次获取SOAP XML?
我写了一个拦截器进行测试.但是我在Interceptor中得到的Soap消息体总是为空.
我的Cxf是Apache-CXF-2.4.0
bean.xml是这样的:
<cxf:bus>
<cxf:outInterceptors>
<ref bean="myOutSoapInterceptor"/>
</cxf:outInterceptors>
</cxf:bus>
Run Code Online (Sandbox Code Playgroud)
拦截器文件:
public class MySoapInterceptorImpl extends AbstractSoapInterceptor implements IMySoapInterceptor {
public MySoapInterceptorImpl()
{
super(Phase.WRITE );
addAfter(SoapOutInterceptor.class.getName());
}
public void handleMessage(SoapMessage msg) throws Fault {
// TODO Auto-generated method stub
String soapContent ;
SOAPMessage sm = msg.getContent(SOAPMessage.class);
/*sm is always null!*/
}
}
Run Code Online (Sandbox Code Playgroud)