2012-02-20 3 views
13

私はチュートリアルから発信いくつかの非常に単純なHibernateのコードのプロトタイプを作成しようとしていると私はフル(cglib2の深い理解できないエラーを取得していますnet.sf.cglib.core.DebuggingClassWriterクラススタックトレースはこの記事の最後にあります)。私は、おそらく、私の単純な()とbean XML(下記)ごとに 'productBoProxy'を作成しようとしています。にjava.lang.VerifyError:

私は無駄に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 

答えて

48

あなたはCGLIBとASMの不一致のバージョンを持っています。スタックトレースはもちろんのorg.objectweb.asm.ClassWriterが最終的な方法訪問を上書きしようとする拡張つまり net.sf.cglib.core.DebuggingClassWriter、で、「net.sf.cglib.core.DebuggingClassWriterは、最終的な方法訪問を上書きします」伝えます失敗する。たとえばmaven dependendy for cglib 2.2.2については

は、ASM 3.3.1を引っ張るので、これは試みる価値は1つの組み合わせです。

+0

Profuse thanks。私は町を出ていて、この情報に基づいて自分のコードを書き直す余裕がありませんでした。私がしたらすぐに、私はあなたの答え、バンプなどをクリックします。 –

+0

これは本当に私を助けてくれてありがとう、私もやや似たようなエラーが出ていた。 – AurA

+0

私の場合は、私のプロジェクトに2種類の異なるバージョンのcglibがあったので、実際にこのエラーが出ました。私はそれらがasmの異なるバージョンに依存していると仮定します。 – bischoje

関連する問題