2012-12-23 20 views
8

Używam programu Omnifaces 1.3 + Primefaces 3.4.1 + Jboss 7.1.1 Final, ale po prostu nie mogę przekieruj te wyjątki za pomocą FullAjaxExceptionHandler skonfigurowanego na moim web.xml, kiedy przychodzi żądanie ajax. Nic się nie dzieje, tylko kolejny wyjątek:java.lang.AbstractMethodError: org.apache.xerces.dom.ElementImpl.getTextContent() Ljava/lang/String

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:] 

Czy ktoś może mi o tym porozmawiać? Utknąłem. Jeśli wywołasz ten sam błąd bez ajax, wyjątek jest przekierowywany poprawnie.

Moja 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> 

Moja 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> 

Dzięki!

Odpowiedz

20

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

to się stanie, gdy istnieją pliki JAR XERCES w swoim wojny /WEB-INF/lib (lub nawet JRE na /lib), która jest od starszej wersji niż ta używana wewnętrznie przez servletcontainer. W starszej wersji, która najwyraźniej implementuje JAXP z Java 1.4.2 lub starszej, brakuje wspomnianej metody, która została wprowadzona w JAXP z Java 1.5.

Istnieją 2 opcje:

  1. plików Upgrade Xerces JAR do nowszej wersji dopasowywania przynajmniej jeden użył servletcontainer.

  2. Usuń te pliki XARces JAR z /WEB-INF/lib. W rzeczywistości nie należą tam. Serletcontainer ma własną implementację JAXP. Nie musisz dostarczać własne za pośrednictwem aplikacji internetowej.

Opcja 2 jest zalecana. Uważaj podczas korzystania z ram zarządzania zależnościami, takich jak Maven. Niektóre słabe biblioteki będą zawierać implementację JAXP jako przejściową zależność, nawet jeśli interfejs API jest już częścią Java SE.

Należy zauważyć, że konkretny problem nie jest związany z OmniFaces. To po prostu spowodowane zanieczyszczeniem klasy. OmniFaces używa JAXP do przeanalizowania web.xml (i web-fragment.xml) i wyodrębnienia lokalizacji stron błędów. Aktualizacja: ten wyjątek specyficzny nie powinien już występować, ponieważ OmniFaces 2.0, ponieważ ma jako issue 90 zastąpione getTextContent() połączeń przez getFirstChild().getNodeValue().

+0

Masz całkowitą rację ... Dziękuję bardzo! Mój świąteczny prezent! – Basileus

+0

Nie ma za co. – BalusC

+0

Prawidłowa odpowiedź. Dzięki –