define a lifecycle-factory class in faces config to catch any exception
Dear All
I define a lifecycle-factory class in faces config to catch any exception then forward it to an error page my code as the following :
=======================================
<factory>
<lifecycle-factory>com.etech.web.sfdaprocesses.test.TestADFFacesLifeCycleFactory</lifecycle-factory>
</factory>
=======================================
public class TestADFFacesLifeCycleFactory extends LifecycleFactoryImpl {
private Map<String, Lifecycle> cache;
public TestADFFacesLifeCycleFactory() {
cache = new HashMap<String, Lifecycle>(3);
}
public Lifecycle getLifecycle(String lifecycleId) {
Lifecycle lifecycle = cache.get(lifecycleId);
if (lifecycle == null) {
lifecycle = super.getLifecycle(lifecycleId);
if (lifecycle == null) {
return null;
}
lifecycle = new TestFacesLifecycleDecorator(lifecycle);
cache.put(lifecycleId, lifecycle);
}
return lifecycle;
}
}
===============================================
public class TestFacesLifecycleDecorator extends Lifecycle {
private Lifecycle wrapped;
public TestFacesLifecycleDecorator(Lifecycle wrapped) {
this.wrapped = wrapped;
}
public void execute(FacesContext context) {
try {
wrapped.execute(context);
} catch (Exception e) {
e.printStackTrace();
handelExcption(context,e);
}
}
public void render(FacesContext context) {
try {
wrapped.render(context);
} catch (Exception e) {
e.printStackTrace();
handelExcption(context,e);
}
}
public void addPhaseListener(PhaseListener listener) {
wrapped.addPhaseListener(listener);
}
public void removePhaseListener(PhaseListener listener) {
wrapped.removePhaseListener(listener);
}
public PhaseListener[] getPhaseListeners() {
return wrapped.getPhaseListeners();
}
private void handelExcption(FacesContext context,Exception ex) {
FacesContext fcontext = FacesContext.getCurrentInstance();
//MessageUtilities.createErrorMessage(ex.getMessage());
context.getExternalContext().getRequestMap().put("ErrorMSG", ex.getMessage());
fcontext.getApplication().getNavigationHandler().handleNavigation(context, null, "errorPage");
}
=====================================================================
My problem is when the page is start it throw the following exception but if i remove the lifecycle-factory class defintion from faces config it works:
java.lang.NullPointerException
at javax.faces.event.PhaseId.compareTo(PhaseId.java:97)
at oracle.adfinternal.view.faces.context.RichPhaseListener._queueTaskForPhase(RichPhaseListener.java:163)
at oracle.adfinternal.view.faces.context.RichPhaseListener.queueTaskForBeforePhase(RichPhaseListener.java:139)
at oracle.adfinternal.view.faces.context.AdfFacesContextImpl.queueTaskForBeforePhase(AdfFacesContextImpl.java:80)
at oracle.adf.view.rich.component.rich.layout.RichPanelAccordion.getEventPPRTask(RichPanelAccordion.java:255)
at oracle.adf.view.rich.component.rich.layout.RichPanelAccordion.queueEvent(RichPanelAccordion.java:233)
at org.apache.myfaces.trinidad.component.UIXComponentBase.queueEvent(UIXComponentBase.java:784)
at org.apache.myfaces.trinidad.component.UIXShowDetail.queueEvent(UIXShowDetail.java:173)
at javax.faces.event.FacesEvent.queue(FacesEvent.java:130)
at oracle.adfinternal.view.faces.renderkit.rich.ShowDisclosureRenderer.decodeInternal(ShowDisclosureRenderer.java:72)
at oracle.adfinternal.view.faces.renderkit.rich.ShowDetailItemRenderer.decodeInternal(ShowDetailItemRenderer.java:69)
at oracle.adf.view.rich.render.RichRenderer.decode(RichRenderer.java:293)
at org.apache.myfaces.trinidad.component.UIXComponentBase.__rendererDecode(UIXComponentBase.java:1107)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decode(UIXComponentBase.java:701)
at org.apache.myfaces.trinidad.component.UIXShowDetail.processDecodes(UIXShowDetail.java:98)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildrenImpl(UIXComponentBase.java:988)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildren(UIXComponentBase.java:974)
at org.apache.myfaces.trinidad.component.UIXComponentBase.processDecodes(UIXComponentBase.java:799)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildrenImpl(UIXComponentBase.java:988)
at oracle.adf.view.rich.component.fragment.UIXRegion.decodeChildrenImpl(UIXRegion.java:554)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildren(UIXComponentBase.java:974)
at org.apache.myfaces.trinidad.component.UIXComponentBase.processDecodes(UIXComponentBase.java:799)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildrenImpl(UIXComponentBase.java:988)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildren(UIXComponentBase.java:974)
at org.apache.myfaces.trinidad.component.UIXForm.processDecodes(UIXForm.java:75)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildrenImpl(UIXComponentBase.java:988)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildren(UIXComponentBase.java:974)
at org.apache.myfaces.trinidad.component.UIXComponentBase.processDecodes(UIXComponentBase.java:799)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1026)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:540)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at com.etech.web.sfdaprocesses.test.TestFacesLifecycleDecorator.execute(TestFacesLifecycleDecorator.java:18)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:191)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:97)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:420)
at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:420)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:247)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:157)
at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.wls.DMSServletFilter.doFilter(DMSServletFilter.java:326)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3592)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2202)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2108)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1432)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
<Phase><doPhase> JSF1054: (Phase ID: APPLY_REQUEST_VALUES 2, View ID: /index.jspx) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@10be5b]
javax.faces.FacesException
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:86)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at com.etech.web.sfdaprocesses.test.TestFacesLifecycleDecorator.execute(TestFacesLifecycleDecorator.java:18)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:191)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:97)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:420)
at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:420)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:247)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:157)
at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.wls.DMSServletFilter.doFilter(DMSServletFilter.java:326)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3592)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2202)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2108)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1432)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Caused by: java.lang.NullPointerException
at javax.faces.event.PhaseId.compareTo(PhaseId.java:97)
at oracle.adfinternal.view.faces.context.RichPhaseListener._queueTaskForPhase(RichPhaseListener.java:163)
at oracle.adfinternal.view.faces.context.RichPhaseListener.queueTaskForBeforePhase(RichPhaseListener.java:139)
at oracle.adfinternal.view.faces.context.AdfFacesContextImpl.queueTaskForBeforePhase(AdfFacesContextImpl.java:80)
at oracle.adf.view.rich.component.rich.layout.RichPanelAccordion.getEventPPRTask(RichPanelAccordion.java:255)
at oracle.adf.view.rich.component.rich.layout.RichPanelAccordion.queueEvent(RichPanelAccordion.java:233)
at org.apache.myfaces.trinidad.component.UIXComponentBase.queueEvent(UIXComponentBase.java:784)
at org.apache.myfaces.trinidad.component.UIXShowDetail.queueEvent(UIXShowDetail.java:173)
at javax.faces.event.FacesEvent.queue(FacesEvent.java:130)
at oracle.adfinternal.view.faces.renderkit.rich.ShowDisclosureRenderer.decodeInternal(ShowDisclosureRenderer.java:72)
at oracle.adfinternal.view.faces.renderkit.rich.ShowDetailItemRenderer.decodeInternal(ShowDetailItemRenderer.java:69)
at oracle.adf.view.rich.render.RichRenderer.decode(RichRenderer.java:293)
at org.apache.myfaces.trinidad.component.UIXComponentBase.__rendererDecode(UIXComponentBase.java:1107)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decode(UIXComponentBase.java:701)
at org.apache.myfaces.trinidad.component.UIXShowDetail.processDecodes(UIXShowDetail.java:98)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildrenImpl(UIXComponentBase.java:988)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildren(UIXComponentBase.java:974)
at org.apache.myfaces.trinidad.component.UIXComponentBase.processDecodes(UIXComponentBase.java:799)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildrenImpl(UIXComponentBase.java:988)
at oracle.adf.view.rich.component.fragment.UIXRegion.decodeChildrenImpl(UIXRegion.java:554)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildren(UIXComponentBase.java:974)
at org.apache.myfaces.trinidad.component.UIXComponentBase.processDecodes(UIXComponentBase.java:799)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildrenImpl(UIXComponentBase.java:988)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildren(UIXComponentBase.java:974)
at org.apache.myfaces.trinidad.component.UIXForm.processDecodes(UIXForm.java:75)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildrenImpl(UIXComponentBase.java:988)
at org.apache.myfaces.trinidad.component.UIXComponentBase.decodeChildren(UIXComponentBase.java:974)
at org.apache.myfaces.trinidad.component.UIXComponentBase.processDecodes(UIXComponentBase.java:799)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1026)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:540)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
... 31 more
please advice.
Regards
wish79