We have the error : context must not be null in VariableResolverImpl, in 
MyFaces during the execution of the system.
--------------------------------------------------------------------------------------------------------------------

                 Key: MYFACES-2218
                 URL: https://issues.apache.org/jira/browse/MYFACES-2218
             Project: MyFaces Core
          Issue Type: Bug
    Affects Versions: 1.2.3
         Environment: We are using Weblogic Server 10.0MP1, RedHat Enterprise 
Server 4, and JVM is JRockit 5.0.11
            Reporter: Eduardo Felter Simone
            Priority: Critical


We receive the following error:

24 Abr 2009 11:11:43,895 ERROR StackTrace:

java.lang.NullPointerException: context must not be null
at 
org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:47)
at 
org.apache.myfaces.el.convert.VariableResolverToELResolver.getValue(VariableResolverToELResolver.java:93)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
at 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.access$301(FacesCompositeELResolver.java:46)
at 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver$4.invoke(FacesCompositeELResolver.java:108)
at 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.invoke(FacesCompositeELResolver.java:148)
at 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:104)
at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:68)
at com.sun.el.parser.AstNot.getValue(AstNot.java:46)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192)
at 
javax.faces.component._ComponentUtils.getExpressionValue(_ComponentUtils.java:233)
at 
javax.faces.component.UIComponentBase.getExpressionValue(UIComponentBase.java:1155)
at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1225)
at 
javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:685)
at 
javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:688)
at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:238)
at org.ajax4jsf.component.AjaxViewRoot.processDecodes(AjaxViewRoot.java:409)
at 
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
at 
pt.ptinovacao.components.aeolus.web.servlet.AeolusFacesServlet.service(AeolusFacesServlet.java:148)
at 
br.com.vivo.vivo360.ui.servlet.Vivo360FacesServlet.service(Vivo360FacesServlet.java:82)
at 
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
at 
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at 
br.com.vivo.vivo360.ui.servlet.SessionExpiredFilter.doFilter(SessionExpiredFilter.java:51)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at br.com.vivo.vivo360.ui.servlet.ErrorFilter.doFilter(ErrorFilter.java:63)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at 
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at 
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at 
weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at 
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3393)
at 
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at 
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2140)
at 
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2046)
at 
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)



24 Abr 2009 11:16:09,158 ERROR StackTrace:

java.lang.NullPointerException: context must not be null
at 
org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResolverImpl.java:47)
at 
org.apache.myfaces.el.convert.VariableResolverToELResolver.getValue(VariableResolverToELResolver.java:93)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
at 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.access$301(FacesCompositeELResolver.java:46)
at 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver$4.invoke(FacesCompositeELResolver.java:108)
at 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.invoke(FacesCompositeELResolver.java:148)
at 
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:104)
at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:68)
at com.sun.el.parser.AstNot.getValue(AstNot.java:46)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192)
at 
javax.faces.component._ComponentUtils.getExpressionValue(_ComponentUtils.java:233)
at 
javax.faces.component.UIComponentBase.getExpressionValue(UIComponentBase.java:1155)
at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:1225)
at 
javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:685)
at 
javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:688)
at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:238)
at org.ajax4jsf.component.AjaxViewRoot.processDecodes(AjaxViewRoot.java:409)
at 
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
at 
pt.ptinovacao.components.aeolus.web.servlet.AeolusFacesServlet.service(AeolusFacesServlet.java:148)
at 
br.com.vivo.vivo360.ui.servlet.Vivo360FacesServlet.service(Vivo360FacesServlet.java:82)
at 
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
at 
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at 
br.com.vivo.vivo360.ui.servlet.SessionExpiredFilter.doFilter(SessionExpiredFilter.java:51)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at br.com.vivo.vivo360.ui.servlet.ErrorFilter.doFilter(ErrorFilter.java:63)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at 
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at 
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at 
weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at 
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3393)
at 
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at 
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2140)
at 
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2046)
at 
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)

