jsf - com.sun.faces.config.InitFacesContext.cleanupInitMaps 中的空指针异常

标签 jsf tomcat

我无法将我的 war 文件部署到 tomcat 服务器中。我以以下异常结束。

 SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/BatchApp-1.0.0.M1]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
    at com.sun.faces.config.InitFacesContext.cleanupInitMaps(InitFacesContext.java:281)
    at com.sun.faces.config.InitFacesContext.<init>(InitFacesContext.java:107)
    at com.sun.faces.config.FacesInitializer.onStartup(FacesInitializer.java:115)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5280)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 11 more

May 11, 2013 5:28:05 PM org.apache.catalina.startup.HostConfig deployWAR
SEVERE: Error deploying web application archive C:\AppDev\Tomcat7.0\webapps\BatchApp-1.0.0.M1.war
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/BatchApp-1.0.0.M1]]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我进一步调试它,看起来像下面的代码 @getInitContextServletContextMap() com.sun.faces.config.InitFacesContext 中的方法,我最终返回了空指针。

 static Map getInitContextServletContextMap() {
    ConcurrentHashMap initContextServletContext = null;
    try {
        Field initContextMap = FacesContext.class.getDeclaredField("initContextServletContext");
        initContextMap.setAccessible(true);
        initContextServletContext = (ConcurrentHashMap)initContextMap.get(null);
    } catch (Exception e) {
        if (LOGGER.isLoggable(Level.FINEST)) {
            LOGGER.log(Level.FINEST, "Unable to get (init context, servlet context) map", e);
        }
    }
    return initContextServletContext;
}

明明是服务端在寻找“initContextServletContext”,但是要在哪里设置呢?

请告诉我如何解决这个问题。

最佳答案

有完全相同的错误。这是一个依赖性问题:我使用的是 Oracle 的 JSF (2.2.1) 实现,但我的 Maven 依赖性之一正在引入 Apache MyFaces。

您显示的来自 Oracle 实现的代码片段试图访问 FacesContext 的静态私有(private)字段。但是类加载器加载了 FacesContext 的 MyFaces 实现,它没有那个字段。因此呕吐。

检查您的依赖项。我打赌您会发现您有两个不同的版本或两个不同的 JSF 实现。

关于jsf - com.sun.faces.config.InitFacesContext.cleanupInitMaps 中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953240/

相关文章:

oracle - JDBC 类型 : -9 没有方言映射

unit-testing - 用于单元测试 Jersey Restful Web 服务的最佳 API/lib?

java - JAX-WS 和 Tomcat : storing in InitialContext not possible?

java - 将自定义字体导入 JSF

jsf - JPA 实体和/vs DTO

java - 如何使用 JSF2 处理多态性?

jsf - 在 primefaces 的新选项卡中打开菜单项页面

css - 在特定 p 上应用 CSS :dataTable component instead of on all p:dataTable components

java - 无法在 Tomcat 中运行 servlet

java - 如何以编程方式获取部署地址?