2012-02-20 11 views
13

Próbuję wykonać prototyp całkiem prostego kodu Hibernate pochodzącego z samouczka i otrzymuję błąd, którego nie rozumiem głęboko w cglib2 (pełna wersja ślad stosu znajduje się na końcu tego posta). Prawdopodobnie próbuję utworzyć "productBoProxy" na mój prosty main() i bean XML (poniżej).java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter

Próbowałem wiele różnych wersji cglib bezskutecznie. Jestem bardzo wdzięczny każdemu, kto może mi pomóc znaleźć właściwą ścieżkę do rozwiązania tego problemu.

App.java:

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

product.xml: ślad

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

Stos:

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 

Odpowiedz

48

Masz niedopasowania wersje cglib i ASM. Stacktrace mówi "net.sf.cglib.core.DebuggingClassWriter przesłania ostatnią wizytę metody", innymi słowy net.sf.cglib.core.DebuggingClassWriter, która rozszerza org.objectweb.asm.ClassWriter próbuje zastąpić ostatnią wizytę metody, która oczywiście zawiedzie.

Na przykład maven dependendy for cglib 2.2.2 ściąga asm 3.3.1, więc jest to jedna kombinacja warta spróbowania.

+0

Obfite podziękowania. Byłem poza miastem i nie miałem czasu na przerobienie mojego kodu na podstawie tych informacji. Jak tylko to zrobię, kliknę twoją odpowiedź, uderzę, itd. –

+0

Dzięki temu bardzo mi pomogło, również dostałem nieco podobny błąd. – AurA

+0

W moim przypadku faktycznie dostałem ten błąd, ponieważ miałem dwa różne wersje cglib w moim projekcie. Zakładam, że polegali na różnych wersjach ASM. – bischoje