it-swarm.com.ru

Ошибка: Java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter. <Init> (I) V

Я разрабатываю небольшое приложение Spring. Я должен хранить информацию о студентах в базе данных. Я разработал один SimpleFormController. Я использовал NetBeans + отображение Hibernate + Spring. При развертывании проекта возникают следующие ошибки.

Мой spring-config-db-applicationContext.xml показан ниже:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Hibernate session factory -->
  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <constructor-arg index="0">
        <value>${driverClassName}</value>
    </constructor-arg>
    <constructor-arg index="1">
        <value>${url}</value>
    </constructor-arg>
    <constructor-arg index="2">
        <value>${username}</value>
    </constructor-arg>
    <constructor-arg index="3">
        <value>${password}</value>
    </constructor-arg>
  </bean>


  <bean id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource"/>
    </property>
    <!-- <property name="configLocation">
        <value>WEB-INF/classes/hibernate.cfg.xml</value>
    </property> -->
    <property  name="mappingResources" >
        <list>
            <value>hibernate.cfg.xml</value>
        </list>
    </property>

  <!--  <property  name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property> -->

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${dialect}</prop>
            <prop key="hibernate.show_sql">true</prop>
  <!--<prop key="hibernate.hbm2ddl.auto">create</prop>-->
        </props>
    </property>
  </bean>
  <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory">
        <ref bean="sessionFactory"/>
    </property>
  </bean>
  <bean id="transactionManager"  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref bean="sessionFactory"/>
    </property>
  </bean>
</beans>

Произошла следующая ошибка:

ERROR (org.springframework.web.context.ContextLoader:213) - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in URL [jndi:/localhost/Student/WEB-INF/classes/config/spring-db-applicationContext.xml]: Invocation of init method failed; nested exception is Java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1395)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:512)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:450)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:289)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:286)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:188)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.Java:526)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:730)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:387)
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.Java:270)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.Java:197)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:47)
        at org.Apache.catalina.core.StandardContext.listenerStart(StandardContext.Java:3843)
        at org.Apache.catalina.core.StandardContext.start(StandardContext.Java:4342)
        at org.Apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.Java:791)
        at org.Apache.catalina.core.ContainerBase.addChild(ContainerBase.Java:771)
        at org.Apache.catalina.core.StandardHost.addChild(StandardHost.Java:525)
        at org.Apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.Java:627)
        at org.Apache.catalina.startup.HostConfig.deployApps(HostConfig.Java:511)
        at org.Apache.catalina.startup.HostConfig.check(HostConfig.Java:1231)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
        at Java.lang.reflect.Method.invoke(Method.Java:597)
        at org.Apache.Tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.Java:297)
        at com.Sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.Java:836)
        at com.Sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.Java:761)
        at org.Apache.catalina.manager.ManagerServlet.check(ManagerServlet.Java:1471)
        at org.Apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.Java:824)
        at org.Apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.Java:350)
        at javax.servlet.http.HttpServlet.service(HttpServlet.Java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)
        at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:290)
        at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.Java:196)
        at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:235)
        at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
        at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:233)
        at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:191)
        at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:525)
        at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:128)
        at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)
        at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:109)
        at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:286)
        at org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:845)
        at org.Apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.Java:583)
        at org.Apache.Tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.Java:447)
        at Java.lang.Thread.run(Thread.Java:619)
Caused by: Java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
        at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.Java:47)
        at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.Java:30)
        at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.Java:24)
        at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.Java:216)
        at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.Java:144)
        at net.sf.cglib.core.KeyFactory.create(KeyFactory.Java:116)
        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.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.Java:117)
        at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.Java:43)
        at org.hibernate.Tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.Java:162)
        at org.hibernate.Tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.Java:135)
        at org.hibernate.Tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.Java:55)
        at org.hibernate.Tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.Java:56)
        at org.hibernate.Tuple.entity.EntityMetamodel.<init>(EntityMetamodel.Java:302)
        at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.Java:434)
        at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.Java:108)
        at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.Java:61)
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.Java:238)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1304)
        at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.Java:813)
        at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.Java:731)
        at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.Java:211)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.Java:1454)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1392)
        ... 48 more
