从 JaxWsProxyFactoryBean 为客户端设置同步超时
Set synchronous timeout for client from JaxWsProxyFactoryBean
我的(spring 启动)API 遇到一个问题,它调用的 SOAP 服务有时会花费一分钟多的时间来响应,从而导致 SocketTimeoutException。经过大量搜索后,我将原因缩小到这段代码:
@SuppressWarnings("unchecked")
public <T> T createWsService(Class<T> serviceClass, String url) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(serviceClass);
factory.setAddress(url);
LoggingInInterceptor loggingInInterceptor = new LoggingInInterceptor();
loggingInInterceptor.setPrettyLogging(true);
factory.getInInterceptors().add(loggingInInterceptor);
LoggingOutInterceptor loggingOutInterceptor = new LoggingOutInterceptor();
loggingOutInterceptor.setPrettyLogging(true);
factory.getOutInterceptors().add(loggingOutInterceptor);
return (T) factory.create();
}
调试时,我可以看到 factory.create()
returns 一个代理对象,但这是从 ws 供应商转换到接口的。代理对象包含一个 ClientImpl,我可以看到它的默认同步超时为 60000(一分钟)。
我尝试添加以下内容:
Map<String, Object> properties = new HashMap<>();
properties.put("cxf.synchronous.timeout", 1);
factory.setProperties(properties);
设置 属性(使用 1 作为测试来检查它是否有效)但这只是将 属性 设置为容器对象的端点。我需要使用的界面上没有任何方法可以让我设置任何属性。
我还尝试将返回的对象强制转换为 JaxWsClientProxy 以自行设置,但这并没有奏效,尽管它在调试时显示了该结构。
如何增加这里的超时时间?如果需要的话,我愿意放弃 JaxWsProxyFactoryBean 方法,转而采用更灵活的方法,但我希望尽可能减少更改。
我想我找到了,我需要的 属性 是 "javax.xml.ws.client.receiveTimeout"
而不是 "cxf.synchronous.timeout"
我的(spring 启动)API 遇到一个问题,它调用的 SOAP 服务有时会花费一分钟多的时间来响应,从而导致 SocketTimeoutException。经过大量搜索后,我将原因缩小到这段代码:
@SuppressWarnings("unchecked")
public <T> T createWsService(Class<T> serviceClass, String url) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(serviceClass);
factory.setAddress(url);
LoggingInInterceptor loggingInInterceptor = new LoggingInInterceptor();
loggingInInterceptor.setPrettyLogging(true);
factory.getInInterceptors().add(loggingInInterceptor);
LoggingOutInterceptor loggingOutInterceptor = new LoggingOutInterceptor();
loggingOutInterceptor.setPrettyLogging(true);
factory.getOutInterceptors().add(loggingOutInterceptor);
return (T) factory.create();
}
调试时,我可以看到 factory.create()
returns 一个代理对象,但这是从 ws 供应商转换到接口的。代理对象包含一个 ClientImpl,我可以看到它的默认同步超时为 60000(一分钟)。
我尝试添加以下内容:
Map<String, Object> properties = new HashMap<>();
properties.put("cxf.synchronous.timeout", 1);
factory.setProperties(properties);
设置 属性(使用 1 作为测试来检查它是否有效)但这只是将 属性 设置为容器对象的端点。我需要使用的界面上没有任何方法可以让我设置任何属性。
我还尝试将返回的对象强制转换为 JaxWsClientProxy 以自行设置,但这并没有奏效,尽管它在调试时显示了该结构。
如何增加这里的超时时间?如果需要的话,我愿意放弃 JaxWsProxyFactoryBean 方法,转而采用更灵活的方法,但我希望尽可能减少更改。
我想我找到了,我需要的 属性 是 "javax.xml.ws.client.receiveTimeout"
而不是 "cxf.synchronous.timeout"