org.omnifaces.facesviews.FacesViewsForwardingFilter 处的 NullPointerException

Posted

技术标签:

【中文标题】org.omnifaces.facesviews.FacesViewsForwardingFilter 处的 NullPointerException【英文标题】:NullPointerException at org.omnifaces.facesviews.FacesViewsForwardingFilter 【发布时间】:2015-04-12 05:29:39 【问题描述】:

我在 WildFly 8.2 上运行 Java EE 7 应用程序。我使用 OmniFaces 1.8.1。 我在与FacesViewsForwardingFilter 相关的日志文件NullPointerExceptions 中看到:

2015-02-11 15:42:22,870 ERROR [io.undertow.request] (default task-12) UT005023: Exception handling request to /login: java.lang.NullPointerException
        at org.omnifaces.facesviews.FacesViewsForwardingFilter.doFilter(FacesViewsForwardingFilter.java:122) [omnifaces-1.8.1.jar:1.8.1-20140603]
        at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77) [omnifaces-1.8.1.jar:1.8.1-20140603]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
2015-02-11 15:42:31,524 ERROR [io.undertow.request] (default task-15) UT005023: Exception handling request to /search.xhtml: java.lang.NullPointerException
        at org.omnifaces.facesviews.FacesViewsForwardingFilter.doFilter(FacesViewsForwardingFilter.java:153) [omnifaces-1.8.1.jar:1.8.1-20140603]
        at org.omnifaces.filter.HttpFilter.doFilter(HttpFilter.java:77) [omnifaces-1.8.1.jar:1.8.1-20140603]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]

在服务器启动期间,我看到了这个:

2015-02-11 12:28:35,667 ERROR [io.undertow.request] (default task-3) UT005023: Exception handling request to /terms/index: java.lang.IllegalStateException: Illegal attempt to set ViewHandler after a response has been rendered.
        at com.sun.faces.application.ApplicationImpl.setViewHandler(ApplicationImpl.java:583) [jsf-impl-2.2.8-jbossorg-1.jar:]
        at javax.faces.application.ApplicationWrapper.setViewHandler(ApplicationWrapper.java:288) [jboss-jsf-api_2.2_spec-2.2.8.jar:2.2.8]
        at org.jboss.as.jsf.injection.weld.ForwardingApplication.setViewHandler(ForwardingApplication.java:367) [wildfly-jsf-injection-8.2.0.Final.jar:8.2.0.Final]
        at org.omnifaces.facesviews.FacesViewsForwardingFilter.init(FacesViewsForwardingFilter.java:95) [omnifaces-1.8.1.jar:1.8.1-20140603]
        at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:111) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
        at org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:85)

web.xml中的相关配置为:

<servlet>
    <servlet-name>facesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.html</url-pattern>
    <url-pattern>*.xhtml</url-pattern>
    <url-pattern>/javax.faces.resource/*</url-pattern>
</servlet-mapping>
<context-param>
    <param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name>
    <param-value>/*.xhtml</param-value>
</context-param>

这是怎么引起的,我该如何解决?

【问题讨论】:

什么时候会出现这些异常?你的意思是说,当 OmniFaces 被移除后,你运行应用程序就完全没有问题了? 这表明过滤器的init() 失败。您是否检查过服务器的启动日志以寻找可能与此相关的线索?你究竟是如何在web.xml 中配置 FacesViews 相关的上下文参数(如果有的话)? @Tiny 我无法删除omnifaces,因为我的应用程序大量使用它。这些异常只显示在日志文件中,我现在正在尝试确定何时。我认为它与过期的会话有关,但我仍然无法重现它。我通过 web.xml 和 faces-config.xml 的内容扩展了我的帖子。 【参考方案1】:

那些 NPE 表明过滤器的初始化失败。在服务器启动期间,您应该能够在日志的早期找到线索。

2015-02-11 12:28:35,667 错误 [io.undertow.request](默认任务 3)UT005023:对 /terms/index 的异常处理请求:java.lang.IllegalStateException:非法尝试设置 ViewHandler 之后已呈现响应。

IllegalStateException 是一个有用的提示。 FacesViewsViewHandler 在 OmniFaces 1.x 中通过 FacesViewsForwardingFilter 在第一次请求匹配 /*.xhtml 的 URL 时延迟初始化。但是,如果在过滤器之前调用FacesServlet,则会因该异常而失败。你有一个可疑的*.html 映射,它会触发FacesServlet 而不会触发过滤器。你有一个普通的 HTML 页面作为欢迎文件吗?为什么不将其重命名为*.xhtml

无论如何,该初始化排序错误是 OmniFaces 2.0 中的 fixed。所以,应该升级。

【讨论】:

以上是关于org.omnifaces.facesviews.FacesViewsForwardingFilter 处的 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章