2012-02-20 15 views
13

Sto provando a prototipare un codice Hibernate piuttosto semplice proveniente da un tutorial e sto ottenendo un errore che non comprendo in profondità in cglib2 (il pieno la traccia dello stack è alla fine di questo post). Sto probabilmente cercando di creare 'productBoProxy' per il mio semplice main() e bean XML (sotto).java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter

Ho provato molte versioni diverse di cglib inutilmente. Sono molto grato a chiunque possa aiutarmi a trovare la strada giusta per risolvere questo problema.

App.java:

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

Product.xml: trace

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

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 

risposta

48

Hai versioni disadattamenti di cglib e ASM. Stacktrace dice "net.sf.cglib.core.DebuggingClassWriter sovrascrive la visita del metodo finale", in altre parole net.sf.cglib.core.DebuggingClassWriter che estende org.objectweb.asm.ClassWriter tenta di scavalcare la visita del metodo finale, che ovviamente non riesce.

Ad esempio maven dependendy for cglib 2.2.2 tira asm 3.3.1, quindi questa è una combinazione che vale la pena provare.

+0

Profuso, grazie. Sono stato fuori città e non ho avuto il tempo libero di rielaborare il mio codice sulla base di queste informazioni. Non appena lo farò, farò clic sulla tua risposta, urto, ecc. –

+0

Grazie a questo mi ha davvero aiutato molto, stavo anche ricevendo un errore simile. – AurA

+0

Nel mio caso, ho effettivamente ricevuto questo errore perché avevo due diverse versioni di cglib nel mio progetto. Presumo che si basassero su versioni differenti di asm. – bischoje

Problemi correlati