CXF 网络客户端 - Java.net.SocketTimeoutException - 未记录入站消息

问题描述

我的日志记录功能在 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>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...