[ 
http://issues.apache.org/jira/browse/VELOCITY-389?page=comments#action_12329966 
] 

Will Glass-Husain commented on VELOCITY-389:
--------------------------------------------

You're right.  Changed.  We'll hit this for v1.5.

> IllegalArgumentException while calling an overloaded method
> -----------------------------------------------------------
>
>          Key: VELOCITY-389
>          URL: http://issues.apache.org/jira/browse/VELOCITY-389
>      Project: Velocity
>         Type: Bug
>   Components: Source
>     Versions: 1.4
>  Environment: Operating System: All
> Platform: All
>     Reporter: mike
>      Fix For: 1.5

>
> If there are two methods with the same name and different parameters like:
> public class myClass
> {
>     public String foo ( Integer intObj );
>     public String foo ( String str );
> }
> and a velocity template like this
> $myObj.foo( $someObj.getNull() )
> $myObj.foo( $str )
> while $someObj.getNull() returns null and $str is a java.lang.String object
> with a String like 'test'. Because velocity caches the first method with the 
> Integer argument on calling with the parameter null (which isn't of course of 
> any type/class) the call fails with the String argument, because velocity 
> tries
> to call the foo( Integer intObj )!
> In the velocity log appears a IllegalArgumentException which is right, but 
> velocity should call the right method!
> the bug appears only, if the call of foo is in a file
> which is included by #parse. 
> You can reproduce the bug with following files:
> main template file:
> #set ( $param = $someobj.getNull() )
> #parse ( "includecall.vm" )<br>
> #set ( $param = "a string" )
> #parse ( "includecall.vm" )
> includecall.vm:
> $testobj.foo( $param )
> class with the name someobj in the context:
> public class VelocityCachingBug
> {
>     public VelocityCachingBug()
>     {
>     }
>     public String foo ( Integer s )
>     {
>         return "Integer";
>     }
>     public String foo ( String i )
>     {
>         return "String";
>     }
>     public Object getNull()
>     {
>         return null;
>     }
> }
> if you render the main template, the second call can't be found by velocity
> because the parsed file is cached only once (as one single node). 
> I don't think the solution to this is to cache every call in a parsed file (if
> it's parsed more than once), because that can lead to much more memory use if
> you have many parsed files (like we have...), which are mostly the same.
> mike

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


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

Reply via email to