Spring Boot 调用 SOAP 接口全流程详解(含多服务配置)

在现代系统中,虽然 REST 接口广泛使用,但一些传统平台仍使用 SOAP 协议。本文将手把手教你如何在 Spring Boot 项目中优雅集成并调用 SOAP 接口,支持多个服务配置、注解调用、自定义参数传递等。


🧱 1. 引入 Maven 依赖

		<dependency>
			<groupId>org.springframework.ws</groupId>
			<artifactId>spring-ws-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
		</dependency>

🛠 2. 使用 wsimport 命令生成客户端代码

打开终端,执行以下命令(替换为实际的 WSDL 地址):

wsimport -keep -p com.example.soapclient https://xxx.cn/tp_core/xxx/MsgWebService?wsdl


⚙️ 3. 编写配置类(支持多服务)

@Configuration
public class SoapClientConfig {
    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        // 设置生成的SOAP类所在的包名,这里替换成实际的包路径
        marshaller.setContextPath("com.ly.cloud.common.soap");
        return marshaller;
    }

    @Bean
    public WebServiceTemplate webServiceTemplate(Jaxb2Marshaller marshaller) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
        webServiceTemplate.setDefaultUri("https://xxx/xxx/service/MsgWebService");
        // 配置 marshaller 和 unmarshaller
        webServiceTemplate.setMarshaller(marshaller);
        webServiceTemplate.setUnmarshaller(marshaller);
        return webServiceTemplate;
    }
}

🧩 4. 编写调用 Service(JSON 作为入参)
        这里只需要传一个String类型的json入参字符串,即可拿到调用结果。实际场景可以结合Controller实现

@Service
public class MySoapService{
    @Autowired
    private WebServiceTemplate webServiceTemplate;

    public String callSoapService(String message) {
        Map<String,Object> map = new HashMap<>();
        map.put("OTHER_PK_ID", "");
        String jsonString = JSONObject.toJSONString(map);
        // 入参json字符串
        AddMessage addMessage = new AddMessage();
        addMessage.setIn0(jsonString);
        System.out.println(jsonString);
        AddMessageResponse response = (AddMessageResponse) webServiceTemplate.marshalSendAndReceive(addMessage);
        // 调用结果
        return response.getOut();
    }
    
}

🧬 5. 多服务扩展配置(可选)

如果你需要调用多个 SOAP 服务接口,可以配置多个 WebServiceTemplateMarshaller

@Configuration
public class SoapClientConfig {
    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        // 设置生成的SOAP类所在的包名,这里替换成实际的包路径
        marshaller.setContextPath("com.ly.cloud.common.soap");
        return marshaller;
    }

    @Bean
    public Jaxb2Marshaller marshaller2() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        // 配置第二个包路径 com.ly.cloud.common.soap.app,对应第二个 namespace
        marshaller.setContextPath("com.ly.cloud.common.soap.app");
        return marshaller;
    }
    @Bean
    public Jaxb2Marshaller marshaller3() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        // 配置第三个个包路径 com.ly.cloud.common.soap.email,对应第二个 namespace
        marshaller.setContextPath("com.ly.cloud.common.soap.email");
        return marshaller;
    }

    @Bean
    public WebServiceTemplate webServiceTemplate(Jaxb2Marshaller marshaller) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
        webServiceTemplate.setDefaultUri("https://xxx/tp_core/service/MsgWebService");
        // 配置 marshaller 和 unmarshaller
        webServiceTemplate.setMarshaller(marshaller);
        webServiceTemplate.setUnmarshaller(marshaller);
        return webServiceTemplate;
    }

    @Bean
    public WebServiceTemplate webServiceTemplate2(Jaxb2Marshaller marshaller2) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
        webServiceTemplate.setDefaultUri("https://xxx/mp/service/AppService");
        // 配置 marshaller 和 unmarshaller
        webServiceTemplate.setMarshaller(marshaller2);
        webServiceTemplate.setUnmarshaller(marshaller2);
        return webServiceTemplate;
    }
    @Bean
    public WebServiceTemplate webServiceTemplate3(Jaxb2Marshaller marshaller3) {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
        webServiceTemplate.setDefaultUri("https://xxx/mp/service/EmailService");
        // 配置 marshaller 和 unmarshaller
        webServiceTemplate.setMarshaller(marshaller3);
        webServiceTemplate.setUnmarshaller(marshaller3);
        return webServiceTemplate;
    }
}

使用的过程中,分别注入对应的即可。

✅ 总结

本文完整展示了 Spring Boot 如何调用 SOAP 接口的全过程,涵盖:

  • wsimport 生成代码

  • Spring 配置与依赖注入

  • JSON 参数封装与发送

  • 多服务并存配置

SOAP 虽老,实战依旧有用,希望本文对你有所帮助。如果你觉得不错,欢迎点赞收藏支持一下👍

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jamie Chyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值