Mar 12, 2010 5:32:28 PM org.Apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
28
Hitesh Solanki

У вас есть несовместимость между версией ASM, требуемой для Hibernate (asm-1.5.3.jar), и версией, требуемой для Spring. Но, на самом деле, мне интересно, почему у вас есть asm-2.2.3.jar на вашем пути к классам (ASM входит в состав spring.jar и spring-core.jar, чтобы избежать таких проблем AFAIK). Смотрите HHH-2222

37
Pascal Thivent

Я нашел решение этой проблемы здесь: http://www.hildeberto.com/2008/05/hibernate-and-jersey-conflict-on.html

16
Rob Hufschmitt

NoSuchMethodError javadoc говорит это:

Брошенный, если приложение пытается вызвать указанный метод класса (или статический или экземпляр), и у того класса больше нет определения этого метода.

Обычно эта ошибка отлавливается компилятором; эта ошибка может возникнуть только во время выполнения, если определение класса несовместимо изменилось.

В вашем случае эта Ошибка является сильным признаком, что ваше веб-приложение использует неправильную версию JAR, определяющую классы org.objectweb.asm.*.

7
Stephen C

чтобы решить эту проблему, вы должны добавить два jar в POM зависимостей (если используете Maven)

<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.3.1</version>
</dependency>

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.1</version>
</dependency>
5
BERGUIGA Mohamed Amine

Я изменяю свои API как * cglib --- на ---> cglib-nodep-2.2.jar * cglib-asm --- на ---> cglib- asm.jar (т.е. последний)

3
Narendra Choyal

У меня была та же ошибка при инициализации Spring при запуске с использованием некоторых разных версий библиотеки, но все работало, когда я получал свои версии в этом порядке в classpath (другие библиотеки в cp не были важны):

  1. aSM-3.1.jar
  2. cGLIB-nodep-2.1_3.jar
  3. aSM-ATTRS-1.5.3.jar
3
Jason

Существует много несовместимости между различными версиями cglib и много плохих советов, которые можно найти на эту тему (используйте древние версии cglib-nodeb и т.д.). После борьбы с этой ерундой в течение 3 дней с древней версией Spring (2.5.6) я обнаружил:

  • если Spring генерирует исключения о NoSuchMethodError на основе Enhancer из cglib, отсутствующего setInterceptDuringConstruction (логическое значение), проверьте ваши зависимости в maven (на вкладке «Иерархия зависимостей» должны быть перечислены все версии cglib, которыми ваш проект загрязнен). Возможно, у вас есть зависимость, которая включает версию cglib, выпущенную до 2.2, которую Spring Cglib2AopProxy будет захватывать Enhancer для выполнения прокси. Добавьте версию 2.2+ к вашим зависимостям, но обязательно добавьте исключения для этих других версий. Если вы этого не сделаете, он просто будет продолжать взрываться.
  • Убедитесь, что у вас достаточно высокая версия cglib в зависимостях maven текущего проекта но остерегайтесь выбора слишком высокой версии, потому что тогда вы получите IncompatibleClassChangeError (s) вместо этого. 
  • Убедитесь, что изменения pom правильно внесены в проект, выполнив обновление maven для соответствующего проекта, а затем просмотрите «Проект»> «Настройки»> «Путь сборки Java»> «Библиотеки»> «Зависимости Maven». Если вы видите неправильные версии cglib, пора снова редактировать pom. 
0
Jim W

Обновите ваш pom.xml

<dependency>
  <groupId>asm</groupId>
  <artifactId>asm</artifactId>
  <version>3.1</version>
</dependency>
0
Suganthan Madhavan Pillai

Я столкнулся с той же ошибкой, когда добавил http-builder в зависимости.
В моем случае я мог бы решить, просто исключив asm следующим образом: 

compile('org.codehaus.groovy.modules.http-builder:http-builder:0.7'){
    excludes 'xml-apis'
    exclude(group:'xerces', module: 'xercesImpl')
    excludes 'asm'
}
0
toshi