首页 > 作文

Spring Boot2深入分析解决java.lang.ArrayStoreException异常

更新时间:2023-04-04 05:29:53 阅读: 评论:0

将某个项目从spring boot1升级spring boot2之后出现如下报错,查了很多不同的解决方法都没有解决:

spring boot2项目启动时遇到了异常:

java.lang.arraystoreexception: sun.reflect.annotation.typenotprentexceptionproxy高考学习

caud by: java.lang.arraystoreexception: sun.reflect.annotation.typenotprentexceptionproxy    at sun.reflect.annotation.annotationparr.parclassarray(annotationparr.java:724) ~[na:1.8.0_65]    at sun.reflect.annotation.annotationparr.pararray(annotationparr.java:531) ~[na:1.8.0_65]    at sun.reflect.annotation.annotationparr.parmembervalue(annotationparr.java:355) ~[na:1.8.0_65]    at sun.reflect.annotation.annotationparr.parannotation2(annotationp描写海的词语arr.java:286) ~[na:1.8.0_65]    at sun.reflect.annotation.annotationparr.parannotations2(annotationparr.java:120) ~[na:1.8.0_65]    at sun.reflect.annotation.annotationparr.parannotations(annotationparr.java:72) ~[na:1.8.0_65]    at java.lang.class.createannotationdata(class.java:3521) ~[na:1.8.0_65]    at java.lang.class.annotationdata(class.java:3510) ~[na:1.8.0_65]    at java.lang.class.createannotationdata(class.java:3526) ~[na:1.8.0_65]当然英文怎么说    at java.lang.class.annotationdata(class.java:3510) ~[na:1.8.0_65]    at java.lang.class.getannotation(class.java:3415) ~[na:1.8.0_65]    at java.lang.reflect.annotatedelement.isannotationprent(annotatedelement.java:258) ~[na:1.8.0_65]    at java.lang.class.isannotationprent(class.java:3425) ~[na:1.8.0_65]    at org.springframework.core.annotation.annotatedelementutils.hasannotation(annotatedelementutils.java:570) ~[spring-core-5.0.9.relea.jar:5.0.9.relea]    at org.springframework.web.rvlet.mvc.method.annotation.requestmappinghandlermapping.ishandler(requestmappinghandlermapping.java:177) ~[spring-webmvc-5.0.9.relea.jar:5.0.9.relea]    at org.springframework.web.rvlet.handler.abstracthandlermethodmapping.inithandlermethods(abstracthandlermethodmapping.java:218) ~[spring-webmvc-5.0.9.relea.jar:5.0.9.relea]    at org.springframework.web.rvlet.handler.abstracthandlermethodmapping.afterpropertiest(abstracthandlermethodmapping.java:189) ~[spring-webmvc-5.0.9.relea.jar:5.0.9.relea]    at org.springframework.web.rvlet.mvc.method.annotation.requestmappinghandlermapping.afterpropertiest(requestmappinghandlermapping.java:136) ~[spring-webmvc-5.0.9.relea.jar:5.0.9.relea]    at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1758) ~[spring-beans-5.0.9.relea.jar:5.0.9.relea]    at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1695) ~[spring-beans-5.0.9.relea.jar:5.0.9.relea]    ... 16 common frames omitted

经过简单排查后,怀疑是因为jar版本冲突引起的异常,使用异常断点:

然后在

应该是从class org.activiti.spring.boot.curityautoconfiguration出错,然后报错java.lang.arraystoreexception: sun.reflect.annotation.typenotprentexceptionproxy

尝试复现异常:

curityautoconfiguration curityautoconfiguration=new curityautoconfiguration();

正常

curityautoconfiguration.class.getdeclaredannotation(aspect.class);

异常复现。

然后找到typenotprentexceptionproxy类,使用ctrl+n/ctrl+n+n

然后在构造方法中打断点,发现:

发现是cau:defaultauthenticationeventpublisher找不到引发的报错。

实际报错是classnotfound。

仔细看下代码,可以发现annotationparr.parclassvalue把异常包装成为object。

private static object parclassvalue(bytebuffer buf,                                          constantpool constpool,                                          class<?> container) {        int classindex = buf.getshort() & 0xffff;        try {            try {                string sig = constpool.getutf8at(classindex);                return parsig(sig, container);            } catch (illegalargumentexception ex) {                // support obsolete early jsr175 format class files                return constpool.getclassat(classindex);            }        } catch (noclassdeffounderror e) {            return new typenotprentexceptionproxy("[unknown]", e);        }        catch (typenotprentexception e) {            return new typenotprentexceptionproxy(e.typename(), e.getcau());        }    }

然后在sun.reflect.annotation.annotationparr.parclassarray(int, bytebuffer, constantpool, class<?>)里尝试直接设置到数组里。

而这里数组越界了,arraystoreexception只有越界的object的类型信息,也就是上面的。

解决:

1:将springboot2.0降级为原来的1.x版本2:在springboot启动类上添加
@springbootapplication(exclude = curityautoconfiguration.class)
3:修改源码的集成问题,重新编译

总结:

具体问题还要具体分析,不同的代码引发该问题的原因也不相同。

我的问题是:

springboot2.0不能与activiti6.0.0直接集成使用,因为activiti6.0.0出来的时候springboot2.0还没有出来,activiti6.0.0四大悲剧 支持springboot1.2.6以上,2.0.0以下的版本。

这里实际报错是classnotfound。

到此这篇关于spring boot2深入分析解决java.lang.arraystoreexception异常的文章就介绍到这了。希望分布列对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 05:29:51,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/d83f8c27c7baecedf41b0a050fed5062.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Spring Boot2深入分析解决java.lang.ArrayStoreException异常.doc

本文 PDF 下载地址:Spring Boot2深入分析解决java.lang.ArrayStoreException异常.pdf

标签:报错   异常   断点   版本
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图