DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=29402>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=29402

ClassCastException when using commons-el.jar and standard.jar el evaluator

           Summary: ClassCastException when using commons-el.jar and
                    standard.jar el evaluator
           Product: Commons
           Version: 1.0 Final
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: EL
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Runing Tomcat 5.0.14 and 5.0.25. Using Apache standard.jar taglibs.
I am writing a custom tag that accept el expression in attributes. My tag class 
is using pageContext.getExpressionEvaluator.evaluate to evaluate el expressions.
In a jsp page, when using only my custom tag like this:
<mytag:setLocale value="${cookie.Language.value}"/>, it work fine and evaluate 
to the correct cookie value.
But when I am using any tag from standard.jar, problem occurs. For example, 
when inserting <c:out value="${cookie.Language.value"}/> before 
mytag:setLocale, pageContext.getExpressionEvaluator.evaluate throws a 
ClassCastException. When c:out is inserted after mytag:setLocale, the 
ClassCastException is thrown from standard.jar.


I have found the potential cause: when mytag:setLocale is called first, 
pageContext.getExpressionEvaluator.evaluate  appens to add in the pageContext 
attributes hashMap an object of type org.apache.commons.el.ImplicitObjects with 
key "org.apache.taglibs.standard.ImplicitObjects". Then when c:out is called 
next, it retreive the from the pageContext the 
key "org.apache.taglibs.standard.ImplicitObjects", wich is not of type 
org.apache.taglibs.standard.lang.jstl.ImplicitObjects. The reverse appens when 
c:out is called first; an object with the 
key "org.apache.taglibs.standard.ImplicitObjects" of type 
org.apache.taglibs.standard.lang.jstl.ImplicitObjects is added in the 
pageContext attributes hashMap. And when mytag:setLocale is called, 
org.apache.commons.el.ImplicitObjects.getImplicitObjects throws a 
ClassCastException when pContext.getAttribute returns with an object of type 
org.apache.taglibs.standard.lang.jstl.ImplicitObjects.

The source of the problem is that both package insert or retreive from the 
pagecontext attributes hashMap the same key name 
("org.apache.taglibs.standard.ImplicitObjects"), but with different type. Base 
on the key name, I guess standard.jar is correct in using it, but commons-
el.jar is not.

I tested a modified commons-el.jar with member sAttributeName from 
org.apache.commons.el.ImplicitObjects setted to, 
well, "org.apache.commons.el.ImplicitObjects". It worked just fine both cases.

The problem would only occurs if el evaluator from both package are called in 
the same jsp page with jsp's implicit objects. I dosen't have to be the same 
implicit object.

Since I can't beleive I am the first one with this problem, I first tried find 
something wrong in my setup/code. But it seems not.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to