使用 Spring Boot 公开 SOAP Web 服务端点:详细指南

简介: 使用 Spring Boot 公开 SOAP Web 服务端点:详细指南

随着微服务架构的普及,RESTful API 已经成为构建现代网络应用的标准之一。然而,在企业级应用程序中,SOAP (Simple Object Access Protocol) 依然占据着重要地位,特别是在需要与遗留系统或特定行业标准兼容时。Spring Boot 框架以其简洁性和强大的功能支持闻名,不仅简化了 REST 服务的创建过程,同样也提供了便捷的方式来开发和部署 SOAP Web 服务。本文将详细介绍如何使用 Spring Boot 创建并公开一个 SOAP Web 服务端点。

1. SOAP 基础简介

1.1 定义

SOAP 是一种基于 XML 的协议,用于在分布式环境中交换结构化信息。它定义了一套消息格式以及处理这些消息的方式,使得不同平台上的应用程序能够进行通信。

1.2 特点

  • 标准化:遵循 W3C 标准。
  • 跨语言、跨平台:支持多种编程语言和操作系统。
  • 安全性高:通过 WS-Security 等扩展提供安全机制。
  • 可扩展性好:易于添加新的功能和服务。

2. 准备工作

开始之前,请确保已经安装了 JDK 和 Maven,并且配置好了开发环境。接下来,我们将从创建一个新的 Spring Boot 项目开始。

2.1 创建新项目

可以访问 Spring Initializr 来生成基础的 Spring Boot 项目。选择合适的选项如 Java 版本、项目类型等,然后添加 Spring Web Services 依赖项。

2.2 添加必要的依赖

在你的 pom.xml 文件中加入以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
</dependency>

这里,spring-boot-starter-web-services 提供了对 SOAP 支持的基础框架,而 jaxb-api 则是用于处理 XML 数据绑定的库。

3. 定义服务接口

为了实现 SOAP 服务,首先需要定义服务接口。这通常涉及到创建 XSD(XML Schema Definition)文件来描述数据模型,接着根据 XSD 生成对应的 Java 类。

3.1 创建 XSD 文件

假设我们要创建一个简单的用户管理服务,可以先编写一个名为 users.xsd 的文件来定义用户实体:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="UserRequest">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="username" type="xs:string"/>
        <xs:element name="password" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 更多元素定义 -->
</xs:schema>

3.2 生成 Java 类

利用 JAXB 插件或其他工具(例如 xjc),可以从 XSD 文件生成相应的 Java 类。在 Maven 项目中,可以在 pom.xml 中配置插件来自动生成这些类:

<build>
  <plugins>
    <plugin>
      <groupId>org.jvnet.jaxb2.maven2</groupId>
      <artifactId>maven-jaxb2-plugin</artifactId>
      <version>0.14.1</version>
      <executions>
        <execution>
          <goals>
            <goal>generate</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <schemaDirectory>${project.basedir}/src/main/resources/xsd</schemaDirectory>
        <generatePackage>com.example.soap.model</generatePackage>
      </configuration>
    </plugin>
  </plugins>
</build>

运行 mvn clean install 命令后,将在指定包下生成相关类。

4. 实现 SOAP 服务

有了服务接口之后,下一步就是实现具体的业务逻辑。这包括创建服务实现类及配置 WSDL 文件。

4.1 编写服务实现

创建一个名为 UserService 的类,实现之前定义的服务接口:

package com.example.soap.service;

import org.springframework.stereotype.Service;
import com.example.soap.model.UserRequest;
import com.example.soap.model.UserResponse;

@Service
public class UserService {
   

    public UserResponse getUser(UserRequest request) {
   
        // 实际业务逻辑
        UserResponse response = new UserResponse();
        response.setUsername("example");
        return response;
    }
}

4.2 配置 WSDL

WSDL 文件描述了服务的功能及其接口。你可以手动编写或者使用工具自动生成。这里以简单示例说明:

<wsdl:definitions ...>
  <wsdl:types>
    <xsd:schema targetNamespace="http://example.com/users">
      <xsd:import namespace="http://example.com/users/schema" schemaLocation="users.xsd"/>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="getUserRequest">
    <wsdl:part name="parameters" element="tns:UserRequest"/>
  </wsdl:message>
  ...
  <wsdl:portType name="UserServicePortType">
    <wsdl:operation name="getUser">
      <wsdl:input message="tns:getUserRequest"/>
      <wsdl:output message="tns:getUserResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  ...
  <wsdl:service name="UserService">
    <wsdl:port name="UserServicePort" binding="tns:UserServiceBinding">
      <soap:address location="http://localhost:8080/ws/users"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

5. 配置 Spring Boot 应用程序

最后一步是配置 Spring Boot 应用来启用 SOAP 服务端点。这可以通过在主配置类中添加 @EnableWs 注解并定义一个 WsConfigurerAdapter 子类来完成。

import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.transport.http.MessageDispatcherServlet;
import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;
import org.springframework.xml.xsd.SimpleXsdSchema;
import org.springframework.xml.xsd.XsdSchema;

@Configuration
@EnableWs
public class WebServiceConfig extends WsConfigurerAdapter {
   

    @Bean
    public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext applicationContext) {
   
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean<>(servlet, "/ws/*");
    }

    @Bean(name = "users")
    public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema usersSchema) {
   
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("UserServicePort");
        wsdl11Definition.setLocationUri("/ws");
        wsdl11Definition.setTargetNamespace("http://example.com/users");
        wsdl11Definition.setSchema(usersSchema);
        return wsdl11Definition;
    }

    @Bean
    public XsdSchema usersSchema() {
   
        return new SimpleXsdSchema(new ClassPathResource("xsd/users.xsd"));
    }
}

这段代码配置了一个 SOAP 服务监听 /ws 路径,并指定了 WSDL 文件的位置。

6. 测试 SOAP 服务

现在,启动 Spring Boot 应用程序并通过 SOAP 客户端测试服务是否正常工作。可以使用 SoapUI 或者 Postman 等工具发送请求到 http://localhost:8080/ws/users?wsdl 查看 WSDL 文档,并调用具体方法验证结果。

7. 总结

通过上述步骤,我们展示了如何使用 Spring Boot 快速搭建起一个 SOAP Web 服务端点。虽然相比 RESTful API,SOAP 可能显得更加复杂一些,但其提供的强大功能和广泛的行业支持使其在某些场景下仍然不可或缺。希望这篇文章能够帮助你理解并成功实现自己的 SOAP 服务。

目录
相关文章
|
1天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
18天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
22天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
13天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
|
7天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
3646 13
|
25天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
11天前
|
人工智能 自然语言处理 前端开发
什么?!通义千问也可以在线开发应用了?!
阿里巴巴推出的通义千问,是一个超大规模语言模型,旨在高效处理信息和生成创意内容。它不仅能在创意文案、办公助理、学习助手等领域提供丰富交互体验,还支持定制化解决方案。近日,通义千问推出代码模式,基于Qwen2.5-Coder模型,用户即使不懂编程也能用自然语言生成应用,如个人简历、2048小游戏等。该模式通过预置模板和灵活的自定义选项,极大简化了应用开发过程,助力用户快速实现创意。
|
13天前
|
人工智能 自然语言处理 前端开发
用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。本教程完全免费,而且为大家准备了 100 个降噪蓝牙耳机,送给前 100 个完成的粉丝。获奖的方式非常简单,只要你跟着教程完成第一课的内容就能获得。
5907 10
|
7天前
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
595 4
|
10天前
|
云安全 人工智能 自然语言处理