Spring-WS调用WS服务器超时,SOAP UI测试却正常访问
看起来你遇到了一个典型的Spring-WS与Axis2服务端连接超时的问题,虽然已经排查了几个关键点,但还是有几个容易被忽略的地方可以尝试:
1. 重点排查:请求目标IP的一致性
我注意到你贴出的SOAP UI请求头里的Host是84.37.138.182:8080,但你Spring配置的URL是82.36.138.182:8080——这两个IP地址完全不一样!这大概率是导致连接超时的核心原因:SOAP UI实际访问的是正确的服务端IP,而Spring-WS一直在尝试连接一个错误的地址。先确认服务端的真实IP,修正配置后再测试。
2. 确保Spring-WS正确加载代理配置
你设置了Java系统代理属性,但Spring-WS默认使用的HttpComponentsClientHttpRequestFactory并不会自动读取这些系统属性,需要手动给WebServiceTemplate配置代理信息:
适配HttpClient 4.5+版本的配置方式:
HttpHost proxy = new HttpHost("<my_proxy_hostname>", Integer.parseInt("<my_proxy_port>")); CloseableHttpClient httpClient = HttpClientBuilder.create() .setProxy(proxy) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); getWebServiceTemplate().setRequestFactory(requestFactory);
适配旧版HttpClient(4.x早期版本)的配置方式:
HttpHost proxy = new HttpHost("<my_proxy_hostname>", Integer.parseInt("<my_proxy_port>")); DefaultHttpClient httpClient = new DefaultHttpClient(); httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); getWebServiceTemplate().setRequestFactory(requestFactory);
3. 验证请求是否真的到达服务端
登录部署Axis2的Tomcat服务器,查看两类日志:
- Tomcat访问日志(路径一般为
tomcat/logs/localhost_access_log.*.txt):检查是否有Spring-WS发起的请求记录,如果没有,说明请求在本地网络层面被拦截,继续排查代理、防火墙或IP地址问题; - Axis2服务日志(路径一般为
axis2/logs/axis2.log):如果有请求记录但服务端返回错误,根据日志里的具体报错调整请求格式。
4. 用curl模拟请求对比差异
把Spring-WS生成的SOAP请求体保存到request.xml文件,然后用curl命令模拟发送(带上代理参数):
curl -x <my_proxy_hostname>:<my_proxy_port> -X POST http://正确的服务端IP:8080/axis2/services/KYCService01.KYCService01HttpSoap11Endpoint/ \ -H "Content-Type: text/xml;charset=UTF-8" \ -H "SOAPAction: \"urn:kycScore\"" \ -d @request.xml
如果curl能成功调用,说明问题出在Spring-WS的配置细节上;如果curl也超时,那就是网络代理、服务端防火墙或IP映射的问题。
内容的提问来源于stack exchange,提问作者Flyout91
相关产品推荐
相关产品推荐

