JDK 17 中为何移除了 wsgen?替代方案详解

发布时间 - 2026-01-27 00:00:00    点击率:

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/j

axws
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 兼容性。


# java  # go  # 编码  # 工具  # ai  # spring  # spring boot  # maven  # 命名空间  # xml  # gradle  # 移除  # 客户端  # 并在  # 自带  # 仅限  # 绑定  # 命令行  # 服务端  # 化与  # 更早 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 手机软键盘弹出时影响布局的解决方法  网站建设要注意的标准 促进网站用户好感度!  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  如何在搬瓦工VPS快速搭建网站?  高性价比服务器租赁——企业级配置与24小时运维服务  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何用西部建站助手快速创建专业网站?  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  JS去除重复并统计数量的实现方法  如何批量查询域名的建站时间记录?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  iOS正则表达式验证手机号、邮箱、身份证号等  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  如何用AWS免费套餐快速搭建高效网站?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel如何实现API速率限制?(Rate Limiting教程)  JS碰撞运动实现方法详解  大连网站制作公司哪家好一点,大连买房网站哪个好?  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  如何快速生成橙子建站落地页链接?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何快速配置高效服务器建站软件?  高防服务器租用如何选择配置与防御等级?  Swift中swift中的switch 语句  b2c电商网站制作流程,b2c水平综合的电商平台?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  香港服务器租用费用高吗?如何避免常见误区?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何挑选优质建站一级代理提升网站排名?  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel模型事件有哪些_Laravel Model Event生命周期详解  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  中山网站制作网页,中山新生登记系统登记流程?  如何快速打造个性化非模板自助建站?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Linux后台任务运行方法_nohup与&使用技巧【技巧】