Jackson + Tomcat – java.lang.VerifyError:无法从最终类inheritance

我有一个在Tomcat 6中运行的Java Web服务,它接受JSON输入。 我试图使用Jackson ObjectMapper来解析输入json。 但是在初始化ObjectMapper对象时,我收到了这个错误

16:08:13,616 ERROR [[jersey]] Servlet.service() for servlet jersey threw exception java.lang.VerifyError: Cannot inherit from final class 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 org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2733) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1124) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1612) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491) at com.test.project.offline.ws.WsApiResource.updateData(WsApiResource.java:169) ....... 

在第169行,我有这个ObjectMapper mapper = new ObjectMapper();

在unit testing中本地调用com.test.project.offline.ws.WsApiResource.updateData()方法时,它可以正常工作而不会出现任何错误。

请帮我解决这个问题。 我使用的是Jackson 1.8.4和tomcat 6。

更新:修复了这个问题。 问题是依赖树中不同版本的jackson。 排除它解决了问题。

我也遇到了与Apache Lucene相同的问题。 我的/ WEB-INF / lib文件夹中有lucene-core-3.6.0.jar和lucene-core-3.5.0.jar。 删除一个或另一个也解决了我的问题。 它必须是版本问题。

我遇到了与Apache Solr相同的问题,它通过删除我的~/.m2缓存来解决。

此问题也是由于在我的pom.xml文件中指定了错误的依赖版本引起的,其中另一个软件包正在自动下载另一个版本。

Maven真的应该有某种冲突版本的依赖解析方案……

对我来说一样 – 我的ejb3应用程序使用jackson-all-1.9.4 – 而我的glassfish容器(v2.1)包含一个lib / jackson-asl-0.9.4.jar:

 java.lang.VerifyError: Cannot inherit from final class 

现在,我用gson取代了jackson-all。

谢谢,

丹尼

尼尔对这个问题有很好的答案。 但是,除了你的M2缓存之外,检查你是否像我一样完整的DUMMY并确保你的POM不包括声明同一Final类的2个包。 Google API因其包含API Jars中的类而异乎寻常。 确保您删除不需要的一切!