
jdk 17 已彻底移除 `wsgen` 等 jax-ws 工具(自 java 11 起由 jep 320 移除),开发者需改用 maven 插件(如 `jaxws-maven-plugin`)或独立库实现 wsdl 代码生成与 web 服务构建。
wsgen 是 JDK 8 及更早版本中用于根据 Java 类生成 JAX-WS Web 服务端点 WSDL 和配套绑定文件的命令行工具,常配合 wsimport(用于客户端 stub 生成)使用。然而,随着 Java 模块化演进,JEP 320(Removed the Java EE and CORBA Modules) 在 Java 11 中正式将 java.xml.ws 及相关模块(含 jdk.xml.ws)标记为“已弃用”,并在 Java 11+ 的标准 JDK 发行版中完全移除——这意味着 JDK 17 的 bin/ 目录下不再包含 wsgen.exe 或 wsimport.exe,也不提供任何内置的 JAX-WS 运行时支持。
✅ 正确迁移路径如下:
1. 使用 Maven + jaxws-maven-plugin(推荐)
该插件由 MojoHaus 维护,兼容 Java 11+,可替代 wsgen 和 wsimport 功能。在 pom.xml 中添加:
org.codehaus.mojo jaxws-maven-plugin 2.6.2 wsimport wsgen ${project.build.directory}/generated-sources/jaxws src/main/resources/wsdl true
执行 mvn jaxws:wsgen 即可生成 WSDL 及 XSD;执行 mvn jaxws:wsimport 则生成客户端调用类。
2. 手动引入 JAX-WS RI(仅限必要场景)
若需运行时支持(如嵌入式服务),须显式添加依赖(注意:不是 JDK 自带):
com.sun.xml.ws jaxws-rt 4.0.4
⚠️ 注意事项:
- 不要尝试复制 JDK 8 的 wsgen.exe 到 JDK 17 环境——它依赖已删除的内部 API,必然失败;
- 所有 JAX-WS 相关包已从 javax.* 迁移至 jakarta.xml.ws.*(自 Jakarta EE 9 起),升级时需同步更新 import 语句;
- Spring Boot 3+ 默认基于 Jakarta EE 9,若使用 spring-boot-starter-web-services,其底层已自动适配新命名空间;
- 构建脚本中避免硬编码 JAVA_HOME/bin/wsgen,应统一通过构建工具驱动。
总结:wsgen 的消失是 Java 模块化与轻量化的必然结果。现代 Web 服务开发应转向声明式构建(Maven/Gradle)、标准化依赖管理及容器化部署——工具链解耦反而提升了可维护性与跨 JDK 兼容性。










