2012-02-20 45 views
13

Estoy intentando prototipar un código bastante simple de Hibernate que se origina en un tutorial y estoy recibiendo un error que no entiendo en profundidad en cglib2 (el completo el seguimiento de la pila se encuentra al final de esta publicación). Probablemente estoy tratando de crear 'productBoProxy' por mi simple main() y bean XML (abajo).java.lang.VerifyError: clase net.sf.cglib.core.DebuggingClassWriter

He intentado muchas versiones diferentes de cglib inútilmente. Estoy muy agradecido con cualquiera que pueda ayudarme a encontrar el camino correcto para resolver esto.

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

Pila:

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 

Respuesta

48

tiene versiones no coincidentes de cglib y ASM. Stacktrace dice "net.sf.cglib.core.DebuggingClassWriter anula la visita al método final", en otras palabras net.sf.cglib.core.DebuggingClassWriter que extiende org.objectweb.asm.ClassWriter intenta anular la visita al método final, que por supuesto falla

Por ejemplo maven dependendy for cglib 2.2.2 extrae el asm 3.3.1, por lo que esta es una combinación que vale la pena probar.

+0

Muchas gracias. He estado fuera de la ciudad y no he tenido el placer de volver a trabajar mi código en función de esta información. Tan pronto como lo haga, haré clic en su respuesta, bache, etc. –

+0

Gracias realmente me ayudó mucho, también estaba recibiendo un error similar. – AurA

+0

En mi caso, en realidad obtuve este error porque tenía dos versiones diferentes de cglib en mi proyecto. Supongo que se basaron en diferentes versiones de asm. – bischoje

Cuestiones relacionadas