¿solución para java.lang.VerifyError en tomcat 7.0.23/jdk 1.6.x?
exception (6)
¿Has intentado deshabilitar el Verificador dividido : -XX:-UseSplitVerifier
Aquí hay una referencia para las opciones de JVM: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
He visto algo similar con Java 7 y el VerifyError.
Cuando implementé una aplicación web 3.0.3 incorporada en Tomcat 7.0.23 en Linux (java 1.6.x) y accedí a mis credenciales publicadas en la página de inicio de sesión, recibí el siguiente error. pom.xml hace referencia a servlet 2.5, jsp 2.1 y JSTL 1.2.
¿Por qué me sale este error? ¿Qué puedo hacer para evitarlo?
Tengo otros archivos .war implementados en la misma instancia de Tomcat y nunca tuve este problema en esas aplicaciones.
La primera JSP (login.jsp) que hice un GET de http no arrojó un error. El POST desde la 1ª JSP hasta la 2ª Jsp (ChLogin.jsp) encontró el problema.
===========================
causa principal
java.lang.VerifyError: (class: org/apache/jsp/ChLogin_jsp, method: _jspService signature: (Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V) Inconsistent stack height 0 != 1
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
java.lang.Class.getConstructor0(Class.java:2699)
java.lang.Class.newInstance0(Class.java:326)
java.lang.Class.newInstance(Class.java:308)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
ACTUALIZACIÓN 1
La WEB-INF / lib de la aplicación web NO contiene los tarros de servlet, jsp o JSTL. Contiene muchas dependencias de aplicaciones y tarros de primavera (usamos Spring MVC).
ACTUALIZACIÓN 2
No compilamos JSP previamente. Ese es un objetivo para otro día, sin embargo.
ACTUALIZACIÓN 3
Descubrí que este problema no estaba en tomcat 7.0.12, 7.0.14, 7.0.16 pero comenzó con 7.0.19. Publicado en la lista de correo de los usuarios de Tomcat. Obtuve una respuesta de que tal vez era culpa del compilador JDT del eclipse. Verificado, ese es el caso al reemplazar el compilador en tomcat 7.0.23 / 27 con el compilador JDT de tomcat 7.0.16 y LO & BEHOLD, todo está bien. Estoy planeando escribir al equipo de compilación JDT de Eclipse (si existe) y publicar sobre este error.
El error es bastante obvio: hay un error en el jaspe al crear el bytecode. El código generado no borra la propiedad de marco de Inconsistent stack height 0 != 1
Puede intentar mezclar el código, dividirlo en métodos, mover líneas aquí y allá y el error podría desaparecer. ¿También puede publicar información relevante del servlet jsp (coincidente * .jsp) desde web.xml (generalmente en algún lugar en conf) para verificar los parámetros del compilador?
Este error significa que el JSP se ha compilado para una implementación específica de Servlet / JSP / JSTL, pero luego Tomcat intenta cargar las clases compiladas con otra implementación / versión disponible en ClassPath.
Probablemente sucede porque tu WAR contiene archivos jar con servlet, jsp y / o jstl API y / o implementación. Dado que las versiones usadas coinciden con la implementación de Tomcat 5.5, funciona allí pero falla con implementaciones más recientes.
Debe establecer el scope para que se provided
tales dependencias en su POM Maven para excluir esos archivos jar de WAR WEB-INF/lib
.
Para validar que el código compilado sobre la marcha no carga dependencias alternativas, debe ejecutar Tomcat con la -verbose:class
. Las últimas líneas antes del error pueden ayudar a adivinar lo que está mal.
Actualización 2012/05/30 ¿Tiene jasper
o javax.el
o el-api
jar en WEB-INF/lib
? Si es así, quítalo / ellos también.
También es posible que una taglib que utilizó se compile específicamente para Tomcat 5.5 Servlet 2.3 API y se rompa cuando Tomcat 7.
Esto sucedió conmigo en Tomcat 6.0.35 y solo en una página jsp, que solo tiene:
<jsp:forward page="/sindicato/consultaServidor.jsp"/>
La solución fue reemplazar la etiqueta jsp por la etiqueta jstl:
<c:redirect url="/sindicato/consultaServidor.jsp"/>
¡Y no preguntes por qué! Porque tenemos más páginas jsp con esa etiqueta jsp (jsp: forward) sin ningún problema.
Intente imprimir el classpath ( System.out.println("java.class.path");
) Compare el classpath del tomcat5 y el tomcat7. Comprueba cuál es la diferencia en el classpath.
java.lang.VerifyError:
Fácil W / A
Esto es debido al compilador de tomcat incorporado.
El compilador Java de Eclipse JDT se incluye como el compilador predeterminado. Es un compilador Java avanzado que cargará todas las dependencias desde el cargador de clases Tomcat, lo que ayudará enormemente a la hora de compilar en grandes instalaciones con decenas de JAR. En servidores rápidos, esto permitirá ciclos de recompilación de menos de un segundo incluso para páginas JSP grandes.
Si se ve alguno de estos problemas, siga la siguiente solución
Apache Ant, que se usó en versiones anteriores de Tomcat, se puede usar en lugar del nuevo compilador simplemente eliminando el archivo lib / ecj - *. Jar, y colocando los archivos ant.jar y ant-launcher.jar de la última distribución de Ant en la carpeta lib.