From cd584afe939636b0de27785fe7556a1e9cf58886 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 10 Feb 2011 01:24:08 +0000 Subject: [PATCH] removed ConversionService/TypeConverter convenience methods in order to restore 3.0's SPI (for backwards compatibility with implementers) --- .../core/convert/ConversionService.java | 8 +-- .../ConvertingPropertyEditorAdapter.java | 4 +- .../support/GenericConversionService.java | 9 +-- .../support/DefaultConversionTests.java | 36 ++++++----- .../GenericConversionServiceTests.java | 22 +++---- .../expression/TypeConverter.java | 8 +-- .../expression/spel/ExpressionState.java | 5 +- .../spel/ast/ConstructorReference.java | 9 +-- .../spel/support/ReflectionHelper.java | 7 ++- .../support/ReflectivePropertyAccessor.java | 5 +- .../spel/support/StandardTypeConverter.java | 4 -- ...essionTestsUsingCoreConversionService.java | 60 +++++++++++++++---- .../support/BeanFactoryTypeConverter.java | 7 +-- 13 files changed, 97 insertions(+), 87 deletions(-) diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/ConversionService.java b/org.springframework.core/src/main/java/org/springframework/core/convert/ConversionService.java index d5c5654d452d..2995f74f621d 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/ConversionService.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/ConversionService.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -64,10 +64,4 @@ public interface ConversionService { */ Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType); - // 3.1 additions that encapsulate TypeDescriptor.forObject(source) - - boolean canConvert(Object source, TypeDescriptor targetType); - - Object convert(Object source, TypeDescriptor targetType); - } \ No newline at end of file diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConvertingPropertyEditorAdapter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConvertingPropertyEditorAdapter.java index 725aa1c00d0d..777861061cdc 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConvertingPropertyEditorAdapter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/ConvertingPropertyEditorAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -56,7 +56,7 @@ public ConvertingPropertyEditorAdapter(ConversionService conversionService, Type @Override public void setAsText(String text) throws IllegalArgumentException { - setValue(this.conversionService.convert(text, this.targetDescriptor)); + setValue(this.conversionService.convert(text, TypeDescriptor.valueOf(String.class), this.targetDescriptor)); } @Override 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 657b7d2447ea..5cd7b6019ff2 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -188,13 +188,6 @@ public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor t return result; } - public boolean canConvert(Object source, TypeDescriptor targetType) { - return canConvert(TypeDescriptor.forObject(source), targetType); - } - - public Object convert(Object source, TypeDescriptor targetType) { - return convert(source, TypeDescriptor.forObject(source), targetType); - } public String toString() { List converterStrings = new ArrayList(); diff --git a/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionTests.java b/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionTests.java index 7b7ff79d1493..b796363885a1 100644 --- a/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionTests.java +++ b/org.springframework.core/src/test/java/org/springframework/core/convert/support/DefaultConversionTests.java @@ -16,13 +16,7 @@ package org.springframework.core.convert.support; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; - -import java.awt.Color; +import java.awt.*; import java.math.BigDecimal; import java.math.BigInteger; import java.util.AbstractList; @@ -40,7 +34,9 @@ import java.util.Properties; import java.util.Set; +import static org.junit.Assert.*; import org.junit.Test; + import org.springframework.core.MethodParameter; import org.springframework.core.convert.ConversionFailedException; import org.springframework.core.convert.ConversionService; @@ -287,7 +283,8 @@ public void convertArrayToCollectionInterface() { @Test public void convertArrayToCollectionGenericTypeConversion() throws Exception { - List result = (List) conversionService.convert(new String[] { "1", "2", "3" }, new TypeDescriptor(getClass().getDeclaredField("genericList"))); + List result = (List) conversionService.convert(new String[] { "1", "2", "3" }, TypeDescriptor + .valueOf(String[].class), new TypeDescriptor(getClass().getDeclaredField("genericList"))); assertEquals(new Integer("1"), result.get(0)); assertEquals(new Integer("2"), result.get(1)); assertEquals(new Integer("3"), result.get(2)); @@ -297,7 +294,7 @@ public void convertArrayToCollectionGenericTypeConversion() throws Exception { public void testSpr7766() throws Exception { ConverterRegistry registry = ((ConverterRegistry) conversionService); registry.addConverter(new ColorConverter()); - List colors = (List) conversionService.convert(new String[] { "ffffff", "#000000" }, new TypeDescriptor(new MethodParameter(getClass().getMethod("handlerMethod", List.class), 0))); + List colors = (List) conversionService.convert(new String[] { "ffffff", "#000000" }, TypeDescriptor.valueOf(String[].class), new TypeDescriptor(new MethodParameter(getClass().getMethod("handlerMethod", List.class), 0))); assertEquals(2, colors.size()); assertEquals(Color.WHITE, colors.get(0)); assertEquals(Color.BLACK, colors.get(1)); @@ -457,7 +454,8 @@ public void convertStringToCollection() { @Test public void convertStringToCollectionWithElementConversion() throws Exception { - List result = (List) conversionService.convert("1,2,3", new TypeDescriptor(getClass().getField("genericList"))); + List result = (List) conversionService.convert("1,2,3", TypeDescriptor.valueOf(String.class), + new TypeDescriptor(getClass().getField("genericList"))); assertEquals(3, result.size()); assertEquals(new Integer(1), result.get(0)); assertEquals(new Integer(2), result.get(1)); @@ -493,7 +491,8 @@ public void convertObjectToCollection() { @Test public void convertObjectToCollectionWithElementConversion() throws Exception { - List result = (List) conversionService.convert(3L, new TypeDescriptor(getClass().getField("genericList"))); + List result = (List) conversionService.convert(3L, TypeDescriptor.valueOf(Long.class), + new TypeDescriptor(getClass().getField("genericList"))); assertEquals(1, result.size()); assertEquals(new Integer(3), result.get(0)); } @@ -528,7 +527,8 @@ public void convertCollectionToCollection() throws Exception { foo.add("1"); foo.add("2"); foo.add("3"); - List bar = (List) conversionService.convert(foo, new TypeDescriptor(getClass().getField("genericList"))); + List bar = (List) conversionService.convert(foo, TypeDescriptor.forObject(foo), + new TypeDescriptor(getClass().getField("genericList"))); assertEquals(new Integer(1), bar.get(0)); assertEquals(new Integer(2), bar.get(1)); assertEquals(new Integer(3), bar.get(2)); @@ -536,7 +536,8 @@ public void convertCollectionToCollection() throws Exception { @Test public void convertCollectionToCollectionNull() throws Exception { - List bar = (List) conversionService.convert(null, new TypeDescriptor(getClass().getField("genericList"))); + List bar = (List) conversionService.convert(null, + TypeDescriptor.valueOf(LinkedHashSet.class), new TypeDescriptor(getClass().getField("genericList"))); assertNull(bar); } @@ -546,7 +547,8 @@ public void convertCollectionToCollectionNotGeneric() throws Exception { foo.add("1"); foo.add("2"); foo.add("3"); - List bar = (List) conversionService.convert(foo, TypeDescriptor.valueOf(List.class)); + List bar = (List) conversionService.convert(foo, TypeDescriptor.valueOf(LinkedHashSet.class), TypeDescriptor + .valueOf(List.class)); assertEquals("1", bar.get(0)); assertEquals("2", bar.get(1)); assertEquals("3", bar.get(2)); @@ -559,7 +561,8 @@ public void convertCollectionToCollectionSpecialCaseSourceImpl() throws Exceptio map.put("2", "2"); map.put("3", "3"); Collection values = map.values(); - List bar = (List) conversionService.convert(values, new TypeDescriptor(getClass().getField("genericList"))); + List bar = (List) conversionService.convert(values, + TypeDescriptor.forObject(values), new TypeDescriptor(getClass().getField("genericList"))); assertEquals(3, bar.size()); assertEquals(new Integer(1), bar.get(0)); assertEquals(new Integer(2), bar.get(1)); @@ -573,7 +576,8 @@ public void convertMapToMap() throws Exception { Map foo = new HashMap(); foo.put("1", "BAR"); foo.put("2", "BAZ"); - Map map = (Map) conversionService.convert(foo, new TypeDescriptor(getClass().getField("genericMap"))); + Map map = (Map) conversionService.convert(foo, + TypeDescriptor.forObject(foo), new TypeDescriptor(getClass().getField("genericMap"))); assertEquals(FooEnum.BAR, map.get(1)); assertEquals(FooEnum.BAZ, map.get(2)); } diff --git a/org.springframework.core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java b/org.springframework.core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java index 1ab672dd93ef..94e830fd3dfc 100644 --- a/org.springframework.core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java +++ b/org.springframework.core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java @@ -16,14 +16,6 @@ package org.springframework.core.convert.support; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -32,7 +24,9 @@ import java.util.List; import java.util.Map; +import static org.junit.Assert.*; import org.junit.Test; + import org.springframework.core.convert.ConversionFailedException; import org.springframework.core.convert.ConverterNotFoundException; import org.springframework.core.convert.TypeDescriptor; @@ -111,12 +105,12 @@ public void convertNull() { public void convertNullTargetClass() { assertNull(conversionService.convert("3", (Class) null)); - assertNull(conversionService.convert("3", TypeDescriptor.NULL)); + assertNull(conversionService.convert("3", TypeDescriptor.valueOf(String.class), TypeDescriptor.NULL)); } @Test public void convertNullTypeDescriptor() { - assertNull(conversionService.convert("3", TypeDescriptor.NULL)); + assertNull(conversionService.convert("3", TypeDescriptor.valueOf(String.class), TypeDescriptor.NULL)); } @Test @@ -150,7 +144,7 @@ public void convertObjectToPrimitive() { Boolean b = conversionService.convert("true", boolean.class); assertEquals(Boolean.TRUE, b); assertTrue(conversionService.canConvert(TypeDescriptor.valueOf(String.class), TypeDescriptor.valueOf(boolean.class))); - b = (Boolean) conversionService.convert("true", TypeDescriptor.valueOf(boolean.class)); + b = (Boolean) conversionService.convert("true", TypeDescriptor.valueOf(String.class), TypeDescriptor.valueOf(boolean.class)); assertEquals(Boolean.TRUE, b); } @@ -260,7 +254,7 @@ public void testWildcardMap() throws Exception { GenericConversionService conversionService = new DefaultConversionService(); Map input = new LinkedHashMap(); input.put("key", "value"); - Object converted = conversionService.convert(input, new TypeDescriptor(getClass().getField("wildcardMap"))); + Object converted = conversionService.convert(input, TypeDescriptor.forObject(input), new TypeDescriptor(getClass().getField("wildcardMap"))); assertEquals(input, converted); } @@ -323,7 +317,7 @@ public void testPerformance2() throws Exception { source.add("3"); TypeDescriptor td = new TypeDescriptor(getClass().getField("list")); for (int i = 0; i < 1000000; i++) { - conversionService.convert(source, td); + conversionService.convert(source, TypeDescriptor.forObject(source), td); } watch.stop(); watch.start("convert 4,000,000 manually"); @@ -350,7 +344,7 @@ public void testPerformance3() throws Exception { source.put("3", "3"); TypeDescriptor td = new TypeDescriptor(getClass().getField("map")); for (int i = 0; i < 1000000; i++) { - conversionService.convert(source, td); + conversionService.convert(source, TypeDescriptor.forObject(source), td); } watch.stop(); watch.start("convert 4,000,000 manually"); diff --git a/org.springframework.expression/src/main/java/org/springframework/expression/TypeConverter.java b/org.springframework.expression/src/main/java/org/springframework/expression/TypeConverter.java index 1f6aef67831b..8ac4ebf9e471 100644 --- a/org.springframework.expression/src/main/java/org/springframework/expression/TypeConverter.java +++ b/org.springframework.expression/src/main/java/org/springframework/expression/TypeConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,7 +41,7 @@ public interface TypeConverter { /** * Convert (may coerce) a value from one type to another, for example from a boolean to a string. * The typeDescriptor parameter enables support for typed collections - if the caller really wishes they - * can have a List for example, rather than simply a List. + * can have a List<Integer> for example, rather than simply a List. * @param value the value to be converted * @param sourceType a type descriptor that supplies extra information about the source object * @param targetType a type descriptor that supplies extra information about the requested result type @@ -50,8 +50,4 @@ public interface TypeConverter { */ Object convertValue(Object value, TypeDescriptor sourceType, TypeDescriptor targetType); - // 3.1 additions for encapsulation of TypeDescriptor.forObject(value); - - Object convertValue(Object value, TypeDescriptor targetType); - } diff --git a/org.springframework.expression/src/main/java/org/springframework/expression/spel/ExpressionState.java b/org.springframework.expression/src/main/java/org/springframework/expression/spel/ExpressionState.java index 3dbf10de92e5..5eb3ce8a882c 100644 --- a/org.springframework.expression/src/main/java/org/springframework/expression/spel/ExpressionState.java +++ b/org.springframework.expression/src/main/java/org/springframework/expression/spel/ExpressionState.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -141,7 +141,8 @@ public Object convertValue(Object value, TypeDescriptor targetTypeDescriptor) th } public Object convertValue(TypedValue value, TypeDescriptor targetTypeDescriptor) throws EvaluationException { - return this.relatedContext.getTypeConverter().convertValue(value.getValue(), targetTypeDescriptor); + Object val = value.getValue(); + return this.relatedContext.getTypeConverter().convertValue(val, TypeDescriptor.forObject(val), targetTypeDescriptor); } /* diff --git a/org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/ConstructorReference.java b/org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/ConstructorReference.java index f97c325a7baa..ce53a6d0109b 100644 --- a/org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/ConstructorReference.java +++ b/org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/ConstructorReference.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,8 +35,9 @@ import org.springframework.expression.spel.SpelNode; /** - * Represents the invocation of a constructor. Either a constructor on a regular type or construction of an array. When - * an array is constructed, an initializer can be specified. + * Represents the invocation of a constructor. Either a constructor on a regular type or + * construction of an array. When an array is constructed, an initializer can be specified. + * *

