首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从JaxWsProxyFactoryBean设置客户端的同步超时

从JaxWsProxyFactoryBean设置客户端的同步超时
EN

Stack Overflow用户
提问于 2021-02-01 20:02:53
回答 1查看 205关注 0票数 0

我的(spring boot)应用程序接口中有一个问题,它调用的SOAP服务偶尔会花费一分钟以上的时间来响应,从而导致SocketTimeoutException。经过大量的搜索,我已经将原因缩小到下面这段代码:

代码语言:javascript
运行
复制
    @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()返回一个代理对象,但这是从ws供应商转换到接口的。代理对象包含一个ClientImpl,我可以看到它的默认同步超时为60000 (一分钟)。

我尝试添加以下内容:

代码语言:javascript
运行
复制
        Map<String, Object> properties = new HashMap<>();
        properties.put("cxf.synchronous.timeout", 1);
        factory.setProperties(properties);

设置该属性(使用1作为测试以检查它是否工作),但这只是将该属性设置为容器对象的端点。在接口上,我不需要使用任何方法来设置任何属性。

我还尝试将返回的对象强制转换为JaxWsClientProxy,以便自己设置它,但这并不起作用,尽管它在调试时显示为该结构。

如何增加这里的超时时间?如果需要的话,我愿意放弃JaxWsProxyFactoryBean方法,转而采用更灵活的方法,但如果可能的话,我更愿意将更改保持在最低限度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-01 23:41:40

我想我已经找到了,我需要的属性是"javax.xml.ws.client.receiveTimeout"而不是"cxf.synchronous.timeout"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65992397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档