After occurs the error the server do not answer JSF requests. If we try a JSP 
page the server works fine. 

If we wait the server kill all sessions by timeout, after that the server start 
to answer JSF request and come back to work normally.

It follows below the sources of filters and servlets that we use in the project:

******************************
--> Web.xml
******************************

<?xml version="1.0"?>
        <!--
                Licensed to the Apache Software Foundation (ASF) under one or 
more
                contributor license agreements. See the NOTICE file distributed 
with
                this work for additional information regarding copyright 
ownership.
                The ASF licenses this file to you under the Apache License, 
Version
                2.0 (the "License"); you may not use this file except in 
compliance
                with the License. You may obtain a copy of the License at

                http://www.apache.org/licenses/LICENSE-2.0 Unless required by
                applicable law or agreed to in writing, software distributed 
under the
                License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
OR
                CONDITIONS OF ANY KIND, either express or implied. See the 
License for
                the specific language governing permissions and limitations 
under the
                License.
        -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";>
        <display-name>vivo360</display-name>
        <context-param>
                <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
                <param-value>server</param-value>
        </context-param>
        <context-param>
                <param-name>javax.faces.CONFIG_FILES</param-name>
                <param-value>/WEB-INF/faces-config.xml,
                        /WEB-INF/migracaocdma-faces-config.xml,
                        /WEB-INF/migracaogsm-faces-config.xml,
                        /WEB-INF/habilitacao-faces-config.xml,
                        /WEB-INF/trocarplano-faces-config.xml,
                        /WEB-INF/trocaraparelhocdmapre-faces-config.xml,
                        /WEB-INF/menu-faces-config.xml,
                        /WEB-INF/venderprodutosavulsos-faces-config.xml,
                        /WEB-INF/trocarchip-faces-config.xml,
                        /WEB-INF/trocarNumero-faces-config.xml,
                        
/WEB-INF/consultaHistoricoDetalheInteracao-faces-config.xml,
                        /WEB-INF/trocarNumero-faces-config.xml,
                        /WEB-INF/manterdadoslinha-faces-config.xml,
                        /WEB-INF/atualizacaomodeloaparelho-faces-config.xml,
                        /WEB-INF/consultaextratodetalhado-faces-config.xml,
                        /WEB-INF/desbloqueiolinha-faces-config.xml,
                        /WEB-INF/consultaPuk-faces-config.xml,
                        /WEB-INF/consultarSenhasRecarga-faces-config.xml,
                        /WEB-INF/trocararearegistro-faces-config.xml,
                        /WEB-INF/desprogramarlinha-faces-config.xml,
                        /WEB-INF/historicorecarga-faces-config.xml,
                        /WEB-INF/desbloquearsimlock-faces-config.xml,
                        /WEB-INF/bloquearaparelholinha-faces-config.xml,
                        /WEB-INF/sincronizar-linha-faces-config.xml,
                        /WEB-INF/consultaNotaFiscalRecarga-faces-config.xml,
                        /WEB-INF/reuso-faces-config.xml
                        </param-value>
        </context-param>
        <context-param>
                <description>
                        If true, rendered HTML code will be formatted, so
                        that it is "human readable". i.e. additional line 
                        separators and whitespace will be written, that do
                        not influence the HTML code. Default: "true"
                </description>
                <param-name>org.apache.myfaces.PRETTY_HTML</param-name>
                <param-value>false</param-value>
        </context-param>
        <context-param>
                <param-name>org.apache.myfaces.USE_ENCRYPTION</param-name>
                <param-value>false</param-value>
        </context-param>
        <context-param>
                <description>
                        Validate managed beans, navigation rules and
                        ensure that forms are not nested.
                </description>
                <param-name>org.apache.myfaces.VALIDATE</param-name>
                <param-value>false</param-value>
        </context-param>

        <context-param>
                
<param-name>org.apache.myfaces.COMPRESS_STATE_IN_SESSION</param-name>
                <param-value>false</param-value>
        </context-param>
        <context-param>
                
