[ https://issues.apache.org/jira/browse/VELOCITY-389?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henning Schmiedehausen closed VELOCITY-389. ------------------------------------------- > IllegalArgumentException while calling an overloaded method > ----------------------------------------------------------- > > Key: VELOCITY-389 > URL: https://issues.apache.org/jira/browse/VELOCITY-389 > Project: Velocity > Issue Type: Bug > Components: Engine > Affects 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. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]