You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java17升级报错Provider com.sun.xml.internal.ws.spi.ProviderImpl未找到求助

问题根源与解决方法

问题根源

没错,你内部库中META-INF/services/javax.xml.ws.spi.Provider文件的内容就是问题核心:

  • Java 9开始推行模块化架构,com.sun.xml.internal开头的包属于JDK内部私有API,在Java 17中已被完全移除/隐藏,不存在com.sun.xml.internal.ws.spi.ProviderImpl这个类。
  • 即使你添加了-Djavax.xml.ws.spi.Provider=com.sun.xml.ws.spi.ProviderImpl参数,服务加载机制会优先读取依赖库中META-INF/services目录下的配置文件,所以仍然会尝试加载那个不存在的internal类。

解决步骤

  1. 修正内部库的服务配置文件
    找到内部库中的META-INF/services/javax.xml.ws.spi.Provider文件,将内容修改为:

    com.sun.xml.ws.spi.ProviderImpl
    

    去掉类名中的internal后缀,指向公开的JAX-WS RI实现类。

  2. 引入兼容Java 17的JAX-WS RI库
    你需要引入GlassFish官方维护的JAX-WS参考实现(RI),这是替代JDK内部JAX-WS实现的标准方案:

    • Maven依赖配置:
      <dependency>
          <groupId>com.sun.xml.ws</groupId>
          <artifactId>jaxws-rt</artifactId>
          <version>2.3.5</version> <!-- 推荐使用兼容Java 17的最新稳定版本 -->
      </dependency>
      <dependency>
          <groupId>com.sun.xml.ws</groupId>
          <artifactId>jaxws-api</artifactId>
          <version>2.3.3</version>
      </dependency>
      
    • Gradle依赖配置:
      implementation 'com.sun.xml.ws:jaxws-rt:2.3.5'
      implementation 'com.sun.xml.ws:jaxws-api:2.3.3'
      
  3. 临时替代方案(无法修改内部库时)
    如果暂时无法修改内部库的配置文件,可以在你的主应用中添加一份相同的服务配置文件:
    在应用的src/main/resources/META-INF/services/目录下创建javax.xml.ws.spi.Provider文件,内容同样写com.sun.xml.ws.spi.ProviderImpl。应用级的配置文件会覆盖依赖库中的配置,让服务加载机制优先读取正确的实现类。

  4. 模块化应用额外配置
    如果你的应用是Java模块化项目(带有module-info.java),需要在模块声明中添加:

    requires com.sun.xml.ws.jaxws.runtime;
    requires javax.xml.ws.api;
    

内容的提问来源于stack exchange,提问作者user3573403

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:17:03