* Examples:
* new String('hello world')
@@ -322,7 +323,7 @@ private void populateReferenceTypeArray(ExpressionState state, Object newArray, for (int i = 0; i < newObjectArray.length; i++) { SpelNode elementNode = initializer.getChild(i); Object arrayEntry = elementNode.getValue(state); - newObjectArray[i] = typeConverter.convertValue(arrayEntry, toTypeDescriptor); + newObjectArray[i] = typeConverter.convertValue(arrayEntry, TypeDescriptor.forObject(arrayEntry), toTypeDescriptor); } } diff --git a/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectionHelper.java b/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectionHelper.java index 5966a47ee844..35ac1ca121f3 100644 --- a/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectionHelper.java +++ b/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectionHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -241,7 +241,8 @@ static void convertArguments(TypeConverter converter, Object[] arguments, Object else { targetType = new TypeDescriptor(MethodParameter.forMethodOrConstructor(methodOrCtor, argPosition)); } - arguments[argPosition] = converter.convertValue(arguments[argPosition], targetType); + Object argument = arguments[argPosition]; + arguments[argPosition] = converter.convertValue(argument, TypeDescriptor.forObject(argument), targetType); } } @@ -278,7 +279,7 @@ public static void convertAllArguments(TypeConverter converter, Object[] argumen if (converter == null) { throw new SpelEvaluationException(SpelMessage.TYPE_CONVERSION_ERROR, argument.getClass().getName(), targetType); } - arguments[argPosition] = converter.convertValue(argument, targetType); + arguments[argPosition] = converter.convertValue(argument, TypeDescriptor.forObject(argument), targetType); } } catch (EvaluationException ex) { diff --git a/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java b/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java index dfb5314cc1f8..8d14a74ed4d5 100644 --- a/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java +++ b/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/ReflectivePropertyAccessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -218,7 +218,8 @@ public void write(EvaluationContext context, Object target, String name, Object TypeDescriptor typeDescriptor = getTypeDescriptor(context, target, name); if (typeDescriptor != null) { try { - possiblyConvertedNewValue = context.getTypeConverter().convertValue(newValue, typeDescriptor); + possiblyConvertedNewValue = context.getTypeConverter().convertValue( + newValue, TypeDescriptor.forObject(newValue), typeDescriptor); } catch (EvaluationException evaluationException) { throw new AccessException("Type conversion failure",evaluationException); diff --git a/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeConverter.java b/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeConverter.java index 8a5d757f4106..96d6eb9c20cb 100644 --- a/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeConverter.java +++ b/org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeConverter.java @@ -75,8 +75,4 @@ public Object convertValue(Object value, TypeDescriptor sourceType, TypeDescript } } - public Object convertValue(Object value, TypeDescriptor targetType) { - return convertValue(value, TypeDescriptor.forObject(value), targetType); - } - } diff --git a/org.springframework.expression/src/test/java/org/springframework/expression/spel/ExpressionTestsUsingCoreConversionService.java b/org.springframework.expression/src/test/java/org/springframework/expression/spel/ExpressionTestsUsingCoreConversionService.java index c083f29109fb..5307978702f8 100644 --- a/org.springframework.expression/src/test/java/org/springframework/expression/spel/ExpressionTestsUsingCoreConversionService.java +++ b/org.springframework.expression/src/test/java/org/springframework/expression/spel/ExpressionTestsUsingCoreConversionService.java @@ -16,16 +16,15 @@ package org.springframework.expression.spel; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertTrue; - import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; +import static junit.framework.Assert.*; import org.junit.Before; import org.junit.Test; + import org.springframework.core.MethodParameter; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; @@ -75,14 +74,14 @@ public void testConversionsAvailable() throws Exception { // ArrayList containing List to List Class clazz = typeDescriptorForListOfString.getElementType(); assertEquals(String.class,clazz); - List l = (List) tcs.convertValue(listOfInteger, typeDescriptorForListOfString); + List l = (List) tcs.convertValue(listOfInteger, TypeDescriptor.forObject(listOfInteger), typeDescriptorForListOfString); assertNotNull(l); // ArrayList containing List to List clazz = typeDescriptorForListOfInteger.getElementType(); assertEquals(Integer.class,clazz); - l = (List) tcs.convertValue(listOfString, typeDescriptorForListOfString); + l = (List) tcs.convertValue(listOfString, TypeDescriptor.forObject(listOfString), typeDescriptorForListOfString); assertNotNull(l); } @@ -121,8 +120,7 @@ public int sum(Collection numbers) { assertTrue(evaluationContext.getTypeConverter() .canConvert(TypeDescriptor.valueOf(String.class), collectionType)); // ... and it can be done successfully - assertEquals("[1, 2, 3, 4]", evaluationContext.getTypeConverter().convertValue("1,2,3,4", collectionType).toString()); - + assertEquals("[1, 2, 3, 4]", evaluationContext.getTypeConverter().convertValue("1,2,3,4", TypeDescriptor.valueOf(String.class), collectionType).toString()); evaluationContext.setVariable("target", new TestTarget()); @@ -133,6 +131,47 @@ public int sum(Collection numbers) { } + public static class Foo { + + private Collection foos; + + public final String value; + + public Foo(String value) { + this.value = value; + } + + public void setFoos(Collection foos) { + this.foos = foos; + } + + public Collection getFoos() { + return this.foos; + } + + } + + @Test + public void testConvert() { + Foo root = new Foo("bar"); + StandardEvaluationContext context = new StandardEvaluationContext(root); + + Collection foos = Collections.singletonList("baz"); + + // property access, works + Expression expression = parser.parseExpression("foos"); + expression.setValue(context, foos); + Foo baz = root.getFoos().iterator().next(); + assertEquals("baz", baz.value); + + // method call, fails (ClassCastException) + expression = parser.parseExpression("setFoos(#foos)"); + context.setVariable("foos", foos); + expression.getValue(context); + baz = root.getFoos().iterator().next(); + assertEquals("baz", baz.value); + } + /** * Type converter that uses the core conversion service. @@ -141,10 +180,6 @@ private static class TypeConvertorUsingConversionService implements TypeConverte private final ConversionService service = new DefaultConversionService(); - public Object convertValue(Object value, TypeDescriptor typeDescriptor) throws EvaluationException { - return this.service.convert(value, typeDescriptor); - } - public boolean canConvert(TypeDescriptor sourceType, TypeDescriptor targetType) { return this.service.canConvert(sourceType, targetType); } @@ -152,7 +187,6 @@ public boolean canConvert(TypeDescriptor sourceType, TypeDescriptor targetType) public Object convertValue(Object value, TypeDescriptor sourceType, TypeDescriptor targetType) throws EvaluationException { return this.service.convert(value, sourceType, targetType); } - } } diff --git a/org.springframework.integration-tests/src/test/java/org/springframework/expression/spel/support/BeanFactoryTypeConverter.java b/org.springframework.integration-tests/src/test/java/org/springframework/expression/spel/support/BeanFactoryTypeConverter.java index 922b39b709d2..032ab7c6fbf5 100644 --- a/org.springframework.integration-tests/src/test/java/org/springframework/expression/spel/support/BeanFactoryTypeConverter.java +++ b/org.springframework.integration-tests/src/test/java/org/springframework/expression/spel/support/BeanFactoryTypeConverter.java @@ -104,10 +104,5 @@ public Object convertValue(Object value, TypeDescriptor sourceType, TypeDescript } return delegate.convertIfNecessary(value, targetType.getType()); } - - public Object convertValue(Object value, TypeDescriptor targetType) { - return convertValue(value, TypeDescriptor.forObject(value), targetType); - } - -} \ No newline at end of file +}