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

升级项目至Java 15后启动服务器时出现SAAJ元工厂提供者缺失的Bean创建错误

解决Java 15下SAAJ MetaFactory找不到的Bean创建错误

问题分析

你遇到的这个错误本质上是Java 9引入模块化系统后,原有的com.sun.xml.internal开头的内部API被移除或不再默认暴露导致的。虽然你已经添加了saaj-impl依赖,但JVM默认还是在找旧的internal路径下的实现类,而新版本的saaj-impl已经将包名调整为com.sun.xml.messaging.saaj(去掉了internal),所以出现了路径不匹配的问题。

解决方案

下面是几个针对性的解决步骤,你可以按顺序尝试:

1. 添加JVM启动参数指定SAAJ元工厂实现

直接告诉JVM要使用saaj-impl中的实现类,在服务器启动的JVM参数里加上:

-Djavax.xml.soap.SAAJMetaFactory=com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl

这个参数会覆盖JVM默认的查找逻辑,强制使用你引入的saaj-impl里的实现类。

2. 确保依赖版本适配Java 15

你用的saaj-impl:2.0.0是支持Java 9+的,但如果后续还有问题,可以尝试升级到更稳定的版本,比如2.1.3(目前的稳定版),依赖声明如下:

compile group: 'com.sun.xml.messaging.saaj', name: 'saaj-impl', version: '2.1.3'

3. 模块化项目额外配置(如果你的项目用了module-info.java)

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

module your.module.name {
    requires com.sun.xml.messaging.saaj;
    // 如果用到Spring相关模块,也要确保相应的requires声明
    requires spring.web.services;
}

4. 排除冲突依赖

检查你的项目依赖树,看看是否有旧版本的saaj-api、javax.xml.soap-api或者其他JAX-WS相关依赖和saaj-impl冲突。比如如果有旧的saaj-api,可以在依赖中排除它:

compile group: 'com.sun.xml.messaging.saaj', name: 'saaj-impl', version: '2.1.3' {
    exclude group: 'javax.xml.soap', name: 'saaj-api'
}

验证

启动服务器前确认上述配置都已生效,然后重新启动,Bean创建错误应该就能解决了。这个问题在Java 9到Java 17之间的版本都比较常见,核心就是让JVM正确加载非internal路径的SAAJ实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:14:05