wake-up-neo.net

Fehler: Java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter. <Init> (I) V

Ich entwickle eine kleine Frühlingsanwendung. Ich muss die Details der Schülerinformationen in der Datenbank speichern. Ich habe einen SimpleFormController entwickelt. Ich habe NetBeans + Hibernate-Mapping + Spring verwendet. Bei der Bereitstellung des Projekts treten die folgenden Fehler auf.

Meine spring-config-db-applicationContext.xml wird unten gezeigt:

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

Der folgende Fehler tritt auf:

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

Sie haben eine Inkompatibilität zwischen der von Hibernate (asm-1.5.3.jar) erforderlichen Version von ASM und der von Spring benötigten Version. Aber eigentlich frage ich mich, warum Sie asm-2.2.3.jar auf Ihrem Klassenpfad haben (ASM ist in spring.jar und spring-core.jar gebündelt, um solche Probleme zu vermeiden). Siehe HHH-2222

37
Pascal Thivent

Ich habe hier die Lösung für dieses Problem gefunden: http://www.hildeberto.com/2008/05/hibernate-and-jersey-conflict-on.html

16
Rob Hufschmitt

Das NoSuchMethodError javadoc sagt folgendes:

Wird ausgelöst, wenn eine Anwendung versucht, eine angegebene Methode einer Klasse (statisch oder Instanz) aufzurufen, und diese Klasse hat keine Definition dieser Methode mehr.

Normalerweise wird dieser Fehler vom Compiler abgefangen. Dieser Fehler kann nur zur Laufzeit auftreten, wenn sich die Definition einer Klasse inkompatibel geändert hat.

In Ihrem Fall ist dieser Fehler ein strong-Hinweis, dass Ihre Webapp die falsche Version der JAR-Datei verwendet, die die org.objectweb.asm.*-Klassen definiert.

7
Stephen C

um dieses Problem zu lösen, sollten Sie zwei Pars in Ihrem Abhängigkeits-POM hinzufügen (wenn Sie Maven verwenden).

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

Ich ändere meine APIs als * cglib --- zu ---> cglib-nodep-2.2.jar * cglib-asm --- zu ---> cglib- asm.jar (dh späteste)

3
Narendra Choyal

Ich hatte den gleichen Fehler beim Initialisieren von Spring beim Start mit verschiedenen Bibliotheksversionen, aber alles funktionierte, als ich meine Versionen in dieser Reihenfolge im Klassenpfad abbekam (die anderen Bibliotheken im cp waren nicht wichtig):

  1. asm-3.1.jar
  2. cglib-nodep-2.1_3.jar
  3. asm-attrs-1.5.3.jar
3
Jason

Es gibt eine Menge Inkompatibilität zwischen verschiedenen Versionen von Cglib und einer Menge schlechter Ratschläge, die zu diesem Thema gegoogelt werden können (alte Versionen von Cglib-Nodeb usw.). Nachdem ich 3 Tage lang mit diesem Unsinn mit einer alten Version von Spring (2.5.6) gerungen hatte, habe ich entdeckt:

  • wenn Spring Ausnahmen über NoSuchMethodError basierend auf Enhancer von cglib ausgibt, wenn setInterceptDuringConstruction (boolean) fehlt, überprüfen Sie Ihre Abhängigkeiten in maven (auf der Registerkarte Abhängigkeitshierarchie sollten alle Versionen von cglib aufgeführt sein, mit denen Ihr Projekt verschmutzt ist). Wahrscheinlich haben Sie eine Abhängigkeit, die eine frühere Version von cglib mitbringt, von der Spring Cglib2AopProxy Enhancer für das Proxying übernimmt. Fügen Sie Ihren Abhängigkeiten die Version 2.2 oder höher hinzu, stellen Sie jedoch sicher, dass Sie Ausschlüsse für diese anderen Versionen einfügen. Wenn Sie es nicht tun, sprengt es einfach weiter.
  • Stellen Sie sicher, dass Sie über eine ausreichend hohe Version von cglib in den Maven-Abhängigkeiten des aktuellen Projekts verfügen, aber hüten Sie sich vor einer zu hohen Version, da Sie stattdessen IncompatibleClassChangeError (s) erhalten. 
  • Stellen Sie sicher, dass Ihre Änderungen an pom richtig in das Projekt aufgenommen wurden, indem Sie ein Maven-Update für das betreffende Projekt durchführen und dann Projekt> Voreinstellungen> Java-Erstellungspfad> Bibliotheken> Maven-Abhängigkeiten betrachten. Wenn dort die falschen cglib-Versionen angezeigt werden, müssen Sie den Pom erneut bearbeiten. 
0
Jim W

Aktualisieren Sie Ihre pom.xml

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

Beim Hinzufügen von http-builder zu Abhängigkeiten ist derselbe Fehler aufgetreten.
In meinem Fall könnte ich das Problem lösen, indem ich asm so ausschließe: 

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