我使用Omnifaces 1.3 + Primefaces 3.4.1 + 7.1.1的Jboss决赛,但我不能重定向与例外FullAjaxExceptionHandler对我的配置web.xml,当他们通过Ajax请求。什么也没发生,只是另一个例外:
FullAjaxExceptionHandler
web.xml
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.<init>(WebXml.java:84) [omnifaces-1.3.jar:1.3] at org.omnifaces.config.WebXml.<clinit>(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的情况下调用相同的错误,则会正确重定向异常。
我的web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0" > <display-name>taxMileage</display-name> <welcome-file-list> <welcome-file>/pages/protected/user/dashboard.xhtml</welcome-file> </welcome-file-list> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>InitializeApplication</servlet-name> <servlet-class>com.taxMileage.server.util.InitializeApplication</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <context-param> <param-name>primefaces.THEME</param-name> <param-value>south-street</param-value> </context-param> <filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> </filter> <filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <filter> <filter-name>facesExceptionFilter</filter-name> <filter-class>org.omnifaces.filter.FacesExceptionFilter</filter-class> </filter> <filter-mapping> <filter-name>facesExceptionFilter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> <url-pattern>*.jsf</url-pattern> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>javax.ws.rs.core.Application</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> <!-- --> <!-- Protected area definition --> <security-constraint> <web-resource-collection> <web-resource-name>Restricted Area - ADMIN Only</web-resource-name> <url-pattern>/pages/protected/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>ADMIN</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Restricted Area - USER and ADMIN</web-resource-name> <url-pattern>/pages/protected/user/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>USER</role-name> <role-name>ADMIN</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Secured resources</web-resource-name> <url-pattern>/rest/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint> <!-- Login page --> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/pages/public/login.xhtml</form-login-page> <form-error-page>/pages/public/loginError.xhtml</form-error-page> </form-login-config> </login-config> <!-- System roles --> <security-role> <role-name>ADMIN</role-name> </security-role> <security-role> <role-name>USER</role-name> </security-role> <error-page> <exception-type>java.lang.RuntimeException</exception-type> <location>/pages/error/error1.xhtml</location> </error-page> </web-app>
我的faces-config.xml:
faces-config.xml
<?xml version="1.0" encoding="UTF-8"?> <faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd" version="2.1"> <lifecycle> <phase-listener>com.taxMileage.server.util.MultiPageMessagesSupport</phase-listener> </lifecycle> <factory> <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory> </factory> <application> <resource-bundle> <base-name>messages</base-name> <var>msgs</var> </resource-bundle> </application> </faces-config>
谢谢!
java.lang.AbstractMethodError:org.apache.xerces.dom.ElementImpl.getTextContent()Ljava / lang / String;
当您的WAR /WEB-INF/lib(甚至JRE /lib)中存在Xerces JAR文件时,就会发生这种情况,该文件的版本比servlet容器内部使用的版本更旧。显然实现Java 1.4.2或更早版本的JAXP的较旧版本缺少Java 1.5的 JAXP中引入的上述方法。
/WEB-INF/lib
/lib
有2个选项:
将Xerces JAR文件升级到至少与使用servlet容器的版本匹配的较新版本。
从中删除那些Xerces JAR文件/WEB-INF/lib。他们实际上不属于那里。servletcontainer带有自己的JAXP实现。您无需通过网络应用程序提供自己的内容。
建议使用选项2。使用诸如Maven之类的依赖项管理框架时要当心。即使该API已经是Java SE的一部分,某些较差的库也会特别将JAXP实现作为传递依赖项包括在内。
请注意,具体问题与OmniFaces无关。这只是由类路径污染引起的。OmniFaces使用JAXP解析web.xml(和web- fragment.xml)并提取错误页面位置。 更新 :自OmniFaces 2.0以来,不再存在此 特定 异常,因为它已按照问题90替换getTextContent()为getFirstChild().getNodeValue()。
web- fragment.xml
getTextContent()
getFirstChild().getNodeValue()