Исключение при перенаправлении на ‹страницу ошибок› настроено (HTTP 500)

У меня возникают проблемы при перенаправлении на страницу ошибок, настроенную в web.xml (HTTP 500). Выбрасывается следующее исключение

java.lang.NullPointerException at java.lang.StringBuilder.<init>(StringBuilder.java:77) 
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.getRenderedViewId(FaceletViewDeclarationLanguage.java:1674)
FullAjaxExceptionHandler: Well, another exception occurred during rendering error page 'comum/paginas/erro/erro500.xhtml'. Trying to render a hardcoded error page now.

веб.xml

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>comum/paginas/erro/sessaoExpirada.xhtml</location>
</error-page>
<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>comum/paginas/erro/erro500.xhtml</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>comum/paginas/erro/erro500.xhtml</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>comum/paginas/erro/erro403.xhtml</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>comum/paginas/erro/erro404.xhtml</location>
</error-page>

FullAjaxExceptionHandlerFactory был настроен в файлеfaces-config.xml.

<factory>
    <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>

Компоненты моих лицевых панелей упакованы в файл jar (/META-INF/resources/comum/paginas/erro). ResourceResolver

<context-param>
    <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
    <param-value>company.FaceletsResourceResolver</param-value>
</context-param>

public class FaceletsResourceResolver extends ResourceResolver {

    private ResourceResolver parent;
    private String basePath;

    public FaceletsResourceResolver(ResourceResolver parent) {
        this.parent = parent;
        this.basePath = "/META-INF/resources";
    }

    @Override
    public URL resolveUrl(String path) {
        URL url = parent.resolveUrl(path); // Resolves from WAR.
        if (url == null) {
            url = getClass().getResource(basePath + path); // Resolves from JAR.
        }
        return url;
    }
}

Когда компоненты Facelets не были упакованы в банку, редирект работал правильно. Остальные страницы ошибок (403, 404, sessionExpired) работают без проблем. Ошибка возникает только с ошибкой HTTP 500.

Окружающая обстановка:

  • Вебсфера 8.5.5.2
  • JSF 2.0 (мои лица)
  • Праймфейс 5.0
  • Омнифейс 1.7

person gfinotti    schedule 18.09.2014    source источник
comment
Ну, еще одно исключение произошло во время рендеринга страницы ошибки «comum/paginas/erro/erro500.xhtml». кажется довольно ясным; ваш файл erro500.xhtml явно не может быть отображен и, вероятно, содержит ошибку. Тоже похоже на опечатку, я ожидаю, что файл будет называться error500.xhtml.   -  person Gimby    schedule 18.09.2014
comment
erro в переводе с португальского означает ошибка.   -  person BalusC    schedule 18.09.2014
comment
@Gimby, это не опечатка, ошибка - бразильский португальский.   -  person gfinotti    schedule 18.09.2014


Ответы (1)


<location> должен начинаться с /.

So e.g.

<location>comum/paginas/erro/erro500.xhtml</location>

должно быть

<location>/comum/paginas/erro/erro500.xhtml</location>
person BalusC    schedule 18.09.2014