2011-10-14 10 views
12

Tengo un servicio web Java ejecutándose en Tomcat 6 que acepta la entrada JSON. Estoy tratando de usar Jackson ObjectMapper para analizar la entrada json. Pero al inicializar el objeto ObjectMapper estoy recibiendo este errorJackson + Tomcat - java.lang.VerifyError: No se puede heredar de la clase final

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) 
....... 

En la línea 169 que tengo esta ObjectMapper mapper = new ObjectMapper();

Al llamar com.test.project.offline.ws.WsApiResource.updateData método() localmente en una prueba unitaria funciona sin ningún error.

Amablemente ayúdame a solucionar esto. Estoy usando Jackson 1.8.4 y tomcat 6.

ACTUALIZACIÓN: Se ha solucionado el problema. El problema era una versión diferente de jackson en el árbol de dependencias. Excluirlo solucionó el problema.

Respuesta

5

También tuve el mismo problema con Apache Lucene. Tenía lucene-core-3.6.0.jar y lucene-core-3.5.0.jar en mi carpeta/WEB-INF/lib. Eliminar uno u otro también solucionó mi problema. Debe ser un problema de control de versiones.

1

Lo mismo para mí - mi solicitud ejb3 utiliza Jackson-all-1.9.4 - y mi contenedor GlassFish (v2.1) contiene una lib/Jackson-ASL-0.9.4.jar:

java.lang.VerifyError: Cannot inherit from final class 

Ahora, he reemplazado a jackson-all con gson.

Gracias,

Danny

4

que tenían el mismo problema con Apache Solr, y se resolvió mediante la supresión de mi caché ~/.m2.

Este problema también se produjo al especificar una versión incorrecta de una dependencia en mi archivo pom.xml, donde otro paquete descargaba automáticamente otra versión.

Maven realmente debería tener algún tipo de versiones contradictorias de esquema de resolución de dependencias ...

0

Neil tiene una gran respuesta a esta pregunta. Sin embargo, aparte de tu caché M2, comprueba si eres un DUMMY completo como WAS y asegúrate de que tu POM no incluya, por ejemplo, 2 paquetes donde se declare la misma clase final. Las API de Google son conocidas por incluir clases en sus Frascos de API. ¡Asegúrate de borrar TODO lo que no necesites!

Cuestiones relacionadas