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

升级Java 8至Java 17后Web Service调用失败求助

解决Java 17调用WebService时Provider com.sun.xml.internal.ws.spi.ProviderImpl not found错误

问题根源

从Java 9开始,JDK逐步移除了内置的JAX-WS(Java API for XML Web Services)相关实现,Java 11正式将其从JDK中剥离。你遇到的com.sun.xml.internal.ws.spi.ProviderImpl是JDK 8自带的JAX-WS实现类,在Java 17中已不存在,必须通过引入第三方JAX-WS实现来替代。

你之前添加的依赖版本过旧(如jaxws-rt:2.2.10是多年前的版本),且缺少部分核心依赖,导致无法正常加载Provider。

解决方案

1. 引入兼容Java 17的完整JAX-WS RI依赖

推荐使用最新稳定版的JAX-WS RI(Oracle/Sun维护的参考实现),以下是Maven依赖配置:

<dependencies>
    <!-- JAX-WS RI核心依赖,已包含streambuffer、stax-ex等必要依赖 -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.3.10</version>
    </dependency>
    <!-- 按需添加:如果业务需要处理Policy相关逻辑 -->
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>policy</artifactId>
        <version>2.7.10</version>
    </dependency>
</dependencies>

Gradle项目对应配置:

dependencies {
    implementation 'com.sun.xml.ws:jaxws-rt:2.3.10'
    implementation 'com.sun.xml.ws:policy:2.7.10' // 按需引入
}

2. 处理模块化项目(若使用module-info.java)

如果你的项目是Java模块化项目,需在module-info.java中声明依赖:

module your.module.name {
    requires com.sun.xml.ws.jaxws_rt;
    // 若用到Policy,补充:
    requires com.sun.xml.ws.policy;
}

非模块化项目若遇模块加载问题,可在JVM启动参数中添加:

--add-modules com.sun.xml.ws.jaxws_rt

3. 可选:显式指定Provider实现

若仍出现Provider找不到的问题,可通过系统属性指定实现类:

  • 启动参数方式:
-Djavax.xml.ws.spi.Provider=com.sun.xml.ws.spi.ProviderImpl
  • 代码中设置:
System.setProperty("javax.xml.ws.spi.Provider", "com.sun.xml.ws.spi.ProviderImpl");

验证

添加依赖后重新构建运行项目,若仍有问题,可通过mvn dependency:tree(Maven)或gradle dependencies(Gradle)检查依赖树,排查是否存在旧版本JAX-WS依赖导致的冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:04:57