From 7b189d11243a3632af948a86e8e7d981b0890b9b Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 15 Jun 2010 09:35:39 +0000 Subject: [PATCH] avoid ConverterNotFoundException if source object is assignable to target type --- .../support/GenericConversionService.java | 8 ++++++- .../PropertiesConversionSpelTests.java | 22 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java index e4519ee2798..894dfcd0234 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java @@ -172,7 +172,13 @@ public class GenericConversionService implements ConversionService, ConverterReg } GenericConverter converter = getConverter(sourceType, targetType); if (converter == null) { - throw new ConverterNotFoundException(sourceType, targetType); + if (targetType.getType().isInstance(source)) { + logger.debug("No converter found - returning assignable source object as-is"); + return source; + } + else { + throw new ConverterNotFoundException(sourceType, targetType); + } } Object result = ConversionUtils.invokeConverter(converter, source, sourceType, targetType); if (logger.isDebugEnabled()) { diff --git a/org.springframework.expression/src/test/java/org/springframework/expression/spel/standard/PropertiesConversionSpelTests.java b/org.springframework.expression/src/test/java/org/springframework/expression/spel/standard/PropertiesConversionSpelTests.java index 6c1c47f5087..ebac11450ef 100644 --- a/org.springframework.expression/src/test/java/org/springframework/expression/spel/standard/PropertiesConversionSpelTests.java +++ b/org.springframework.expression/src/test/java/org/springframework/expression/spel/standard/PropertiesConversionSpelTests.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertEquals; import java.util.HashMap; import java.util.Map; import java.util.Properties; +import java.util.UUID; import org.junit.Test; @@ -61,12 +62,26 @@ public class PropertiesConversionSpelTests { assertEquals("123", result); } - @Test // questionable, but this passes with 3.0.2.RELEASE + @Test public void mapWithNonStringValue() { Map map = new HashMap(); map.put("x", "1"); map.put("y", 2); map.put("z", "3"); + map.put("a", new UUID(1, 1)); + Expression expression = parser.parseExpression("foo(#props)"); + StandardEvaluationContext context = new StandardEvaluationContext(); + context.setVariable("props", map); + String result = expression.getValue(context, new TestBean(), String.class); + assertEquals("1null3", result); + } + + @Test + public void customMapWithNonStringValue() { + CustomMap map = new CustomMap(); + map.put("x", "1"); + map.put("y", 2); + map.put("z", "3"); Expression expression = parser.parseExpression("foo(#props)"); StandardEvaluationContext context = new StandardEvaluationContext(); context.setVariable("props", map); @@ -83,4 +98,9 @@ public class PropertiesConversionSpelTests { } } + + @SuppressWarnings("serial") + private static class CustomMap extends HashMap { + } + }