You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org> on 2011/06/16 01:36:48 UTC

[jira] [Commented] (MYFACES-3166) org.apache.myfaces.el.VariableResolverImpl throws java.lang.IllegalStateException when it unsets the scope as null

    [ https://issues.apache.org/jira/browse/MYFACES-3166?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13050145#comment-13050145 ] 

Leonardo Uribe commented on MYFACES-3166:
-----------------------------------------

I have checked it and the scenario proposed is not very common. Which setup do you have? why two theads try to resolve an EL Expressions for the same request? Are you using portlets? Are you overriding Application.getELResolver()?

It this probably this bug will not be in 2.0 and upper versions, because in that case facesContext attribute map is used (in 1.2 is request map). But before commit this it is necessary to know the conditions this bug happens, so we can check if the proposed solution will work well.

> 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
>         Attachments: MYFACES-3166.patch
>
>
> 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