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

JDK11升17迁移Jakarta后,AxisHTTPSessionListener替代方案及报错解决

解决AxisHTTPSessionListener在JDK17+Jakarta迁移中的NoClassDefFoundError问题

问题背景

你在web.xml中配置了Axis的会话监听器:

<listener>
    <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
</listener>

升级JDK11到17并迁移javax到jakarta后,由于该监听器依赖javax.servlet.http下的类:

package org.apache.axis.transport.http;

import java.util.Enumeration;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.xml.rpc.server.ServiceLifecycle;
import org.apache.axis.components.logger.LogFactory;
import org.apache.commons.logging.Log;

public class AxisHTTPSessionListener implements HttpSessionListener {
    // 原类实现
}

出现如下错误:

Error configuring application listener of class [org.apache.axis.transport.http.AxisHTTPSessionListener] ([/test].log)
java.lang.NoClassDefFoundError: javax/servlet/http/HttpSessionListener

解决方案

方案一:使用Jakarta兼容的Axis分支版本

官方Apache Axis 1.x未提供Jakarta EE兼容版本,但社区有移植的分支包(如axis-jakarta)。

  • 若使用Maven/Gradle,将原Axis依赖替换为Jakarta兼容版本,例如:
    <!-- Maven示例 -->
    <dependency>
        <groupId>org.apache.axis</groupId>
        <artifactId>axis-jakarta</artifactId>
        <version>1.4.1-jakarta</version>
    </dependency>
    
  • 该版本的AxisHTTPSessionListener已将导入替换为jakarta.servlet.http相关类,无需修改web.xml配置即可兼容。

方案二:手动编写适配监听器

如果找不到合适的兼容包,可自行修改监听器代码适配Jakarta:

  1. 复制原AxisHTTPSessionListener的全部代码,创建自定义类,将所有javax.servlet.http导入替换为jakarta.servlet.http:
    package com.your.custom.package;
    
    import java.util.Enumeration;
    import jakarta.servlet.http.HttpSession;
    import jakarta.servlet.http.HttpSessionEvent;
    import jakarta.servlet.http.HttpSessionListener;
    import jakarta.xml.rpc.server.ServiceLifecycle; // 需引入Jakarta XML RPC API依赖
    import org.apache.axis.components.logger.LogFactory;
    import org.apache.commons.logging.Log;
    
    public class JakartaAxisHTTPSessionListener implements HttpSessionListener {
        // 完全复制原AxisHTTPSessionListener的方法实现
    }
    
  2. 引入Jakarta相关依赖:
    <!-- Jakarta Servlet API -->
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- Jakarta XML RPC API(若需要) -->
    <dependency>
        <groupId>jakarta.xml.rpc</groupId>
        <artifactId>jakarta.xml.rpc-api</artifactId>
        <version>2.0.0</version>
    </dependency>
    
  3. 修改web.xml中的监听器配置为自定义类:
    <listener>
        <listener-class>com.your.custom.package.JakartaAxisHTTPSessionListener</listener-class>
    </listener>
    

方案三:移除监听器(若业务不需要)

AxisHTTPSessionListener的作用是清理与HttpSession绑定的Axis服务实例。如果你的项目未使用会话绑定的Axis服务,可以直接删除web.xml中的该监听器配置,彻底避免该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:58:32