Tomcat9+Java11下Axis2与Axiom组合的ClassNotFoundException解决
问题与解决方案
问题背景
运行环境:Apache Tomcat 9.0.62、Java 11
技术栈:基于Axis2(1.7.9)、Axiom(1.4.0)开发Web服务
运行时触发两个ClassNotFoundException:
java.lang.ClassNotFoundException: org.apache.axiom.soap.impl.builder.OMMetaFactoryExjava.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
相关产品推荐
相关产品推荐