<param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
                <param-value>false</param-value>
        </context-param>
        <context-param>
                
<param-name>org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION</param-name>
                <param-value>60</param-value>
        </context-param>
        <context-param>
                
<param-name>org.apache.myfaces.NUMBER_OF_LOGICAL_VIEWS</param-name>
                <param-value>20</param-value>
        </context-param>
        <context-param>
                <param-name>org.richfaces.SKIN</param-name>
                <param-value>DEFAULT</param-value>
        </context-param>
        
        <!-- Configurações do Spring -->
        <context-param>
                <param-name>contextConfigLocation</param-name>
                
<param-value>classpath:/spring/nfo-application-context.xml</param-value>
        </context-param>
        <context-param>
                <param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
                <param-value>false</param-value>
        </context-param>

        <filter>
                <filter-name>ajax4jsf</filter-name>
                <filter-class>org.ajax4jsf.webapp.TidyFilter</filter-class>
                <init-param>
                        <param-name>forceparser</param-name>
                        <param-value>false</param-value>
                </init-param>
        </filter>

        <filter>
                <filter-name>MyFacesExtensionsFilter</filter-name>
                
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
        </filter>
        <filter>
                <filter-name>ErrorFilter</filter-name>
                
<filter-class>br.com.vivo.vivo360.ui.servlet.ErrorFilter</filter-class>
                <init-param>
                        <param-name>errorPage</param-name>
                        <param-value>/jsp/erro/Erro.jsf</param-value>
                </init-param>
        </filter>
        <filter>
                <filter-name>SessionExpiredFilter</filter-name>
                
<filter-class>br.com.vivo.vivo360.ui.servlet.SessionExpiredFilter</filter-class>
                <init-param>
                        <param-name>sessionExpiredPage</param-name>
                        <param-value>/jsp/inicio/Autenticacao.jsf</param-value>
                </init-param>
        </filter>
        <filter>
                <filter-name>Cache Resource</filter-name>
                
<filter-class>br.com.vivo.vivo360.ui.servlet.CacheResourceFilter</filter-class>
                <init-param>
                        <param-name>hourToExpire</param-name>
                        <param-value>8</param-value>
                </init-param>
        </filter>
        <filter-mapping>
                <filter-name>Cache Resource</filter-name>
                <url-pattern>*.js</url-pattern>
                <url-pattern>*.gif</url-pattern>
                <url-pattern>*.css</url-pattern>
                <url-pattern>*.jpg</url-pattern>
                <url-pattern>*.xcss</url-pattern>
                <dispatcher>REQUEST</dispatcher>
                <dispatcher>FORWARD</dispatcher>
                <dispatcher>INCLUDE</dispatcher>
        </filter-mapping>


        <filter-mapping>
                <filter-name>ajax4jsf</filter-name>
                <servlet-name>Faces Servlet</servlet-name>
                <dispatcher>REQUEST</dispatcher>
                <dispatcher>FORWARD</dispatcher>
                <dispatcher>INCLUDE</dispatcher>
        </filter-mapping>
        <filter-mapping>
                <filter-name>MyFacesExtensionsFilter</filter-name>
                <servlet-name>Faces Servlet</servlet-name>
                <dispatcher>REQUEST</dispatcher>
                <dispatcher>FORWARD</dispatcher>
                <dispatcher>INCLUDE</dispatcher>
        </filter-mapping>
        <filter-mapping>
                <filter-name>ErrorFilter</filter-name>
                <servlet-name>Faces Servlet</servlet-name>
                <dispatcher>REQUEST</dispatcher>
                <dispatcher>FORWARD</dispatcher>
                <dispatcher>INCLUDE</dispatcher>
        </filter-mapping>
        <filter-mapping>
                <filter-name>SessionExpiredFilter</filter-name>
                <servlet-name>Faces Servlet</servlet-name>
                <dispatcher>REQUEST</dispatcher>
                <dispatcher>FORWARD</dispatcher>
                <dispatcher>INCLUDE</dispatcher>
        </filter-mapping>

        <listener>
                
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <listener>
                <listener-class>
                        
