diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/GenericConversionService.java b/spring-binding/src/main/java/org/springframework/binding/convert/support/GenericConversionService.java index f45d7b20..f4299f8a 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/GenericConversionService.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/support/GenericConversionService.java @@ -140,7 +140,7 @@ public class GenericConversionService implements ConversionService { if (this.sourceClassConverters == null || this.sourceClassConverters.isEmpty()) { throw new IllegalStateException("No converters have been added to this service's registry"); } - if (sourceClass.equals(targetClass)) { + if (targetClass.isAssignableFrom(sourceClass)) { return new ConversionExecutor(sourceClass, targetClass, new NoOpConverter(sourceClass, targetClass)); } Map sourceTargetConverters = findConvertersForSource(sourceClass); diff --git a/spring-binding/src/test/java/org/springframework/binding/convert/support/DefaultConversionServiceTests.java b/spring-binding/src/test/java/org/springframework/binding/convert/support/DefaultConversionServiceTests.java index 47e04e54..d74da8bf 100644 --- a/spring-binding/src/test/java/org/springframework/binding/convert/support/DefaultConversionServiceTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/convert/support/DefaultConversionServiceTests.java @@ -15,7 +15,9 @@ */ package org.springframework.binding.convert.support; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import junit.framework.TestCase; @@ -31,6 +33,23 @@ import org.springframework.core.enums.ShortCodedLabeledEnum; */ public class DefaultConversionServiceTests extends TestCase { + public void testConvertCompatibleTypes() { + DefaultConversionService service = new DefaultConversionService(); + service.addAlias("list", List.class); + + List lst = new ArrayList(); + assertSame(lst, service.getConversionExecutor(ArrayList.class, List.class).execute(lst)); + assertSame(lst, service.getConversionExecutorByTargetAlias(ArrayList.class, "list").execute(lst)); + + try { + service.getConversionExecutor(List.class, ArrayList.class); + fail(); + } + catch (ConversionException e) { + // expected + } + } + public void testOverrideConverter() { Converter customConverter = new TextToBoolean("ja", "nee");