public void handle()

in deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultErrorViewAwareExceptionHandlerWrapper.java [61:140]


    public void handle() throws FacesException
    {
        lazyInit();
        Iterator<ExceptionQueuedEvent> exceptionQueuedEventIterator = getUnhandledExceptionQueuedEvents().iterator();

        while (exceptionQueuedEventIterator.hasNext())
        {
            ExceptionQueuedEventContext exceptionQueuedEventContext =
                    (ExceptionQueuedEventContext) exceptionQueuedEventIterator.next().getSource();

            @SuppressWarnings({ "ThrowableResultOfMethodCallIgnored" })
            Throwable throwable = exceptionQueuedEventContext.getException();

            String viewId = null;

            if (!isExceptionToHandle(throwable))
            {
                continue;
            }

            FacesContext facesContext = exceptionQueuedEventContext.getContext();
            Flash flash = facesContext.getExternalContext().getFlash();

            if (throwable instanceof ViewExpiredException)
            {
                viewId = ((ViewExpiredException) throwable).getViewId();
            }
            else if (throwable instanceof ContextNotActiveException)
            {
                //the error page uses a cdi scope which isn't active as well
                //(it's recorded below - see flash.put(throwable.getClass().getName(), throwable);)
                if (flash.containsKey(ContextNotActiveException.class.getName()))
                {
                    //TODO show it in case of project-stage development
                    break;
                }

                if (facesContext.getViewRoot() != null)
                {
                    viewId = facesContext.getViewRoot().getViewId();
                }
                else
                {
                    viewId = BeanProvider.getContextualReference(ViewConfigResolver.class)
                            //has to return a value otherwise this handler wouldn't be active
                            .getDefaultErrorViewConfigDescriptor().getViewId();
                }
            }

            if (viewId != null)
            {
                UIViewRoot uiViewRoot = facesContext.getApplication().getViewHandler().createView(facesContext, viewId);

                if (uiViewRoot == null)
                {
                    continue;
                }

                if (facesContext.isProjectStage(jakarta.faces.application.ProjectStage.Development) ||
                        ProjectStageProducer.getInstance().getProjectStage() == ProjectStage.Development ||
                        ProjectStageProducer.getInstance().getProjectStage() instanceof TestStage)
                {
                    throwable.printStackTrace();
                }

                facesContext.setViewRoot(uiViewRoot);
                exceptionQueuedEventIterator.remove();

                //record the current exception -> to check it at the next call or to use it on the error-page
                flash.put(throwable.getClass().getName(), throwable);
                flash.keep(throwable.getClass().getName());

                this.viewNavigationHandler.navigateTo(DefaultErrorView.class);

                break;
            }
        }

        this.wrapped.handle();
    }