org.springframework.web.context.request.RequestContextListener</listener-class>
        </listener>
        <listener>
                <listener-class>
                        
br.com.vivo.vivo360.ui.listener.Vivo360SessionListener</listener-class>
        </listener>
        <!-- Faces Servlet -->
        <servlet>
                <servlet-name>Faces Servlet</servlet-name>
                
<servlet-class>br.com.vivo.vivo360.ui.servlet.Vivo360FacesServlet</servlet-class>
                <init-param>
                        <param-name>errorPage</param-name>
                        <param-value>/jsp/erro/Erro.jsf</param-value>
                </init-param>
                <init-param>
                        <param-name>authenticationPage</param-name>
                        <param-value>/jsp/inicio/Autenticacao.jsf</param-value>
                </init-param>
                <init-param>
                        <param-name>changePasswordPage</param-name>
                        <param-value>/jsp/inicio/TrocarSenha.jsf</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>
        </servlet>
        <!-- Faces Servlet Mapping -->
        <servlet-mapping>
                <servlet-name>Faces Servlet</servlet-name>
                <url-pattern>*.jsf</url-pattern>
        </servlet-mapping>
        <session-config>
                <session-timeout>10</session-timeout>
        </session-config>
        <welcome-file-list>
                <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        <login-config>
                <auth-method>BASIC</auth-method>
        </login-config>

</web-app>

*******************************
--> AeolusFacesServlet
*******************************

/**
 * Projeto: VIVO360
 * CustomServlet.java
 * Descrição: Servlet que substitui o Servlet Padrão do Faces.
 *
 *...@author     <a href="mailto:sdcs-d-garg...@ptinovacao.pt";>Diego S 
Gargaro</a>
 *...@created    Jun 17, 2008
 *...@version    $Id: AeolusFacesServlet.java,v 1.10 2009/04/16 13:00:02 
xsdc743 Exp $
 */
package pt.ptinovacao.components.aeolus.web.servlet;

import java.io.IOException;

import javax.faces.FactoryFinder;
import javax.faces.webapp.FacesServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.myfaces.shared_impl.webapp.webxml.DelegatedFacesServlet;

import pt.ptinovacao.components.aeolus.web.session.AeolusSessionManager;

/**
 * @author Diego S Gargaro
 */
