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:[email protected]">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:[email protected]">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.