Unable to read class [XXXXXXX]} java.lang. ArrayIndexOutOfBoundsException

本文介绍了一个关于Struts2框架与ASM低版本之间的兼容性问题,并提供了解决方案。当使用Java 8的Lambda表达式时,可能会遇到与Struts2所需的ASM低版本不兼容的问题,导致ArrayIndexOutOfBoundsException异常。
部署运行你感兴趣的模型镜像
  • Java代码
@Component
public class FcmHelper {
    private static final Logger log = LoggerFactory.getLogger(FcmHelper.class);

    private static String APP_ID = "";
    private static String SECRET_KEY = "";
    private static String CHECK_URL = "";
    private static String QUERY_URL = "";
    private static String REPORT_URL = "";

    private static final Integer REQ_SUCCESS = 0;
    private static final Integer AUTHING = 1;
    private static final String UTF8 = "UTF-8";

    private Long FLAG_TIMESTAMP = 0L;//时间上报里程碑
    private final static Integer DURATION = 120 * 1000;//每组行为数据最早行为发生时间与数据上报时间的差值,规定180秒,取120秒
    private final static Integer MAX = 300;//最大发送条数,规定128条,单集群3个节点的情况下取40条

    /**
     * 每秒钟检查是否需要提交
     * 提交情况(限定在一秒内):
     * 1、提交列表行为条数 < MAX
     * 2、最后一条数据发生的时间 < 上报的时间 <(第一条数据发生的时间 +DURATION)
     */
    @Scheduled(cron = "* * * * * ?")
    public void ifNeedSumbit() {
        for (Map.Entry<String, List<GameActionRequest>> entry : gameMaps.entrySet()) {
            ...
            ...
            ...
            if (lastTs <= now && now <= firstTs + DURATION) {
                if (number < MAX) {
                    report(bizId);
                } else {
                    requests.removeIf(request -> request.getNo() <= MAX);
                    requests.replaceAll(request -> {
                        request.setNo(request.getNo() - MAX);
                        return request;
                    });
                    gameMaps.put(bizId, requests);
                    report(bizId);
                }
            } else {
                gameMaps.get(bizId).clear();
            }

        }
    }
  
  					...
            ...
            ...

}

  • 日志报错
2021-12-17 16:40:17  ERROR [com.opensymphony.xwork2.util.logging.commons.CommonsLogger] - {Unable to read class [com.xysdk.api.job.callback.CallbackMonitor]}
java.lang.ArrayIndexOutOfBoundsException: 52264
	at org.objectweb.asm.xwork.ClassReader.readClass(Unknown Source)
	at org.objectweb.asm.xwork.ClassReader.accept(Unknown Source)
	at org.objectweb.asm.xwork.ClassReader.accept(Unknown Source)
	at com.opensymphony.xwork2.util.finder.ClassFinder.readClassDef(ClassFinder.java:764)
	at com.opensymphony.xwork2.util.finder.ClassFinder.<init>(ClassFinder.java:149)
	at org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:352)
	at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:317)
	at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
	at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:204)
	at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
	at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
	at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
	at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.init(StrutsPrepareFilter.java:50)
	at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:106)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4554)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5194)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
	at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1767)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:286)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:483)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:286)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
	at sun.rmi.transport.Transport$1.run(Transport.java:200)
	at sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
  • 原因:struts2所需依赖包asm低版本和java8 Lambda表达式不兼容

  • 解决:不适用Lambda表达式,或者升级依赖版本

您可能感兴趣的与本文相关的镜像

Qwen-Image

Qwen-Image

图片生成
Qwen

Qwen-Image是阿里云通义千问团队于2025年8月发布的亿参数图像生成基础模型,其最大亮点是强大的复杂文本渲染和精确图像编辑能力,能够生成包含多行、段落级中英文文本的高保真图像

### java.lang.NullPointerException `java.lang.NullPointerException` 是在尝试对 `null` 对象进行操作时抛出的异常。解决该异常的方法如下: - **检查对象是否为 `null`**:在使用对象之前,先检查其是否为 `null`。 ```java Object obj = null; if (obj != null) { // 执行操作 System.out.println(obj.toString()); } ``` - **初始化对象**:确保对象在使用前被正确初始化。 ```java Object obj = new Object(); System.out.println(obj.toString()); ``` ### java.lang.ClassCastException `java.lang.ClassCastException` 是在尝试将对象强制转换为不兼容的类型时抛出的异常。解决该异常的方法如下: - **使用 `instanceof` 运算符**:在进行类型转换之前,先使用 `instanceof` 检查对象是否为目标类型。 ```java Object obj = "Hello"; if (obj instanceof Integer) { Integer num = (Integer) obj; } else { System.out.println("对象不是 Integer 类型"); } ``` - **避免不合理的类型转换**:确保类型转换是合理的。 ### java.lang.ArrayIndexOutOfBoundsException `java.lang.ArrayIndexOutOfBoundsException` 是在访问数组时使用了超出数组边界的索引时抛出的异常。解决该异常的方法如下: - **检查索引范围**:在访问数组元素之前,先检查索引是否在有效范围内。 ```java int[] arr = new int[5]; int index = 7; if (index >= 0 && index < arr.length) { int value = arr[index]; } else { System.out.println("索引越界"); } ``` - **使用循环时注意边界条件**:在使用循环遍历数组时,确保循环条件不会导致索引越界。 ```java int[] arr = new int[5]; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } ``` ### java.lang.NumberFormatException `java.lang.NumberFormatException` 是在尝试将字符串转换为数字类型时,字符串格式不符合要求时抛出的异常。解决该异常的方法如下: - **使用正则表达式验证输入**:在转换之前,先使用正则表达式验证输入字符串是否为有效的数字格式。 ```java import java.util.regex.Pattern; String input = "a"; if (Pattern.matches("\\d+", input)) { int num = Integer.parseInt(input); } else { System.out.println("输入不是有效的数字格式"); } ``` - **捕获异常并处理**:使用 `try-catch` 块捕获异常并进行相应的处理。 ```java String input = "a"; try { int num = Integer.parseInt(input); } catch (NumberFormatException e) { System.out.println("输入不是有效的数字格式: " + e.getMessage()); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值