public class AeolusFacesServlet extends HttpServlet implements
                DelegatedFacesServlet {

        /**
     * Objeto que contém as propriedades do log4j para criar o log.
     */
    private static final Logger LOGGER = 
Logger.getLogger(AeolusFacesServlet.class);
        
        /**
         * Serial.
         */
        private static final long serialVersionUID = 1L;

        /**
         * Nome do parâmetro a ser buscado no web.xml que conterá o valor da 
página
         * de autenticação.
         */
        private static final String INIT_PARAM_AUTHENTICATION_PAGE = 
"authenticationPage";

        /**
         * Nome do parâmetro a ser buscado no web.xml que conterá o valor da 
página
         * de troca de senha.
         */
        private static final String INIT_PARAM_CHANGE_PASSWORD_PAGE = 
"changePasswordPage";



        /**
         * Servlet do Faces.
         */
        private FacesServlet delegate;

        /**
         * URL da página de autenticação à partir do contextPath.
         */
        private String authenticationPage;

        /**
         * URL da página de troca de senha à partir do contextPath.
         */
        private String changePasswordPage;

        /**
         * {...@inheritdoc}
         */
        public void init(final ServletConfig servletConfig) throws 
ServletException {
                delegate = new FacesServlet();

                // ******** Necessário à partir da versão 1.2 do MyFaces 
********
                // -------- Configura manualmente cada factory 
------------------
                FactoryFinder.setFactory(FactoryFinder.FACES_CONTEXT_FACTORY,
                                
"org.apache.myfaces.context.FacesContextFactoryImpl");
                FactoryFinder.setFactory(FactoryFinder.LIFECYCLE_FACTORY,
                                
"org.apache.myfaces.lifecycle.LifecycleFactoryImpl");
                FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
                                
"org.apache.myfaces.application.ApplicationFactoryImpl");
                FactoryFinder.setFactory(FactoryFinder.RENDER_KIT_FACTORY,
                                
"org.apache.myfaces.renderkit.RenderKitFactoryImpl");
                // 
**************************************************************

                delegate.init(servletConfig);

                authenticationPage = servletConfig
                                
.getInitParameter(INIT_PARAM_AUTHENTICATION_PAGE);

                if (authenticationPage == null) {
                        throw new ServletException("must set '"
                                        + INIT_PARAM_AUTHENTICATION_PAGE
                                        + "' parameter in AeolusFacesServlet");
                }

                changePasswordPage = servletConfig
                                
.getInitParameter(INIT_PARAM_CHANGE_PASSWORD_PAGE);

                if (changePasswordPage == null) {
                        throw new ServletException("must set '"
                                        + INIT_PARAM_CHANGE_PASSWORD_PAGE
                                        + "' parameter in AeolusFacesServlet");
                }

        }

        /**
         * {...@inheritdoc}
         */
        public void destroy() {
            if (LOGGER.isDebugEnabled()) {
            LOGGER.debug(" Fim do servlet do MyFaces. Nome da instância: " + 
delegate.getServletConfig().getServletName()
                        + ", Configuração do Servlet: " + 
delegate.getServletInfo());
            }
                delegate.destroy();
        }

        /**
         * {...@inheritdoc}
         */
        public ServletConfig getServletConfig() {
                return delegate.getServletConfig();
        }

        /**
         * {...@inheritdoc}
         */
        public String getServletInfo() {
                return delegate.getServletInfo();
        }

        /**
         * {...@inheritdoc}
         */
        public void service(final ServletRequest request,
                        final ServletResponse response) throws ServletException,
                        IOException {

                if (isUserLogged((HttpServletRequest) request,
                                (HttpServletResponse) response)) {
                        delegate.service(request, response);
                } else {
                                
redirectToAuthenticationPage((HttpServletRequest) request,
                                                (HttpServletResponse) response);
                }
        }

        /**
         * Checa se o usuario está logado.
         * 
         * @param request
         *            Objeto HttpServletRequest.
         * @param response
         *            Objeto HttpServletResponse.
         * @throws IOException
         *             IOException.
         * @return True caso o usuário esteja autenticado ou seja a pagina de 
login
         *         ou troca de senha.
         */
        protected boolean isUserLogged(final HttpServletRequest request,
                        final HttpServletResponse response) throws IOException {
                // Verifica se o contexto é nulo e se nao são as paginas de 
login e
                // troca de senha
                if (!(request.getServletPath().equals(authenticationPage) || 
request
                                .getServletPath().equals(changePasswordPage))
                                && 
AeolusSessionManager.getInstance().getDefaultAeolusSession(
                                                
request.getSession(true)).getAeolusUserContext() == null) {
                    if (LOGGER.isDebugEnabled()) {
                        LOGGER.debug(" Sessão vazia. " + 
request.getRequestedSessionId());
                    }
                        return false;
                }
                
                if (AeolusSessionManager.getInstance().getDefaultAeolusSession(
                                
request.getSession(true)).getAeolusUserContext() != null) {
                    if (LOGGER.isDebugEnabled()) {
                        LOGGER.debug(" ID da Sessão = " + 
request.getRequestedSessionId()
                                        + "Dados do Usuário: " + 
AeolusSessionManager.getInstance().getDefaultAeolusSession(
                                                        
request.getSession(true)).getAeolusUserContext().getUserName());
                    }
                } else {
                    if (LOGGER.isDebugEnabled()) {
                        LOGGER.debug(" ID da Sessão = " + 
request.getRequestedSessionId());
                    }
                }
                return true;
        }

        /**
         * Direciona o sistema para a tela de autenticação.
         * 
         * @param request
         *            Objeto HttpServletRequest.
         * @param response
         *            Objeto HttpServletResponse.
         * @throws IOException
         *             IOException.
         */
        protected void redirectToAuthenticationPage(
                        final HttpServletRequest request, final 
HttpServletResponse response)
                        throws IOException {
                if (!"".equals(authenticationPage)) {
                        response.sendRedirect(request.getContextPath() + 
authenticationPage);
                }
        }

}

