복붙노트

[SPRING] java.lang.VerifyError : 클래스 net.sf.cglib.core.DebuggingClassWriter

SPRING

java.lang.VerifyError : 클래스 net.sf.cglib.core.DebuggingClassWriter

튜토리얼에서 시작된 아주 단순한 Hibernate 코드의 프로토 타입을 만들려고 노력 중이고 cglib2 (전체 스택 추적이이 게시물의 끝 부분에 있음)에서 깊이 이해하지 못하는 오류가 발생했습니다. 나는 아마도 main ()과 bean XML (아래)에서 'productBoProxy'를 만들려고 노력 중이다.

나는 많은 다른 버전의 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

해결법

  1. ==============================

    1.cglib 및 ASM의 버전이 일치하지 않습니다. Stacktrace는 "net.sf.cglib.core.DebuggingClassWriter가 최종 메소드 방문을 무시합니다"라고 말합니다. org.objectweb.asm.ClassWriter를 확장하는 net.sf.cglib.core.DebuggingClassWriter는 최종 메소드 방문을 무시하려고 시도하지만 물론 실패합니다.

    cglib 및 ASM의 버전이 일치하지 않습니다. Stacktrace는 "net.sf.cglib.core.DebuggingClassWriter가 최종 메소드 방문을 무시합니다"라고 말합니다. org.objectweb.asm.ClassWriter를 확장하는 net.sf.cglib.core.DebuggingClassWriter는 최종 메소드 방문을 무시하려고 시도하지만 물론 실패합니다.

    예를 들어 cglib 2.2.2에 대한 maven 종속성은 asm 3.3.1을 가져 오므로 이것은 시도해 볼 가치가 있습니다.

  2. from https://stackoverflow.com/questions/9366403/java-lang-verifyerror-class-net-sf-cglib-core-debuggingclasswriter by cc-by-sa and MIT license