我有一个在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();
在单元测试中本地调用com.test.project.offline.ws.WsApiResource.updateData()方法时,它可以正常工作。
请帮助我解决这个问题。我正在使用Jackson 1.8.4和tomcat 6.
更新:修正了问题。问题是依赖树中不同版本的jackson。排除它解决了问题。
答案 0 :(得分:5)
我也遇到了与Apache Lucene相同的问题。我的/ WEB-INF / lib文件夹中有lucene-core-3.6.0.jar和lucene-core-3.5.0.jar。删除一个或另一个也解决了我的问题。它必须是版本问题。
答案 1 :(得分:4)
我遇到了与Apache Solr相同的问题,并通过删除我的~/.m2
缓存解决了这个问题。
此问题也是由于在我的pom.xml
文件中指定了错误版本的依赖项引起的,其中另一个程序包自动下载了另一个版本。
Maven确实应该有某种冲突版本的依赖解析方案...
答案 2 :(得分:1)
对我来说同样 - 我的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。
谢谢,
丹尼
答案 3 :(得分:0)
尼尔对这个问题有很好的答案。但是,除了你的M2缓存之外,检查你是否是一个像我这样的完整DUMMY,并确保你的POM不包括声明同一Final类的2个包。谷歌API因其包括API罐中的类而交叉而臭名昭着。确保你删除了你不需要的一切!