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

如何解决JBoss中‘com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl未找到’错误?

解决JBoss EAP 7.1.5.GA中SAAJ MetaFactory找不到的问题

问题分析

报错Unable to create SAAJ meta-factory: Provider com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found的核心原因:

  • JBoss类加载机制与JDK自带/自定义SAAJ实现存在冲突
  • module.xml中存在重复、版本冲突的依赖jar,导致类加载逻辑混乱
  • 未正确配置JBoss模块依赖或排除冲突的系统模块

具体解决步骤

1. 清理module.xml中的冗余/冲突依赖

你的module.xml存在大量重复和版本冲突的jar,先执行以下清理操作:

  • 删除重复的commons-io-1.3.2.jar、commons-lang3-3.12.0.jar
  • 保留一个版本的javax.xml.soap-api(建议用1.4.0,适配Java EE 7),删除其他版本(如1.4.1)
  • 删除Jakarta命名空间的jar(如jakarta.xml.soap-api-1.4.1.jar、jakarta.activation-api-2.1.2.jar),JBoss EAP 7.1基于Java EE 7,仅需使用javax命名空间依赖
  • 保留一个版本的SAAJ实现jar(推荐saaj-impl-1.3.16-jbossorg-1.jar,这是JBoss适配版本),删除其他版本(如saaj-impl-1.5.1.jar)
  • 删除冲突的激活框架jar(如angus-activation-2.0.1.jar),使用JBoss自带的activation-1.1.jar即可

清理后的resource-root示例:

<resource-root path="MySoapWebService.jar"/>
<resource-root path="commons-text-1.10.0.jar"/>
<resource-root path="commons-io-1.3.2.jar"/>
<resource-root path="commons-lang3-3.12.0.jar"/>
<resource-root path="json.jar"/>
<resource-root path="httpclient-4.5.13.jar"/>
<resource-root path="httpmime-4.3.1.jar"/>
<resource-root path="jackson-annotations-2.8.7.jar"/>
<resource-root path="jackson-core-2.8.7.jar"/>
<resource-root path="jackson-databind-2.8.7.jar"/>
<resource-root path="javax.xml.soap-api-1.4.0.jar"/>
<resource-root path="jersey-client-1.17.jar"/>
<resource-root path="jersey-core-1.17.jar"/>
<resource-root path="mail-1.4.jar"/>
<resource-root path="saaj-impl-1.3.16-jbossorg-1.jar"/>
<resource-root path="activation-1.1.jar"/>
<resource-root path="mimepull-1.9.7.jar"/>
<resource-root path="stax-api-1.0-2.jar"/>
<resource-root path="stax-ex-2.1.0.jar"/>
<resource-root path="saaj-api-1.3.5.jar"/>

2. 修正模块依赖配置

在module.xml的<dependencies>节点中,添加JBoss自带的SAAJ相关模块,替换原有的javaee.api(避免过度依赖):

<dependencies>
    <module name="javax.api"/>
    <module name="javax.xml.soap.api"/>
    <module name="com.sun.xml.messaging.saaj"/>
    <module name="javax.activation.api"/>
</dependencies>

3. 排除JBoss自带的冲突模块(可选)

如果清理依赖后仍报错,可在部署包的WEB-INF/jboss-deployment-structure.xml(无则新建)中排除JBoss自带的SAAJ模块,强制使用自定义实现:

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="javax.xml.soap.api"/>
            <module name="com.sun.xml.messaging.saaj"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

4. 检查SAAJ实现的服务配置

确保使用的saaj-impljar中存在META-INF/services/javax.xml.soap.SAAJMetaFactory文件,文件内容需对应实现类:

  • 若用Sun的实现:com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl
  • 若用JBoss适配版本:org.jboss.ws.saaj.SAAJMetaFactoryImpl

5. 调整代码中的MessageFactory初始化

将MessageFactory.newInstance()改为指定SOAP版本,避免默认逻辑冲突:

import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPConstants;

MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
// 或根据需求选择SOAP_1_2_PROTOCOL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:06:59