
jdk 17 已彻底移除 `wsgen` 等 jax-ws 工具(自 jdk 11 起通过 jep 320 废弃),开发者需改用 maven 插件(如 `jaxws-maven-plugin`)或独立库实现 wsdl 到 java 代码的生成与 web 服务构建。
wsgen 是 Java SE 6–8 中用于根据已有的 Java 类(带 @WebService 注解)生成 WSDL 和配套 JAXB 绑定代码的命令行工具,常用于 JAX-WS 开发流程。然而,从 JDK 11 开始,Oracle 依据 JEP 320: Remove the Java EE and CORBA Modules 正式将包括 jdk.xml.ws(含 wsgen、wsimport)、java.xml.bind(JAXB)、java.corba 等共 9 个企业级模块标记为 deprecated,并在 JDK 17(LTS)中完全移除。因此,无论 Windows、Linux 或 macOS,所有标准 JDK 17+ 发行版的 bin/ 目录下均不再提供 wsgen.exe 或 wsgen 可执行文件。
✅ 推荐替代方案:使用 jaxws-maven-plugin(Mojohaus)
该插件是目前最主流、维护活跃的 wsgen/wsimport 替代工具,支持 JDK 11–21,兼容 Maven 3.6+。以下为典型配置示例(pom.xml):
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.6.2</version>
<executions>
<execution>
<id>generate-wsdl</id>
<phase>generate-sources</phase>
<goals>
<goal>wsgen</goal>
</goals>
<configuration>
<sei>com.example.MyWebService</sei>
<genWsdl>true</genWsdl>
<keep>true</keep>
<verbose>true</verbose>
<sourceDestDir>${project.build.directory}/generated-sources/wsgen</sourceDestDir>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>运行 mvn generate-sources 即可自动生成 WSDL 文件及配套的 wsdl 目录和 SEI stub 类。
⚠️ 注意事项与最佳实践:
- 不要回退 JDK 版本:为兼容 wsgen 而降级至 JDK 8 不仅存在安全风险,更违背长期维护与现代化开发原则;
-
显式引入依赖:若项目仍需 JAXB 或 JAX-WS 运行时(如 javax.jws.WebService),需手动添加 Maven 依赖:
<dependency> <groupId>jakarta.xml.ws</groupId> <artifactId>jakarta.xml.ws-api</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artifactId> <version>4.0.3</version> </dependency>
- 面向 Jakarta EE 迁移:注意包名已从 javax.* 升级为 jakarta.*(JAX-WS 3.0+),旧注解(如 @javax.jws.WebService)需替换为 @jakarta.jws.WebService;
- 构建即代码生成:将 wsgen 集成进 Maven 生命周期(如 generate-sources),确保生成代码纳入编译流程,避免手动操作导致不一致。
总结:wsgen 的消失并非功能倒退,而是 Java 平台向模块化、轻量化演进的关键一步。通过标准化构建工具链(Maven/Gradle + 社区插件),反而提升了可重复性、跨环境一致性与持续集成友好度。拥抱插件化方案,是现代 Java Web 服务开发的必经之路。










