org.apache.myfaces.el.VariableResolverImpl throws
java.lang.IllegalStateException when it unsets the scope as null
------------------------------------------------------------------------------------------------------------------
Key: MYFACES-3166
URL: https://issues.apache.org/jira/browse/MYFACES-3166
Project: MyFaces Core
Issue Type: Bug
Affects Versions: 1.2.8
Environment: Linux
Geronimo 2.1.7
Reporter: Mohan Reddy
I am running an application in Geronimo 2.1.7 that requires valid scope and it
fails with the following exception
Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: unknown scope defined: null
at
org.apache.myfaces.el.VariableResolverImpl.resolveVariable(VariableResol
verImpl.java:71)
at
org.apache.myfaces.el.convert.VariableResolverToELResolver.getValue(Vari
ableResolverToELResolver.java:93)
at
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
---------------
---------------
Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
at
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.access$3
01(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(F
acesCompositeELResolver.java:148)
at
org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue
(FacesCompositeELResolver.java:104)
at
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
After investigating on codebase i see that the following is the code snippet
where one thread sets the scope and some other thread on the same context
unsets scope to null before a call made to
org.apache.myfaces.el.VariableResolverImpl.resolveVariable and it leads the
above exception
try
{
setScope(requestMap);
super.setValue(context, base, property, val);
}
finally
{
unsetScope(requestMap);
}
So to fix the scope i have changed the following code snippet in the
FacesCompositeELResolver to put back previous scope value
try
{
tmpScope = getScope(requestMap);
setScope(requestMap);
super.setValue(context, base, property, val);
}
finally
{
if( tmpScope != null){
setScope(requestMap, tmpScope);
}else{
unsetScope(requestMap);
}
}
I am attaching the code with all the changes to fix this issue.Please review
and provide your comments.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira