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

Reply via email to