Wednesday, March 12, 2014

Java.Lang.NoSuchMethodError: Org.Objectweb.Asm.ClassWriter


If you see this error while deploying application with hibernate :

SEVERE: Context initialization failed
org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'sessionFactory' defined in ServletContext resource 
[/WEB-INF/classes/config/database/spring/HibernateSessionFactory.xml]: 
Invocation of init method failed; nested exception is 
 
Caused by: org.hibernate.HibernateException: 
Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
 ...
 ...
Caused by: java.lang.reflect.InvocationTargetException
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 ...
Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
 at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)
 ...
The error can be resolved as follows :

The ASM package is needed by the cglib package, which is part of the Hibernate libraries. If we remove that package, Jersey will work correctly, but Hibernate will stop working. To solve this conflict use cglib-nodep.jar instead of cglib.jar and keep ASM version 3.x with Jersey. cglib-nodep.jar includes some ASM classes demanded by cglib.jar, changing the package name to avoid any class conflict.

If you are using maven then change
<dependency> <groupId>cglib</groupId> <artifactId&gtcglib</artifactId> <version&gt2.2</version> </dependency>
to
<dependency> <groupId>cglib</groupId> <artifactId&gtcglib-nodep</artifactId> <version&gt2.2</version> </dependency>

No comments:

Post a Comment