Uploaded image for project: 'Velocity'
  1. Velocity
  2. VELOCITY-753

IntrospectionUtils.isMethodInvocationConvertible() returns true for NumberFormat.format(double) method with a Float.class argument

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.6.2
    • 1.7, 2.0
    • Engine
    • None

    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());
      }

      }

      Attachments

        Activity

          People

            Unassigned Unassigned
            tckuntz Tim Kuntz
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: