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=37600>.
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=37600

           Summary: Using Object as a tag property class automatically
                    changes the value to a String
           Product: Commons
           Version: 1.0 Final
          Platform: Other
        OS/Version: other
            Status: NEW
          Severity: major
          Priority: P3
         Component: Jelly
        AssignedTo: commons-dev@jakarta.apache.org
        ReportedBy: [EMAIL PROTECTED]


Hi I recently found a bug in either the Jelly Engine, or in some of the tags 
which  
are provided.

I encountered a problem with the following code:

<c:new className="java.lang.Long" var="value">
   <c:arg type="long" value="${12345}"/>
</c:new>
<c:new className="Profile" var="profile"/>
<c:invoke method="setValue" on="${profile}">
   <c:arg type="java.lang.Long" value="${321}"/>
   <c:arg type="java.lang.Long" value="${123}"/>
   <c:arg value="${value}"/>
</c:invoke>

the Profile setValue method takes three arguments; Long, Long, Object

Invoking the code results in the arg always passing the value to the invoke tag
as a String, not as an Object.

I looked into the ArgTag source code seeing that it is using java.lang.Object as
the type property class, not the ....jelly.Expression class. Since I was unsure
I created my own tag and taglib to simulate the problem.

public class MyTag extends TagSupport {
        private Object object = null;
        private Object expr = null;
        public void setObject(Object object) {
                this.object = object;
        }
        public void setExpression(Expression expr) {
                this.expr = expr.evaluate(this.getContext());
        }
        public void doTag(XMLOutput output) throws MissingAttributeException,
JellyTagException {
                System.out.println(object+" ("+object.getClass().getName()+")");
                System.out.println(expr+" ("+expr.getClass().getName()+")");
        }
}

executing the following script confirms the issue

        <c:new className="java.lang.Long" var="value">
                <c:arg type="long" value="${12345}"/>
        </c:new>
        <my:tag object="${value}" expression="${value}"/>

it result printing the following tho lines:
12345 (java.lang.String)
12345 (java.lang.Long)

Is this a problem in the engine, or should the arg tag be using the Expression
class instead of Object?

Kind Regards,

Harvey van der Meer

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

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

Reply via email to