You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3创建SOAP WebService客户端遇HTTPS连接超时问题求助

Spring Boot 3调用公开SOAP WebService连接超时问题排查

问题分析

从异常栈核心错误java.net.ConnectException: Connection timed out可以判断,客户端无法建立到目标SOAP服务的网络连接,问题可分为网络层面和客户端配置层面两类。

排查步骤与解决方案

1. 先确认网络连通性

先排除本地网络无法访问目标服务的情况:

  • 用curl命令直接测试服务连通性:
    curl -X POST https://www.dataaccess.com/webservicesserver/NumberConversion.wso \
    -H "Content-Type: text/xml" \
    -d '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.dataaccess.com/webservicesserver/">
            <soapenv:Header/>
            <soapenv:Body>
                <web:NumberToWords>
                    <web:ubiNum>25</web:ubiNum>
                </web:NumberToWords>
            </soapenv:Body>
        </soapenv:Envelope>'
    
  • 如果curl也超时,说明是本地网络问题:
    • 检查防火墙/安全组是否允许 outbound 访问该服务的443端口
    • 企业内网环境下,需确认是否需要通过代理服务器访问外部网络

2. 配置Spring-WS的连接超时

Spring-WS默认的连接/读取超时可能过短,导致无法在规定时间内建立连接或获取响应,可通过HttpComponentsMessageSender自定义超时:

第一步:添加HTTP客户端依赖

在pom.xml中引入Spring Boot的HTTP客户端 starter:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-httpclient</artifactId>
</dependency>

第二步:配置消息发送器与超时

修改NumberConversionConfiguration类,添加超时配置并绑定到客户端:

@Configuration
public class NumberConversionConfiguration {

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("com.microservices.demo.soap.service.ws.numberconversion.stub");
        return marshaller;
    }

    @Bean
    public HttpComponentsMessageSender messageSender() {
        HttpComponentsMessageSender sender = new HttpComponentsMessageSender();
        // 设置连接超时(单位:毫秒)
        sender.setConnectionTimeout(5000);
        // 设置读取超时(单位:毫秒)
        sender.setReadTimeout(10000);
        return sender;
    }

    @Bean
    public NumberConversionClient countryClient(Jaxb2Marshaller marshaller, HttpComponentsMessageSender messageSender) {
        NumberConversionClient client = new NumberConversionClient();
        client.setDefaultUri("https://www.dataaccess.com/webservicesserver/NumberConversion.wso");
        client.setMarshaller(marshaller);
        client.setUnmarshaller(marshaller);
        // 绑定自定义的消息发送器
        client.setMessageSender(messageSender);
        return client;
    }

}

3. 配置代理(如果需要)

企业内网需通过代理访问外部服务时,修改messageSender配置添加代理:

@Bean
public HttpComponentsMessageSender messageSender() {
    HttpComponentsMessageSender sender = new HttpComponentsMessageSender();
    
    // 配置代理服务器,替换为实际代理地址和端口
    HttpHost proxy = new HttpHost("your-proxy-host", 8080);
    HttpClientBuilder clientBuilder = HttpClientBuilder.create().setProxy(proxy);
    
    // 配置超时
    RequestConfig requestConfig = RequestConfig.custom()
            .setConnectTimeout(5000)
            .setSocketTimeout(10000)
            .build();
    clientBuilder.setDefaultRequestConfig(requestConfig);
    
    sender.setHttpClient(clientBuilder.build());
    return sender;
}

4. 确认端点URL正确性

检查wsimport生成的服务类(如NumberConversion)中的默认端点地址,确认与你配置的defaultUri一致。部分场景下WSDL中的实际服务地址可能和提供的URL存在细微差异。

总结

优先排查网络连通性,再通过配置超时和代理解决客户端层面的问题,最后确认端点地址无误。按照上述步骤调整后,即可解决连接超时问题。

内容的提问来源于stack exchange,提问作者Abhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:05:55