HTTP状态500 - oracle.adfinternal.controller.faces.context.StubJSFPageLifecycleContext无法强制转换为

时间:2015-05-05 11:46:13

标签: tomcat oracle-adf jdeveloper

我们正在使用Oracle ADF(jdeveloper 11.1.2.4)开发Web应用程序。我们需要在tomcat6.x上运行这些应用程序。我们使用帖子ADF Essentials on tomcat设置了我们的tomcat6.x环境。

我们只能在tomcat上运行一个应用程序。意味着如果我们只部署一个应用程序,它在浏览器上成功运行,一切都很好。每当我们尝试部署多个应用程序时,tomcat服务器控制台上都不会出现异常。

但是当我们尝试打开http://localhost:1234/E/faces/j.jsf之类的任何页面时,它会发出以下错误。

HTTP Status 500 - oracle.adfinternal.controller.faces.context.StubJSFPageLifecycleContext cannot be cast to oracle.adf.controller.faces.context.FacesPageLifecycleContext
exception

java.lang.ClassCastException: oracle.adfinternal.controller.faces.context.StubJSFPageLifecycleContext cannot be cast to oracle.adf.controller.faces.context.FacesPageLifecycleContext
    oracle.adfinternal.controller.application.model.UpdateBindingListener.beforePhase(UpdateBindingListener.java:66)
    oracle.adfinternal.controller.lifecycle.ADFLifecycleImpl$PagePhaseListenerWrapper.beforePhase(ADFLifecycleImpl.java:550)
    oracle.adfinternal.controller.lifecycle.LifecycleImpl.internalDispatchBeforeEvent(LifecycleImpl.java:100)
    oracle.adfinternal.controller.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:191)
    oracle.adfinternal.controller.faces.lifecycle.ADFPhaseListener.access$200(ADFPhaseListener.java:23)
    oracle.adfinternal.controller.faces.lifecycle.ADFPhaseListener$PhaseInvokerImpl.startPageLifecycle(ADFPhaseListener.java:232)
    oracle.adfinternal.controller.faces.lifecycle.ADFPhaseListener$1.after(ADFPhaseListener.java:274)
    oracle.adfinternal.controller.faces.lifecycle.ADFPhaseListener.afterPhase(ADFPhaseListener.java:75)
    oracle.adfinternal.controller.faces.lifecycle.ADFLifecyclePhaseListener.afterPhase(ADFLifecyclePhaseListener.java:53)
    oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:447)
    oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:202)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)
    oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:173)
    oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:125)
    org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:468)
    oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
    org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:468)
    org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:293)
    org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:199)
    org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)

请帮助我们。我们必须在tomcat 6.x上部署并成功运行多个adf应用程序。

2 个答案:

答案 0 :(得分:0)

可能与此处发布的问题相同:https://community.oracle.com/thread/724037?start=15&tstart=0

简而言之,正确答案是:

  

我不能肯定地说,但这听起来像你有相同的库   放在web应用程序库文件夹和Tomcat中常见   库目录。根据您放置这些库的位置,它们   将由应用程序类加载器或父Tomcat加载   类加载器。换句话说,我相信你有一个图书馆   由webapplication的lib文件夹加载而不是将其加载到   父类加载器。    - 弗罗林

答案 1 :(得分:0)

我注意到,由于FacesInitializer(SCI ServletContainerInitializer)作为Tomcat根加载程序的一部分被加载,因此该异常也将/也可能出现在Tomcat 9+上。这将“混淆” ADF Faces应用程序,并导致ClassCastException。

对此的一种可能的解决方法是进入jsf-impl并注释掉META-INF/services/javax.servlet.ServletContainerInitializer的内容或完全删除此文件。