Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I'm trying to prototype some pretty simple Hibernate code originating from a tutorial and am getting an error I don't understand deep in cglib2 (the full stack trace is at the end of this post). I am probably trying to create 'productBoProxy' per my simple main() and bean XML (below).

I've tried many different versions of cglib to no avail. I'm very grateful to anyone who can help me find the right path to solving this.

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>
...

Stack trace:

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
like image 914
Russ Bateman Avatar asked Feb 20 '12 18:02

Russ Bateman


1 Answers

You have mismatching versions of cglib and ASM. Stacktrace tells "net.sf.cglib.core.DebuggingClassWriter overrides final method visit", in other words net.sf.cglib.core.DebuggingClassWriter which extends org.objectweb.asm.ClassWriter tries to override final method visit, which of course fails.

For example maven dependendy for cglib 2.2.2 pulls asm 3.3.1, so this is one combination worth of trying.

like image 118
Mikko Maunu Avatar answered Nov 16 '22 16:11

Mikko Maunu