В чем может быть причина того, что JSF/MyFaces потеряет свой FacesContext?

У меня есть веб-приложение, основанное на JSF(2.1.17) myfaces /PrimeFaces + Omnifaces на WAS 8.0.0.9

В большинстве случаев все работает нормально, но иногда я получаю следующее исключение:

java.lang.NullPointerException
        at org.apache.myfaces.shared.context.flash.FlashImpl.isKeepMessages(FlashImpl.java:388)
        at org.apache.myfaces.shared.context.flash.FlashImpl._saveMessages(FlashImpl.java:668)
        at org.apache.myfaces.shared.context.flash.FlashImpl.doPostPhaseActions(FlashImpl.java:269)
        at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:254)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:199)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
        at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97)
        at org.omnifaces.filter.FacesExceptionFilter.doFilter(FacesExceptionFilter.java:56)
        at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)

//... еще фильтры...

При взгляде на FlashImpl line388 если найдешь:

@Override
public boolean isKeepMessages()
{
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext(); //<-- line 388
    Map<String, Object> requestMap = externalContext.getRequestMap();
    Boolean keepMessages = (Boolean) requestMap.get(FLASH_KEEP_MESSAGES);

    return (keepMessages == null ? Boolean.FALSE : keepMessages);
}

Так что похоже, что нет FacesContext, Хотя (опять же после просмотра кода) он должен быть создан в FacesServlet.service дальше вверх по стеку вызовов.

Один из фильтров, который мы зарегистрировали, использует время журналов на разных фазах жизненного цикла JSF, и он жалуется, что фаза RENDER_RESPONSE запущена, хотя она уже запущена.

Ведение журнала также предполагает, что в текущем запросе запрашиваемая страница не может быть найдена, и поэтому запрашивается соответствующая страница ошибки.

Все это может произойти во время запроса Ajax, но я не уверен.

Есть идеи, что может быть причиной этой проблемы?

Я нашел этот отчет об ошибке, но не смог найти ссылку на getRequestDispatcher так что это не похоже на применение.

Я также нашел этот вопрос: исключение нулевого указателя в FlashImpl.java в IBM JSF, которое на самом деле может быть дубликатом, но поскольку у меня есть больше (возможно, релевантная) информация, которая может относиться или не относиться к другому вопросу, я подумал, что лучше создать новый один.

0 ответов

Другие вопросы по тегам