目录
-
第一部分:基础概念
(图片来源网络,侵删)- 什么是 WebService?
- WebService 的核心要素 (SOAP, WSDL, UDDI)
- 为什么使用 WebService?(优势与应用场景)
- Java WebService 的演进史:从 JAX-WS 到 JAX-RS
-
第二部分:主流技术栈介绍
- SOAP / JAX-WS:传统、企业级、重量级
- 什么是 SOAP?
- 什么是 WSDL?
- JAX-WS 简介
- REST / JAX-RS:现代、轻量级、面向 Web
- 什么是 REST?
- 什么是 RESTful API?
- JAX-RS 简介 (Jakarta RESTful Web Services)
- 如何选择?
- SOAP / JAX-WS:传统、企业级、重量级
-
第三部分:实战教程
- 使用 JAX-WS (SOAP) 开发 WebService
- 环境准备 (JDK + Maven)
- 开发一个简单的 WebService (Provider 端)
- 调用 WebService (Consumer 端)
- 生成和查看 WSDL
- 使用 JAX-RS (REST) 开发 WebService
- 环境准备 (JDK + Maven + Jersey/Jersey RESTful Web Services)
- 开发一个简单的 RESTful Service (Provider 端)
- 使用 Postman 或 curl 调用 RESTful API (Consumer 端)
- 处理 JSON 数据
- 使用 JAX-WS (SOAP) 开发 WebService
-
第四部分:进阶与扩展
- 框架集成:Spring Boot 与 WebService
- 服务治理:WSDL/Swagger 文档
- 安全性:OAuth2, JWT, API Key
- 最佳实践
第一部分:基础概念
什么是 WebService?
WebService 是一种跨编程语言、跨操作系统的远程调用技术,它允许不同平台、不同语言的应用程序通过网络进行交互和通信,就像调用本地方法一样简单。

核心思想:将应用程序的功能(服务)通过 Web 协议(主要是 HTTP)暴露出来,供其他程序调用。
WebService 的核心要素
-
SOAP (Simple Object Access Protocol)
- 一种基于 XML 的协议,用于在 Web 上交换结构化信息。
- 它是消息传递的协议,规定了消息的格式(信封、头部、体)。
- 特点是重量级、标准化、安全性高。
-
WSDL (Web Services Description Language)
- 一个基于 XML 的语言,用于描述 WebService 的功能、接口、参数、协议绑定等信息。
- 可以理解为 WebService 的“说明书”或“契约”,客户端通过 WSDL 文件就知道如何调用这个服务。
-
UDDI (Universal Description, Discovery, and Integration)
(图片来源网络,侵删)- 一个基于 XML 的注册中心,用于发布和发现 WebService。
- 企业可以将自己的 WebService 发布到 UDDI 注册中心,其他企业则可以从中查找并使用这些服务。
- UDDI 的使用已大幅减少,更多是直接通过 WSDL 地址或 API 网关进行服务发现。
为什么使用 WebService?
- 跨平台和跨语言:任何支持 HTTP 协议的语言都可以调用。
- 松耦合:服务提供方和消费方之间不需要知道对方的实现细节,只需遵循 WSDL/REST API 契约。
- 可复用性:一个核心业务逻辑可以作为 WebService 被多个系统复用。
- 标准化:遵循行业标准,便于集成和维护。
Java WebService 的演进史
- JAX-WS (Java API for XML Web Services):Java 官方推出的用于创建 SOAP WebService 的标准 API,它简化了 SOAP 服务的开发,是 Java EE 的一部分。
- JAX-RS (Java API for RESTful Web Services):Java 官方推出的用于创建 RESTful WebService 的标准 API,随着移动互联网和前后端分离的兴起,RESTful API 成为绝对的主流。
- 重要更新:从 Java EE 8 开始,JAX-RS 和 JAX-WS 的包名从
javax.*迁移到了jakarta.*,如果你使用的是较新的 Jakarta EE (如 Jakarta EE 9+) 或 Spring Boot 3.x,请使用jakarta包。
第二部分:主流技术栈介绍
SOAP / JAX-WS
-
特点:
- 协议:基于 XML 的 SOAP 协议。
- 格式:消息是 XML 文本,格式严格、冗长。
- 标准:有严格的 WS-* 标准(如 WS-Security, WS-Addressing),适合企业级应用。
- 工具:通常需要工具(如
wsimport)根据 WSDL 生成客户端存根代码。
-
适用场景:
- 企业应用集成,特别是对安全性、事务性要求高的场景。
- 需要严格契约和标准化的金融、电信等行业。
- 老旧系统的维护和集成。
REST / JAX-RS
-
特点:
- 架构风格:不是一种协议,而是一种架构风格(Roy Fielding 提出)。
- 协议:基于简单的 HTTP 协议。
- 格式:数据格式灵活,最常用的是 JSON,也支持 XML、Text 等。
- 无状态:服务器不保存客户端状态,每次请求都包含所有必要信息。
- 资源导向:通过 URL 来定位资源(如
/users/123)。
-
JAX-RS 实现框架:
- Jersey:参考实现,功能强大,社区活跃。
- RESTEasy:JBoss 社区出品。
- Apache CXF:功能全面,也支持 SOAP。
-
适用场景:
- 现代 Web 应用的前后端分离。
- 移动 App 的后端 API。
- 微服务架构中服务间的通信。
- 几乎所有需要通过网络暴露 API 的新项目。
如何选择?
| 特性 | SOAP / JAX-WS | REST / JAX-RS |
|---|---|---|
| 风格/协议 | 协议 | 架构风格 |
| 数据格式 | 严格、冗长的 XML | 灵活,主要为 JSON |
| 标准 | WS-* 标准,严格 | 无统一标准,依赖 HTTP |
| 性能 | 较低(XML 解析开销大) | 高(JSON 解析快,HTTP 简单) |
| 学习曲线 | 较陡峭 | 相对平缓 |
| 适用场景 | 企业应用集成,EAI | Web/Mobile API,微服务 |
| 工具支持 | 强(WSDL 自动生成代码) | 较弱(依赖手动或 Swagger 生成) |
对于新项目,尤其是面向公众或移动端的 API,RESTful (JAX-RS) 是首选。 只有在对标准化、安全性和事务性有苛刻要求的企业内部集成时,才考虑 SOAP。
第三部分:实战教程
我们将分别用最主流的 JAX-WS (通过 Maven 插件) 和 JAX-RS (通过 Jersey) 来创建一个简单的服务。
环境准备
- JDK 8 或更高版本
- Maven 3.6 或更高版本
- IDE:IntelliJ IDEA 或 Eclipse
- API 测试工具:Postman (推荐) 或 curl
使用 JAX-WS (SOAP) 开发 WebService
我们将使用 Maven 的 jaxws-maven-plugin 来简化开发。
创建 Maven 项目 (Provider 端)
创建一个普通的 Maven Java 项目。
pom.xml 配置
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>jaxws-server</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jaxws.version>2.3.1</jaxws.version>
</properties>
<dependencies>
<!-- JAX-WS API -->
<dependency>
<groupId> 