
jdk 17 已彻底移除 `wsgen` 和 `wsimport` 等 jax-ws 工具,因其所属的 `jdk.xml.ws` 模块随 jep 320 在 java 11 中被弃用并最终删除;现代 web 服务开发应转向 maven 插件或独立库实现 wsdl 代码生成与构建。
自 Java 11 起,Oracle 依据 JEP 320 将包括 java.xml.ws(JAX-WS)、java.xml.bind(JAXB)在内的 9 个 EE 相关模块从 JDK 标准库中正式移除。这意味着:
- wsgen.exe(用于从 Java 类生成 WSDL)和 wsimport.exe(用于从 WSDL 生成客户端 stub)不再随 JDK 17 分发;
- bin/ 目录下确实不再包含这两个可执行文件,即使你同时安装了 JDK 8 —— 这是设计使然,而非安装异常。
✅ 推荐替代方案:使用 jaxws-maven-plugin
该插件由 MojoHaus 维护,功能完整、兼容 JDK 11+,支持 wsgen 和 wsimport 的全部核心能力。在 pom.xml 中添加如下配置即可:
org.codehaus.mojo jaxws-maven-plugin 2.6.2 generate-wsdl generate-sources wsgen ${project.build.directory}/generated-sources/wsgen com.example.MyWebService true
⚠️ 注意事项:
- 插件需显式声明依赖 javax.jws:javax.jws-api(API)和 com.sun.xml.ws:jaxws-rt(运行时),尤其在 JDK 17+ 中不可省略;
- 若项目仍需 JAXB 支持(如 WSDL 解析),请额外引入 jakarta.xml.bind:jakarta.xml.bind-api 和 org.glassfish.jaxb:jaxb-runtime;
- 避免混用 JDK 8 的 wsgen 脚本与 JDK 17 编译环境——字节码版本不兼容可能导致 UnsupportedClassVersionError。
? 总结:wsgen 的消失标志着 Java 平台向模块化与轻量化的演进。与其回退至旧版 JDK,不如拥抱标准化构建流程:通过 Maven 插件实现可重复、可迁移的 Web Service 代码生成,既符合 Jakarta EE 规范演进方向,也更利于 CI/CD 集成与长期维护。










