diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java b/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java index a2a9e8ed..bff36789 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java @@ -171,7 +171,7 @@ public class GenericConversionService implements ConversionService { if (converter != null) { return converter; } - Class[] interfaces = targetClass.getInterfaces(); + Class[] interfaces = currentClass.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { classQueue.addFirst(interfaces[i]); } @@ -267,16 +267,19 @@ public class GenericConversionService implements ConversionService { } private Converter findTargetConverter(Map sourceTargetConverters, Class targetClass) { + if (sourceTargetConverters.isEmpty()) { + return null; + } if (targetClass.isInterface()) { LinkedList classQueue = new LinkedList(); classQueue.addFirst(targetClass); while (!classQueue.isEmpty()) { - targetClass = (Class) classQueue.removeLast(); - Converter converter = (Converter) sourceTargetConverters.get(targetClass); + Class currentClass = (Class) classQueue.removeLast(); + Converter converter = (Converter) sourceTargetConverters.get(currentClass); if (converter != null) { return converter; } - Class[] interfaces = targetClass.getInterfaces(); + Class[] interfaces = currentClass.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { classQueue.addFirst(interfaces[i]); } @@ -286,15 +289,15 @@ public class GenericConversionService implements ConversionService { LinkedList classQueue = new LinkedList(); classQueue.addFirst(targetClass); while (!classQueue.isEmpty()) { - targetClass = (Class) classQueue.removeLast(); - Converter converter = (Converter) sourceTargetConverters.get(targetClass); + Class currentClass = (Class) classQueue.removeLast(); + Converter converter = (Converter) sourceTargetConverters.get(currentClass); if (converter != null) { return converter; } - if (targetClass.getSuperclass() != null) { - classQueue.addFirst(targetClass.getSuperclass()); + if (currentClass.getSuperclass() != null) { + classQueue.addFirst(currentClass.getSuperclass()); } - Class[] interfaces = targetClass.getInterfaces(); + Class[] interfaces = currentClass.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { classQueue.addFirst(interfaces[i]); } diff --git a/spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java b/spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java index d2536f2e..55fac979 100644 --- a/spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java @@ -39,17 +39,10 @@ import org.springframework.binding.format.DefaultNumberFormatFactory; * @author Keith Donald */ public class DefaultConversionServiceTests extends TestCase { - public void testConvertCompatibleTypes() { DefaultConversionService service = new DefaultConversionService(); List lst = new ArrayList(); assertSame(lst, service.getConversionExecutor(ArrayList.class, List.class).execute(lst)); - try { - service.getConversionExecutor(List.class, ArrayList.class); - fail(); - } catch (ConversionExecutorNotFoundException e) { - // expected - } } public void testOverrideConverter() {