SpringBoot调用SOAP接口全流程(含多服务配置)

 更新时间:2025年06月06日 10:32:57   作者:Jamie Chyi  
本文主要介绍了SpringBoot调用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 服务接口,可以配置多个 WebServiceTemplate 和 Marshaller

@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 虽老,实战依旧有用

到此这篇关于SpringBoot调用SOAP接口全流程(含多服务配置)的文章就介绍到这了,更多相关SpringBoot调用SOAP接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微服务Spring Cloud Alibaba 的介绍及主要功能详解

    微服务Spring Cloud Alibaba 的介绍及主要功能详解

    Spring Cloud 是一个通用的微服务框架,适合于多种环境下的开发,而 Spring Cloud Alibaba 则是为阿里巴巴技术栈量身定制的解决方案,本文给大家介绍Spring Cloud Alibaba 的介绍及主要功能,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • Java实现人机猜拳游戏

    Java实现人机猜拳游戏

    这篇文章主要为大家详细介绍了Java实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • idea运行java项目main方法报build failure错误的解决方法

    idea运行java项目main方法报build failure错误的解决方法

    当在使用 IntelliJ IDEA 运行 Java 项目的 main 方法时遇到 "Build Failure" 错误,这通常意味着在项目的构建过程中遇到了问题,以下是一些详细的解决步骤,以及一个简单的代码示例,用于展示如何确保 Java 程序可以成功构建和运行,需要的朋友可以参考下
    2024-09-09
  • 如何使用java修改文件所有者及其权限

    如何使用java修改文件所有者及其权限

    这篇文章主要介绍了如何使用java修改文件所有者及其权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java中的PriorityQueue类过程详解

    java中的PriorityQueue类过程详解

    这篇文章主要介绍了java中的PriorityQueue类,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • SpringBoot bean加载顺序怎样查看(源码解读)

    SpringBoot bean加载顺序怎样查看(源码解读)

    这篇文章主要介绍了SpringBoot bean加载顺序怎样查看(源码解读)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java 使用keytool创建CA证书的操作

    Java 使用keytool创建CA证书的操作

    这篇文章主要介绍了Java 使用keytool创建CA证书的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Java使用正则表达式提取XML节点内容的方法示例

    Java使用正则表达式提取XML节点内容的方法示例

    这篇文章主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • java Hibernate 一对多自身关联问题

    java Hibernate 一对多自身关联问题

    formBean在提交表单的时候,域中数据库在下一次中仍然保留引起的,struts formBean 默认的scope为session,手动设置为request,就好了
    2008-07-07
  • Java8中的Stream 流实践操作

    Java8中的Stream 流实践操作

    这篇文章主要介绍了Java8中的Stream 流实践操作,Stream 是 java8 中处理集合的抽象概念,可以执行非常复杂的查询、过滤和映射数据等操作,下文更多相关资料介绍,需要的朋友可以参考一下
    2022-05-05

最新评论