diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/ConversionExecutionException.java b/spring-binding/src/main/java/org/springframework/binding/convert/ConversionExecutionException.java index 49ba8880..474fc1af 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/ConversionExecutionException.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/ConversionExecutionException.java @@ -15,6 +15,8 @@ */ package org.springframework.binding.convert; +import org.springframework.core.style.StylerUtils; + /** * Thrown when an attempt to execute a type conversion fails. * @@ -87,8 +89,8 @@ public class ConversionExecutionException extends ConversionException { } private static String defaultMessage(Object value, Class sourceClass, Class targetClass, Throwable cause) { - return "Unable to convert value " + value + " from type '" + sourceClass.getName() + "' to type '" - + targetClass.getName() + "; reason = '" + cause.getMessage() + "'"; + return "Unable to convert value " + StylerUtils.style(value) + " from type '" + sourceClass.getName() + + "' to type '" + targetClass.getName() + "'; reason = '" + cause.getMessage() + "'"; } } \ No newline at end of file diff --git a/spring-binding/src/main/java/org/springframework/binding/expression/beanwrapper/BeanWrapperExpression.java b/spring-binding/src/main/java/org/springframework/binding/expression/beanwrapper/BeanWrapperExpression.java index 0888c269..3e7a6c22 100644 --- a/spring-binding/src/main/java/org/springframework/binding/expression/beanwrapper/BeanWrapperExpression.java +++ b/spring-binding/src/main/java/org/springframework/binding/expression/beanwrapper/BeanWrapperExpression.java @@ -23,6 +23,7 @@ import org.springframework.beans.BeanWrapperImpl; import org.springframework.beans.BeansException; import org.springframework.beans.NotReadablePropertyException; import org.springframework.beans.NotWritablePropertyException; +import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.ConversionService; import org.springframework.binding.expression.EvaluationException; @@ -135,7 +136,15 @@ public class BeanWrapperExpression implements Expression { } public void setAsText(String text) throws IllegalArgumentException { - setValue(converter.execute(text)); + try { + Object convertedValue = converter.execute(text); + setValue(convertedValue); + } catch (ConversionException e) { + IllegalArgumentException iae = new IllegalArgumentException("Unable to convert text '" + text + "'"); + iae.initCause(e); + throw iae; + } } } + } diff --git a/spring-binding/src/test/java/org/springframework/binding/expression/ognl/OgnlExpressionParserTests.java b/spring-binding/src/test/java/org/springframework/binding/expression/ognl/OgnlExpressionParserTests.java index 5c8f5abf..d6fe5c55 100644 --- a/spring-binding/src/test/java/org/springframework/binding/expression/ognl/OgnlExpressionParserTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/expression/ognl/OgnlExpressionParserTests.java @@ -17,6 +17,7 @@ package org.springframework.binding.expression.ognl; import junit.framework.TestCase; +import org.springframework.binding.expression.EvaluationException; import org.springframework.binding.expression.Expression; import org.springframework.binding.expression.ExpressionVariable; import org.springframework.binding.expression.ParserException; @@ -166,4 +167,18 @@ public class OgnlExpressionParserTests extends TestCase { Expression e = parser.parseExpression(exp, null); assertEquals(null, e.getValueType(bean)); } + + public void testSetValueWithCoersion() { + Expression e = parser.parseExpression("date", null); + e.setValue(bean, "2008-9-15"); + } + + public void testSetBogusValueWithCoersion() { + Expression e = parser.parseExpression("date", null); + try { + e.setValue(bean, "bogus"); + fail("Should have failed tme"); + } catch (EvaluationException ex) { + } + } } \ No newline at end of file