Подтвердить что ты не робот

Java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter

Я пытаюсь прототипировать довольно простой код Hibernate, исходящий из учебника, и я получаю сообщение об ошибке, которое я не понимаю в глубине cglib2 (полная трассировка стека находится в конце этого сообщения). Вероятно, я пытаюсь создать "productBoProxy" для моего простого основного() и bean XML (ниже).

Я пробовал много разных версий cglib безрезультатно. Я очень благодарен всем, кто может помочь мне найти правильный путь для решения этого вопроса.

App.java:

ApplicationContext appContext
    = new ClassPathXmlApplicationContext( "resources/config/BeanLocations.xml" );
...
productBo = ( ProductBo ) appContext.getBean( "productBoProxy" );
productBo.save( product, 100 );

product.xml:

...
<!-- This is a proxy factory bean; see App.java -->
<bean id="productBoProxy"
      class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="target" ref="productBo" />
  <property name="interceptorNames">
    <list>
      <value>transactionInterceptor</value>
    </list>
  </property>
</bean>
...

Трассировка стека:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: \
    Error creating bean with name 'productBoProxy': \
    FactoryBean threw exception on object creation; nested exception is java.lang.VerifyError: \
    class net.sf.cglib.core.DebuggingClassWriter overrides final method visit. \
    (IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1441)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
at com.mkyong.App.main(App.java:41)
Caused by: java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter \
overrides final method visit.(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at net.sf.cglib.core.AbstractClassGenerator.<init>(AbstractClassGenerator.java:38)
at net.sf.cglib.core.KeyFactory$Generator.<init>(KeyFactory.java:127)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:112)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
at org.springframework.aop.framework.Cglib2AopProxy.createEnhancer(Cglib2AopProxy.java:229)
at org.springframework.aop.framework.Cglib2AopProxy.getProxy(Cglib2AopProxy.java:171)
at org.springframework.aop.framework.ProxyFactoryBean.getProxy(ProxyFactoryBean.java:362)
at org.springframework.aop.framework.ProxyFactoryBean.getSingletonInstance(ProxyFactoryBean.java:316)
at org.springframework.aop.framework.ProxyFactoryBean.getObject(ProxyFactoryBean.java:242)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 6 more
4b9b3361

Ответ 1

У вас есть несоответствующие версии cglib и ASM. Stacktrace сообщает "net.sf.cglib.core.DebuggingClassWriter переопределяет окончательный метод посещения", другими словами net.sf.cglib.core.DebuggingClassWriter, который расширяет org.objectweb.asm.ClassWriter пытается переопределить окончательный визит метода, который, конечно, не удался.

Например maven dependendy для cglib 2.2.2 тянет asm 3.3.1, так что это одна комбинация, которую стоит попробовать.