问题描述
我的日志记录功能在 cxf 客户端 3.3.4 版本中运行良好,但是当soap 调用出现超时错误(java.net.socketTimeoutException)时,不会记录入站消息。您能否告知如何/如何配置以获取入站消息以进行记录?
JaxWsProxyfactorybean proxy = new JaxWSProxyfactorybean()
---
--
LoggingInInterceptor reqInter = new LoggingInInterceptor();
LoggingOutInterceptor resInter = new LoggingOutInterceptor();
proxy.getininterceptors().add(reqInter);
proxy.getoutInterceptors().add(respInter);
proxy.getoutInterceptors().add(new NillablesaajInterceptor());
proxy.getoutInterceptors().add(new saajOutInterceptor());
log4j.xml
<AsyncLogger name ="org.apache.cxf" level="info">
</AsyncLogger>
<AsyncLogger name="org.apache.cxf.interceptor.LogginInIntercetpor" level="info">
</AsyncLogger>
<AsyncLogger name="org.apache.cxf.interceptor.LoggingOuInteceptor" level="info">
</AsyncLogger>
解决方法
JAX-WS 客户端使用 HTTPS 将 SOAP 消息发送到服务器,然后该消息将发送到应用程序中的消息日志拦截器。您必须告诉 CXF 它需要配置一个额外的 Nginx/Apache HTTP 代理服务器,用于从 HTTP 端点到 SOAP 端点提供消息。
请在您的应用程序中尝试以下配置。如果可行,那么我们可以讨论其他方法。
<jaxws:client configurator-ref="cxfClientConfig">
<jaxws:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
</jaxws:outInterceptors>
<jaxws:inFaultInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
</jaxws:inFaultInterceptors>
<jaxws:outFaultInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
</jaxws:outFaultInterceptors>
</jaxws:client>