Description
NumberFormat has both a format(double) and format(Object) method. When evaluated against a Float, IntrospectionUtils is returning true. This causes Method.getBestMatch() to throw an AmbigouusException.
I have included a failing test case below to show this issue.
Thanks,
Tim
import java.io.StringReader;
import java.io.StringWriter;
import java.text.NumberFormat;
import junit.framework.TestCase;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
public class VelocityFormatTest extends TestCase {
public void test_format_of_float() throws Exception {
// verify format() outside of Velocity
NumberFormat numberFormat = NumberFormat.getInstance();
Float aFloat = new Float(5.23);
assertEquals("5.23", numberFormat.format(aFloat));
Velocity.init();
VelocityContext context = new VelocityContext();
context.put("numberFormatter", numberFormat);
context.put("aFloat", aFloat);
StringWriter sw = new StringWriter();
StringReader sr = new StringReader(
"float value is ${numberFormatter.format($aFloat)}");
Velocity.evaluate(context, sw, "name", sr);
String expectedValue = "float value is 5.23";
assertEquals(expectedValue, sw.toString());
}
}