意外的 AOP 异常;嵌套异常是 java.lang.IllegalStateException:无法加载缓存项

Unexpected AOP exception; nested exception is java.lang.IllegalStateException: Unable to load cache item

A Spring 启动应用程序版本 2.1。5.RELEASE 已升级到版本 2.2。5.RELEASE 即

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
<!--    <version>2.1.5.RELEASE</version> -->
    </parent>

此外,背景 java 已从版本 11 升级到版本 13,即“

openjdk 11 2018-09-25

openjdk 版本“13”2019-09-17

购买升级后,我注意到 none 的集成测试(> 60)正在运行。我能够从我的项目中编译 jar 文件,但没有一个测试成功。它们都显示了下面提到的相同异常。有趣的是,测试曾经在更改之前起作用。我在 Stackoveflow 上注意到一个更确切的问题,即 java.lang.VerifyError: Stack map does not match the one at exception handle,但它也没有答案。

我在 google 上唯一能找到关于类似异常签名的是那两页(不幸的是我看不懂中文) https://gitmemory.com/issue/eclipse/openj9/5676/489772592https://blog.csdn.net/Zhao_yanpeng/article/details/102835149

在最后一个人提到它正在使用 openjdk“12.0.1”,但我目前是 运行 版本 13,但我仍然遇到该异常。

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepositoryImpl' defined in file [Projects/server/target/classes/org/server/Repository/account/user/impl/UserRepositoryImpl.class]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Unexpected AOP exception; nested exception is java.lang.IllegalStateException: Unable to load cache item
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean[=12=](AbstractBeanFactory.java:323)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1287)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
    ... 121 more
Caused by: org.springframework.aop.framework.AopConfigException: Unexpected AOP exception; nested exception is java.lang.IllegalStateException: Unable to load cache item
    at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:214)
    at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:110)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:471)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:350)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:299)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:431)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
    ... 130 more
Caused by: java.lang.IllegalStateException: Unable to load cache item
    at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:79)
    at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134)
    at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319)
    at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:569)
    at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:416)
    at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:57)
    at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:205)
    ... 137 more
Caused by: java.lang.VerifyError: Stack map does not match the one at exception handler 9
Exception Details:
  Location:
    org/server/Repository/account/user/impl/UserRepositoryImpl$$EnhancerBySpringCGLIB$$f765df37.<init>()V @9: athrow
  Reason:
    Current frame's flags are not assignable to stack map frame's.
  Current Frame:
    bci: @0
    flags: { flagThisUninit }
    locals: { uninitializedThis }
    stack: { 'java/lang/RuntimeException' }
  Stackmap Frame:
    bci: @9
    flags: { }
    locals: { }
    stack: { 'java/lang/Throwable' }
  Bytecode:
    0000000: 2a59 b702 8bb8 0192 b1bf bb01 9c5a 5fb7
    0000010: 019f bf                                
  Exception Handler Table:
    bci [0, 9] => handler: 9
    bci [0, 9] => handler: 9
    bci [0, 9] => handler: 10
  Stackmap Table:
    full_frame(@9,{},{Object[#390]})
    same_locals_1_stack_item_frame(@10,Object[#390])

    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:398)
    at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:571)
    at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:363)
    at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:582)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.apply(AbstractClassGenerator.java:110)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.apply(AbstractClassGenerator.java:108)
    at org.springframework.cglib.core.internal.LoadingCache.call(LoadingCache.java:54)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
    ... 144 more

我正在使用 Spring 工具套件版本:4.5。1.RELEASE 构建 ID:202001211336 用于开发,如果这在某种程度上有用并且 jar 文件在 Linux 5.3.0 上运行-40-通用内核。

任何关于如何进一步调试的想法或提示都非常感谢。

2020 年 3 月 10 日更新:这是在 Keith 和 Kriegaex 的帮助下有效的解决方案:

我添加了工件 aspectjrt 和 aspectjweaver 及其对应的版本 1.9.5。然后我将工件 javassist 的版本升级到 3.26.0-GA,将 cglib-nodep 的版本升级到 3.3.0,并删除了工件 spring-aop。之后所有测试都恢复正常。

这似乎是 https://github.com/eclipse/openj9/issues/5676,应该在 jdk13 中修复。

您使用的是哪个特定版本的 jdk13('java -version' 说的是什么)?

它的版本问题在我的例子中,spring-core 的版本在 spring-aop 依赖与我声明的 spring-core 依赖不同,使用相同的版本修复问题

我遇到过这个问题,就我而言,问题是 spring-core 的版本冲突。我的服务依赖于另一项服务,并且该(核心)服务已将 spring-core 声明为依赖项。当我开始在我的应用程序中使用 spring-jdbc 时,它开始抛出此异常。解决方案是从 spring-jdbc 中排除 spring-core、spring-beans、spring-jcl 和 spring-tx我的 pom.xml。我还将我的应用程序中 spring-jdbc 的版本更改为与核心应用程序(我的应用程序所依赖的应用程序)中的 spring 版本相同。

在我的例子中,我有重复的 spring-core 依赖项。我删除了一个,我的应用程序开始工作了。我也注意到这个问题与 javaassist 依赖的不兼容版本有关。