diff --git a/spring-binding/src/main/java/org/springframework/binding/format/registry/GenericFormatterRegistry.java b/spring-binding/src/main/java/org/springframework/binding/format/registry/GenericFormatterRegistry.java index 3b0372a2..a4f0c589 100644 --- a/spring-binding/src/main/java/org/springframework/binding/format/registry/GenericFormatterRegistry.java +++ b/spring-binding/src/main/java/org/springframework/binding/format/registry/GenericFormatterRegistry.java @@ -46,7 +46,10 @@ public class GenericFormatterRegistry implements FormatterRegistry { Assert.notNull(clazz, "The formatted class argument is required"); Assert.hasText(id, "The id of the custom formatter is required"); Formatter formatter = (Formatter) formattersById.get(id); - if (formatter != null && formatter.getObjectType().equals(clazz)) { + if (formatter != null && !formatter.getObjectType().equals(clazz)) { + throw new IllegalArgumentException( + "Provided class argument does not match registered Formatter objectType [" + clazz.getName() + + "]; unable to return custom Formatter instance " + formatter); } return formatter; } diff --git a/spring-binding/src/test/java/org/springframework/binding/format/impl/GenericFormatterRegistryTests.java b/spring-binding/src/test/java/org/springframework/binding/format/impl/GenericFormatterRegistryTests.java index 277f8c64..0606a632 100644 --- a/spring-binding/src/test/java/org/springframework/binding/format/impl/GenericFormatterRegistryTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/format/impl/GenericFormatterRegistryTests.java @@ -45,7 +45,7 @@ public class GenericFormatterRegistryTests extends TestCase { NumberFormatter percentFormatter = new NumberFormatter(BigDecimal.class); percentFormatter.setPattern("00%"); registry.registerFormatter("percent", percentFormatter); - Formatter formatter = registry.getFormatter(Integer.class, "percent"); + Formatter formatter = registry.getFormatter(BigDecimal.class, "percent"); assertEquals("35%", formatter.format(new BigDecimal(".35"))); BigDecimal value = (BigDecimal) formatter.parse("35%"); assertEquals(new BigDecimal(".35"), value); @@ -60,6 +60,16 @@ public class GenericFormatterRegistryTests extends TestCase { assertNotNull(formatter); } + public void testRegisterCustomFormatterBogusClass() { + registry.registerFormatter("double", new NumberFormatter(Double.class)); + try { + registry.getFormatter(Integer.class, "double"); + fail("Should have failed"); + } catch (IllegalArgumentException e) { + + } + } + public interface CustomType { public String getText(); }