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

Tomcat9+Java11下Axis2与Axiom组合的ClassNotFoundException解决

问题与解决方案

问题背景

运行环境:Apache Tomcat 9.0.62、Java 11
技术栈:基于Axis2(1.7.9)、Axiom(1.4.0)开发Web服务
运行时触发两个ClassNotFoundException:

  1. java.lang.ClassNotFoundException: org.apache.axiom.soap.impl.builder.OMMetaFactoryEx
  2. java.lang.ClassNotFoundException: org.apache.axis.transport.http.AdminServlet

已尝试:多种库版本组合、手动向项目及Tomcat添加JAR,问题未解决。

针对性解决方案

1. 解决OMMetaFactoryEx缺失问题

  • OMMetaFactoryEx是Axiom SOAP实现模块的类,Axis2 1.7.9官方兼容的Axiom版本为1.2.21,而非1.4.0。修改pom.xml中的Axiom依赖:
<dependency>
    <groupId>org.apache.ws.commons.axiom</groupId>
    <artifactId>axiom-soap</artifactId>
    <version>1.2.21</version>
    <scope>compile</scope>
</dependency>
  • 执行mvn dependency:tree排查依赖冲突,若存在其他版本的Axiom依赖,通过<exclusions>标签排除:
<dependency>
    <!-- 存在冲突的依赖 -->
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>xxx</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2. 解决AdminServlet缺失问题

  • org.apache.axis.transport.http.AdminServlet属于Axis 1.x组件,与你使用的Axis2 2.x不兼容。若web.xml中配置了该Servlet,需替换为Axis2官方的管理Servlet:org.apache.axis2.transport.http.AxisAdminServlet,同时确保引入Axis2 web模块依赖:
<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-webapp</artifactId>
    <version>1.7.9</version>
    <type>war</type>
    <scope>provided</scope> <!-- 根据部署场景调整scope -->
</dependency>
  • 若无需Web服务管理功能,直接删除web.xml中对应<servlet>及<servlet-mapping>配置即可。

通用排查步骤

  • 检查Tomcat部署目录下WEB-INF/lib,确保无重复、版本冲突的JAR,且所有依赖包均存在。
  • 执行mvn clean package重新构建项目,确认依赖正确打包至WAR文件。
  • 核对依赖的scope配置,避免compile范围依赖未被打包,或provided范围依赖在部署环境中缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:04:49