SpringBoot调用SOAP接口全流程(含多服务配置)
目录
- 1. 引入 Maven 依赖
- 2. 使用 wsimport 命令生成客户端代码
- ⚙️ 3. 编写配置类(支持多服务)
- 4. 编写调用 Service(jsON 作为入参)
- 5. 多服务扩展配置(可选)
- ✅ 总结
在现代系统中,虽然 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实现
@Servphpice 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 AddMepythonssage(); 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.landroidy.cloud.common.soap"); return marshaller; } @Bean public Jaxb2Marshaller marshaller2() { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); // 配置第二个包路径 com.ly.clwww.devze.comoud.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/MsgWebServpythonice"); // 配置 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接口内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论