Jackson + Tomcat - java.lang.VerifyError:无法从最终类继承

2022-09-04 03:35:26

我有一个在Tomcat 6中运行的Java Webservice,它接受JSON输入。我正在尝试使用Jackson ObjectMapper来解析输入json。但是在初始化对象映射器对象时,我收到此错误

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。排除它解决了问题。


答案 1

我对Apache Lucene也有同样的问题。我的 /WEB-INF/lib 文件夹中有 lucene-core-3.6.0.jar 和 lucene-core-3.5.0.jar。删除一个或另一个也解决了我的问题。这一定是版本控制问题。


答案 2

我在Apache Solr上遇到了同样的问题,通过删除我的缓存解决了这个问题。~/.m2

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

Maven真的应该有某种相互冲突的依赖关系解决方案版本......