************************************
--> Vivo360FacesServlet
***********************************

/**
 * Projeto: VIVO360
 * Vivo360FacesServlet.java
 * Descrição: Servlet para o projeto Vivo360 que estende o AeolusFacesServlet.
 *
 *...@author     <a href="mailto:sdcs-d-garg...@ptinovacao.pt";>Diego S 
Gargaro</a>
 *...@created    14/08/2008
 *...@version    $Id: Vivo360FacesServlet.java,v 1.14 2009/04/17 17:09:02 
xsdc743 Exp $
 */
package br.com.vivo.vivo360.ui.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.ajax4jsf.context.AjaxContext;
import org.apache.log4j.Level;

import pt.ptinovacao.components.aeolus.web.servlet.AeolusFacesServlet;
import pt.ptinovacao.components.aeolus.web.session.AeolusSession;
import br.com.vivo.vivo360.commons.exception.Vivo360ApplicationException;
import br.com.vivo.vivo360.commons.util.ErrorUtils;
import br.com.vivo.vivo360.commons.util.LogUtils;
import br.com.vivo.vivo360.commons.util.context.ContextUtils;
import br.com.vivo.vivo360.util.constant.error.infra.ConstantsTratamentoErro;

/**
 * @author Diego S Gargaro
 *
 */
public class Vivo360FacesServlet extends AeolusFacesServlet {

    /**
     * Serial.
     */
    private static final long serialVersionUID = 1L;

    /**
     * Nome do parâmetro a ser buscado no web.xml que conterá o valor da página
     * de erro.
     */
    private static final String INIT_PARAM_ERROR_PAGE = "errorPage";

    /**
     * URL da página de erro à partir do contextPath.
     */
    private String errorPage;

    /**
     * {...@inheritdoc}
    */
    @Override
    public void init(
            final ServletConfig servletConfig)
        throws ServletException {

        super.init(servletConfig);
        errorPage = servletConfig.getInitParameter(INIT_PARAM_ERROR_PAGE);
        if (errorPage == null) {
            throw new ServletException("É necessário configurar o parâmetro '" 
+ INIT_PARAM_ERROR_PAGE
                    + "' no Vivo360FacesServlet");
        }
    }

