java.lang.AbstractMethodError:org.apache.xerces.dom.ElementImpl.getTextContent()Ljava / lang / String

我正在使用Omnifaces 1.3 + Primefaces 3.4.1 + Jboss 7.1.1 Final但我无法使用在我的web.xml上配置的FullAjaxExceptionHandler重定向exception,当它们来自ajax请求时。 什么都没发生,只是另一个例外:

 19:38:05,467 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/taxMileage].[Faces Servlet]] (http--0.0.0.0-8181-4) Servlet.service() for servlet Faces Servlet threw exception: java.lang.AbstractMethodError: org.apache.xerces.dom.ElementImpl.getTextContent()Ljava/lang/String; at org.omnifaces.config.WebXml.parseErrorPageLocations(WebXml.java:216) [omnifaces-1.3.jar:1.3] at org.omnifaces.config.WebXml.(WebXml.java:84) [omnifaces-1.3.jar:1.3] at org.omnifaces.config.WebXml.(WebXml.java:53) [omnifaces-1.3.jar:1.3] at org.omnifaces.exceptionhandler.FullAjaxExceptionHandler.handleAjaxException(FullAjaxExceptionHandler.java:162) [omnifaces-1.3.jar:1.3] at org.omnifaces.exceptionhandler.FullAjaxExceptionHandler.handle(FullAjaxExceptionHandler.java:145) [omnifaces-1.3.jar:1.3] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:] 

有人可以给我一个关于此的提示吗? 我被卡住了。 如果我在没有ajax的情况下调用相同的错误,则会正确地重定向exception。

我的web.xml

   taxMileage  /pages/protected/user/dashboard.xhtml   Faces Servlet javax.faces.webapp.FacesServlet 1   InitializeApplication com.taxMileage.server.util.InitializeApplication 1   primefaces.THEME south-street   PrimeFaces FileUpload Filter org.primefaces.webapp.filter.FileUploadFilter   PrimeFaces FileUpload Filter Faces Servlet   facesExceptionFilter org.omnifaces.filter.FacesExceptionFilter   facesExceptionFilter Faces Servlet   Faces Servlet /faces/* *.jsf *.xhtml   javax.ws.rs.core.Application /rest/*      Restricted Area - ADMIN Only /pages/protected/admin/*   ADMIN     Restricted Area - USER and ADMIN /pages/protected/user/*   USER ADMIN     Secured resources /rest/*   NONE     FORM  /pages/public/login.xhtml /pages/public/loginError.xhtml     ADMIN   USER   java.lang.RuntimeException /pages/error/error1.xhtml   

我的faces-config.xml

    com.taxMileage.server.util.MultiPageMessagesSupport   org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory    messages msgs    

谢谢!

java.lang.AbstractMethodError:org.apache.xerces.dom.ElementImpl.getTextContent()Ljava / lang / String;

当WAR的/WEB-INF/lib (甚至是JRE的/lib )中存在Xerces JAR文件时,会发生这种情况,该文件的版本比servletcontainer内部使用的版本旧。 旧版本显然实现了Java 1.4.2或更早版本的JAXP,它缺少在Java 1.5的 JAXP中引入的上述方法。

有两种选择:

  1. 将Xerces JAR文件升级到与至少使用servletcontainer的版本匹配的较新版本。

  2. /WEB-INF/lib删除那些Xerces JAR文件。 他们确实不属于那里。 servletcontainer带有自己的JAXP实现。 您无需通过webapp提供自己的服务。

建议选项2。 在使用依赖管理框架(如Maven)时要小心。 一些不良库将特别包含JAXP实现作为传递依赖,即使API已经是Java SE的一部分。

请注意,具体问题与OmniFaces无关。 这只是由类路径污染引起的。 OmniFaces使用JAXP来解析web.xml (和web-fragment.xml )并提取错误页面位置。 更新 :此特定exception不应再发生,因为根据问题90的 OmniFaces 2.0替换了getFirstChild().getNodeValue() getTextContent()调用。