
jdk 17 已彻底移除 `wsgen` 等 jax-ws 工具(自 java 11 起通过 jep 320 废弃),开发者需改用 maven 插件(如 `jaxws-maven-plugin`)或 jakarta ee 兼容库生成 web service 代理代码。
Java 自 JDK 11 起执行模块化重大调整,JEP 320 明确将 java.xml.ws(含 JAX-WS 运行时)及关联的开发工具(如 wsgen.exe 和 wsimport.exe)从 JDK 中移除,并标记为“已废弃”。因此,JDK 17(作为长期支持版本)不再包含这些二进制工具——它们不是遗漏,而是被主动剥离的标准组件。
✅ 推荐替代方案:使用 Maven 插件生成客户端代码
最主流、生产就绪的替代方式是采用 MojoHaus 的 jaxws-maven-plugin。该插件兼容 Java 11+ 及 Jakarta EE 9+(即 jakarta.xml.ws 命名空间),支持从 WSDL 生成服务端骨架或客户端存根(等效于旧版 wsgen / wsimport 功能)。
以下是一个典型配置示例(pom.xml):
org.codehaus.mojo jaxws-maven-plugin 2.6.2 generate-wsdl-client wsimport https://example.com/service?wsdl com.example.client ${project.build.directory}/generated-sources/jaxws
执行 mvn jaxws:wsimport 即可自动生成客户端类;若需生成服务端代码(类似 wsgen -keep -s src/main/java),可改用 goal>wsgen 并配置 sei(Service Endpoint Interface)类路径。
⚠️ 注意事项与迁移要点
- 命名空间升级:Java 11+ 使用 jakarta.xml.ws.* 替代 javax.xml.ws.*。确保依赖引入的是 Jakarta 版本(如 jakarta.xml.ws:jakarta.xml.ws-api),而非已废弃的 javax.*。
-
运行时依赖:JDK 不再内置 JAX-WS 实现,需显式添加实现库,例如:
com.sun.xml.ws jaxws-rt 4.0.4 - IDE 支持:IntelliJ IDEA 和 Eclipse 均支持 jaxws-maven-plugin 自动生成源码,并可配置为编译前自动执行。
- 构建一致性:避免混合使用不同 JDK 版本构建同一项目——JDK 8 编译的 javax.* 字节码在 JDK 17 上可能因类加载失败而报 NoClassDefFoundError。
✅ 总结
wsgen 的消失标志着 Java 对传统 SOAP Web Service 的官方支持转向轻量、模块化、Jakarta 标准化的生态。迁移并非障碍,而是推动项目采用更现代、可维护的构建方式。优先选择 Maven 插件 + Jakarta EE 依赖组合,不仅能兼容 JDK 17+,也为未来向云原生架构演进打下基础。










