Description
Velocity 1.6 b2 wraps array arguments of method calls with an extra array causing the calls to fail and making this version incompatible with previous versions.
A simple template, like this, demonstrates the behavior:
#set ($_array = [ 1, 2, 3 ])
$test.arrayTest($_array.toArray())
Depending on the signature of test.arrayTest() , the template prints:
public String arrayTest(Object[] array)
{
return java.util.Arrays.deepToString((Object[]) array);
}
[[1, 2, 3]]
public String arrayTest(Object... array)
{
return java.util.Arrays.deepToString(array);
}
[[1, 2, 3]]
public String arrayTest(Object array)
{
return java.util.Arrays.deepToString((Object[]) array);
}
[1, 2, 3]
Actually, I noticed later that the argument doesn't have to be an array, this version of Velocity seems to wrap any argument into an array if the method expects an array. So maybe this is a feature and not a bug, but it should detect already correct array arguments and leave them intact to keep existing templates working.
– Ilkka