CXF框架 java.net.SocketTimeoutException: Read timed out

文章讲述了在使用Cxf框架对接第三方系统时,遇到SocketTimeoutException的问题,经排查发现是由于服务器处理大文件时超时。通过设置JaxWsDynamicClientFactory的连接和接收超时时间,以及禁用分块传输,成功解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 问题描述

        对接第三方系统使用cxf框架时测试数据的时候一切正常, 当传递附件后报出了java.net.SocketTimeoutException: Read timed out, 传输的文件使用base64编码,传输较大一点的文件之后就会造成这个异常, 当时对于这个问题考虑以下几个问题

1. 网络问题: 是否是网络连接不稳定导致的。更换了网络测试后这个问题直接排除。

2. 服务器响应过慢, 怀疑是接口响应过慢,于是postman测试, 响应速度很快,传递较大点的文件也没有任何问题,考虑应该是cxf框架哪些配置不到位造成的

于是经过查阅资料,找到问题的原因, 大概是服务器因为读取的数据过长造成超出预设的时间. 通过设置连接超时时间,及接收超时时间, 成功解决这个问题.

JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
Client client = factory.createClient(URL);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(50000);//连接超时时间
httpClientPolicy.setReceiveTimeout(50000);//接收超时时间
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);

setConnectionTimeout()   //设置连接超时时间,单位毫秒

setAllowChunking(false)  //用于禁用分块传输。

setReceiveTimeout()    //设置接收超时时间, 单位毫秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值