Este dilema se puede solucionar de variadas maneras, sin embargo te dejamos la resolución más completa para nosotros.
Solución:
java.lang.AbstractMethodError: org.apache.xerces.dom.ElementImpl.getTextContent()Ljava/lang/String;
Esto sucederá cuando haya archivos JAR de Xerces en sus archivos WAR. /WEB-INF/lib
(o incluso de JRE /lib
) que es de una versión más antigua que la utilizada internamente por el servletcontainer. A la versión anterior, que aparentemente implementa JAXP de Java 1.4.2 o anterior, le falta el método mencionado que se introdujo en JAXP de Java 1.5.
Hay 2 opciones:
-
Actualice los archivos JAR de Xerces a una versión más nueva que coincida al menos con la que usó el contenedor de servlet.
-
Elimine esos archivos JAR de Xerces de
/WEB-INF/lib
. En realidad no pertenecen allí. El servletcontainer viene con su propia implementación JAXP. No necesita proporcionar el suyo propio a través de la aplicación web.
Se recomienda la opción 2. Tenga cuidado al utilizar un marco de gestión de dependencias como Maven. Algunas bibliotecas pobres incluirán específicamente una implementación de JAXP como una dependencia transitiva aunque la API ya sea parte de Java SE.
Tenga en cuenta que el problema concreto no está relacionado con OmniFaces. Solo es causado por la contaminación del classpath. OmniFaces usa JAXP para analizar el web.xml
(y web-fragment.xml
) y extraiga las ubicaciones de la página de error. Actualizar: esta específico la excepción ya no debería ocurrir desde OmniFaces 2.0, ya que se reemplazó según el problema 90 getTextContent()
llamadas por getFirstChild().getNodeValue()
.
Reseñas y calificaciones del post
Si tienes alguna desconfianza y capacidad de aumentar nuestro reseña puedes ejecutar una aclaración y con mucho gusto lo analizaremos.