    /**
     * {...@inheritdoc}
    */
    @Override
    public void service(
            final ServletRequest request,
            final ServletResponse response)
        throws ServletException, IOException {
        AeolusSession aeolusSession = (AeolusSession) ((HttpServletRequest) 
request).getSession().getAttribute(
                
"pt.ptinovacao.components.aeolus.web.session.defaultSessionName");
        try {
            this.configNoCacheRespone((HttpServletResponse) response);
            super.service(request, response);

            //Remove o identificador de quando o sistema está posicionado na 
tela de erro.
            if (((HttpServletRequest) 
request).getSession().getAttribute(ConstantsTratamentoErro.KEY_IS_ERROR_PAGE) 
!= null) {
                //Se for a request do redirect para a tela de erro.
                if ((Boolean) ((HttpServletRequest) 
request).getSession().getAttribute(ConstantsTratamentoErro.KEY_IS_ERROR_PAGE)) {
                    Boolean isErrorPage = Boolean.FALSE;
                    ((HttpServletRequest) 
request).getSession().setAttribute(ConstantsTratamentoErro.KEY_IS_ERROR_PAGE,
                            isErrorPage);
                } else {
                    ((HttpServletRequest) 
request).getSession().removeAttribute(ConstantsTratamentoErro.KEY_IS_ERROR_PAGE);
                }
            }

        } catch (ServletException servletException) {
            Boolean isAjax = false;
            if ((AjaxContext) 
request.getAttribute(AjaxContext.AJAX_CONTEXT_KEY) != null) {
                isAjax = ((AjaxContext) 
request.getAttribute(AjaxContext.AJAX_CONTEXT_KEY)).isAjaxRequest();
            }

            this.logError(servletException.getRootCause(), (HttpServletRequest) 
request);

            if (isAjax) {
                throw servletException;
            } else {
                //Verifica se o sistema já está posicionado na tela de erro.
                if (isUserLogged((HttpServletRequest) request, 
(HttpServletResponse) response)
                        && ((HttpServletRequest) 
request).getSession().getAttribute(ConstantsTratamentoErro.KEY_IS_ERROR_PAGE) 
== null) {
                    //Se não estiver, manda para a tela de erro.
                    ((HttpServletRequest) 
request).getSession().setAttribute(ConstantsTratamentoErro.KEY_IS_ERROR_PAGE, 
true);
                    //Verifica se o erro foi tratado.
                    if 
(request.getAttribute(ConstantsTratamentoErro.ERRO_TRATADO_KEY) == null) {
                        //Se não foi, inclui esse erro no tratamento de erros.
                        
ErrorUtils.getInstance().addCommonError((HttpServletRequest) request, 
servletException.getRootCause(),
                                
ConstantsTratamentoErro.ERRO_COMMON_DEFAULT_KEY);
                    }
                    redirectToErrorPage((HttpServletRequest) request, 
(HttpServletResponse) response);
                } else {
                    //Se estiver, não trata a exceção.
                    ((HttpServletRequest) 
request).getSession().removeAttribute(ConstantsTratamentoErro.KEY_IS_ERROR_PAGE);
                    throw servletException;
                }
            }
        }
    }

    /**
     * Direciona o sistema para a tela de erro.
     * @param request Objeto HttpServletRequest.
     * @param response Objeto HttpServletResponse.
     * @throws IOException IOException.
     */
    protected void redirectToErrorPage(
            final HttpServletRequest request,
            final HttpServletResponse response)
        throws IOException {
        if (!"".equals(errorPage)) {
            response.sendRedirect(request.getContextPath() + errorPage);
        }
    }

    private void configNoCacheRespone(
            HttpServletResponse response) {
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");
        response.setDateHeader("Expires", -1);
    }

    private void logError(
            final Throwable throwable,
            final HttpServletRequest request) {
        
        Throwable causeThrowable = buscaVivo360Exception(throwable);
        
        if (!(causeThrowable instanceof Vivo360ApplicationException)) {
            causeThrowable = throwable;
        }

        boolean doLog = true;
        if (causeThrowable instanceof Vivo360ApplicationException) {
            if (((Vivo360ApplicationException) 
causeThrowable).getErroInfoBean() != null) {
                doLog = !((Vivo360ApplicationException) 
causeThrowable).getErroInfoBean().isLogged();
            }
        }

        if (doLog) {
            StringBuilder stringBuilder = new StringBuilder("Ocorreu um erro na 
camada de apresentação, segue detalhes:");
            
stringBuilder.append(LogUtils.getInstance().getDetalheCabecalhoUsuario(request));
            
stringBuilder.append(LogUtils.getInstance().getDetalheDaException(causeThrowable));
            LogUtils.getInstance().logMessage(stringBuilder.toString(), 
Level.ERROR);
            LogUtils.getInstance().logThrowable(causeThrowable);
        }
    }
    
    private Throwable buscaVivo360Exception(final Throwable throwable) {
        if (throwable instanceof Vivo360ApplicationException) {
            return throwable;
        }
        if (throwable.getCause() != null) {
            return buscaVivo360Exception(throwable.getCause());
        }
        return throwable;
    }
}

This problem is critical because this occurs in production.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to