java spring hibernate orm java-bytecode-asm

Error: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<Init>(I) V



spring hibernate (9)

Estoy desarrollando una pequeña aplicación de primavera. Tengo que almacenar los detalles de la información del estudiante en la base de datos. Desarrollé un SimpleFormController. He usado NetBeans + Hibernate mapping + Spring. Cuando despliegue el proyecto, ocurren los siguientes errores.

Mi spring-config-db-applicationContext.xml se muestra a continuación:

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

Se produce el siguiente error:

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


Actualiza tu pom.xml

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


Cambio mis API como * cglib --- to ---> cglib-nodep-2.2.jar * cglib-asm --- to ---> cglib-asm.jar (es decir, la última)


El javadoc NoSuchMethodError dice esto:

Lanzado si una aplicación intenta llamar a un método específico de una clase (ya sea estática o instancia), y esa clase ya no tiene una definición de ese método.

Normalmente, este error es capturado por el compilador; este error solo puede ocurrir en tiempo de ejecución si la definición de una clase ha cambiado de manera incompatible.

En su caso, este Error es una fuerte indicación de que su aplicación web está utilizando la versión incorrecta del JAR que define las clases org.objectweb.asm.* .


Encontré el mismo error cuando se agregó http-builder a las dependencias.
En mi caso, podría resolverlo simplemente excluyendo asm como este:

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



Hay mucha incompatibilidad entre las diferentes versiones de cglib y muchos consejos deficientes que se pueden buscar en Google sobre este tema (use versiones antiguas de cglib-nodeb, etc.). Después de luchar con estas tonterías durante 3 días con una versión antigua de Spring (2.5.6), he descubierto:

  • si Spring está lanzando excepciones sobre NoSuchMethodError basado en Enhancer de cglib missing setInterceptDuringConstruction (boolean), verifique sus dependencias en maven (la pestaña Dependen Hierarchy debería listar todas las versiones de cglib por las que su proyecto está contaminado). Probablemente tengas una dependencia que traiga una versión anterior a la 2.2 de cglib, de la cual Spring Cglib2AopProxy tomará Enhancer para que haga el proxying. Agregue la versión 2.2+ a sus dependencias, pero asegúrese de incluir exclusiones para estas otras versiones. Si no lo haces, seguirá explotando.
  • Asegúrate de tener una versión lo suficientemente alta de cglib en las dependencias maven del proyecto actual, pero ten cuidado de elegir una versión demasiado alta porque obtendrás InCompatibleClassChangeError (s) en su lugar.
  • Verifique que sus cambios de pom hayan llegado al proyecto correctamente haciendo una actualización de maven en el proyecto en cuestión y luego mirando Project> preferences> Java Build Path> Libraries> Maven Dependencies. Si ves las versiones de cglib incorrectas, hora de editar el pom nuevamente.

Tuve el mismo error al inicializar Spring al inicio, usando algunas versiones de biblioteca diferentes, pero todo funcionó cuando obtuve mis versiones en este orden en classpath (las otras bibliotecas en el cp no eran importantes):

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

Usted tiene una incompatibilidad entre la versión de ASM requerida por Hibernate ( asm-1.5.3.jar ) y la requerida por Spring. Pero, en realidad, me pregunto por qué tiene asm-2.2.3.jar en su classpath (ASM está incluido en spring.jar y spring-core.jar para evitar tales problemas AFAIK). Ver HHH-2222 .


para resolver este tipo de problema, debe agregar dos jar en su POM de dependencia (si usa 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>