diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/ConversionContext.java b/spring-binding/src/main/java/org/springframework/binding/convert/ConversionContext.java deleted file mode 100644 index 9396f7fc..00000000 --- a/spring-binding/src/main/java/org/springframework/binding/convert/ConversionContext.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2004-2007 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.binding.convert; - -/** - * A context object with two main responsibities: - *
    - *
  1. Exposing information to a converter to influence a type conversion attempt. - *
  2. Providing operations for recording progress or errors during the type conversion process. - *
- * Empty for now; subclasses may define their own custom context behavior accessible by a converter with a downcast. - * - * @author Keith Donald - */ -public interface ConversionContext { - -} diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/AbstractConverter.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/AbstractConverter.java similarity index 98% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/AbstractConverter.java rename to spring-binding/src/main/java/org/springframework/binding/convert/converters/AbstractConverter.java index d7e3abc5..68fba77e 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/AbstractConverter.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/AbstractConverter.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.converters; import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.Converter; diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/AbstractFormattingConverter.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/AbstractFormattingConverter.java similarity index 96% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/AbstractFormattingConverter.java rename to spring-binding/src/main/java/org/springframework/binding/convert/converters/AbstractFormattingConverter.java index ded7cc18..689b127b 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/AbstractFormattingConverter.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/AbstractFormattingConverter.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.converters; import org.springframework.binding.format.FormatterRegistry; import org.springframework.util.Assert; diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToBoolean.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToBoolean.java similarity index 98% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/TextToBoolean.java rename to spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToBoolean.java index b3a3961e..2832fa0a 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToBoolean.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToBoolean.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.converters; import org.springframework.util.StringUtils; diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToClass.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToClass.java similarity index 97% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/TextToClass.java rename to spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToClass.java index 3e806dab..26203dc5 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToClass.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToClass.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.converters; import java.math.BigDecimal; import java.math.BigInteger; diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToDate.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToDate.java similarity index 96% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/TextToDate.java rename to spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToDate.java index d422764c..870e003b 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToDate.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToDate.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.converters; import java.util.Date; diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToLabeledEnum.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToLabeledEnum.java similarity index 96% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/TextToLabeledEnum.java rename to spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToLabeledEnum.java index 441690a0..3378bdae 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToLabeledEnum.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToLabeledEnum.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.converters; import org.springframework.core.enums.LabeledEnum; import org.springframework.core.enums.LabeledEnumResolver; diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToNumber.java b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToNumber.java similarity index 96% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/TextToNumber.java rename to spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToNumber.java index 55a162a4..ed8e54b6 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/TextToNumber.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/converters/TextToNumber.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.converters; import java.math.BigDecimal; import java.math.BigInteger; diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/DefaultConversionService.java b/spring-binding/src/main/java/org/springframework/binding/convert/service/DefaultConversionService.java similarity index 73% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/DefaultConversionService.java rename to spring-binding/src/main/java/org/springframework/binding/convert/service/DefaultConversionService.java index e89cd296..0bf17e34 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/DefaultConversionService.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/service/DefaultConversionService.java @@ -13,8 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.service; +import org.springframework.binding.convert.ConversionService; +import org.springframework.binding.convert.converters.TextToBoolean; +import org.springframework.binding.convert.converters.TextToClass; +import org.springframework.binding.convert.converters.TextToDate; +import org.springframework.binding.convert.converters.TextToLabeledEnum; +import org.springframework.binding.convert.converters.TextToNumber; import org.springframework.binding.format.FormatterRegistry; import org.springframework.binding.format.factories.DateFormatterFactory; import org.springframework.binding.format.factories.NumberFormatterFactory; @@ -28,6 +34,11 @@ import org.springframework.binding.format.impl.FormatterRegistryImpl; */ public class DefaultConversionService extends GenericConversionService { + /** + * A singleton shared instance. Should never be modified. + */ + private static final DefaultConversionService SHARED_INSTANCE = new DefaultConversionService(); + /** * Returns the formatter registry used by this conversion service */ @@ -58,4 +69,11 @@ public class DefaultConversionService extends GenericConversionService { registry.registerFormatter(new DateFormatterFactory()); return registry; } + + /** + * Returns the shared {@link DefaultConversionService} instance. + */ + public static ConversionService getSharedInstance() { + return SHARED_INSTANCE; + } } \ No newline at end of file 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/service/GenericConversionService.java similarity index 96% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/GenericConversionService.java rename to spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java index 4879132a..dcd56c1d 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/GenericConversionService.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/service/GenericConversionService.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.service; import java.util.Collections; import java.util.HashMap; @@ -89,13 +89,13 @@ public class GenericConversionService implements ConversionService { sourceClass = convertToWrapperClassIfNecessary(sourceClass); targetClass = convertToWrapperClassIfNecessary(targetClass); if (targetClass.isAssignableFrom(sourceClass)) { - return new ConversionExecutorImpl(sourceClass, targetClass, new NoOpConverter(sourceClass, targetClass)); + return new StaticConversionExecutor(sourceClass, targetClass, new NoOpConverter(sourceClass, targetClass)); } Map sourceTargetConverters = findConvertersForSource(sourceClass); Converter converter = findTargetConverter(sourceTargetConverters, targetClass); if (converter != null) { // we found a converter - return new ConversionExecutorImpl(sourceClass, targetClass, converter); + return new StaticConversionExecutor(sourceClass, targetClass, converter); } else { if (parent != null) { // try the parent diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/NoOpConverter.java b/spring-binding/src/main/java/org/springframework/binding/convert/service/NoOpConverter.java similarity index 88% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/NoOpConverter.java rename to spring-binding/src/main/java/org/springframework/binding/convert/service/NoOpConverter.java index 180718ee..769994a7 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/NoOpConverter.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/service/NoOpConverter.java @@ -13,7 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.service; + +import org.springframework.binding.convert.converters.AbstractConverter; /** diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/RuntimeBindingConversionExecutor.java b/spring-binding/src/main/java/org/springframework/binding/convert/service/RuntimeBindingConversionExecutor.java similarity index 97% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/RuntimeBindingConversionExecutor.java rename to spring-binding/src/main/java/org/springframework/binding/convert/service/RuntimeBindingConversionExecutor.java index dee3cf14..db185783 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/RuntimeBindingConversionExecutor.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/service/RuntimeBindingConversionExecutor.java @@ -1,4 +1,4 @@ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.service; import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutor; diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/ConversionExecutorImpl.java b/spring-binding/src/main/java/org/springframework/binding/convert/service/StaticConversionExecutor.java similarity index 91% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/ConversionExecutorImpl.java rename to spring-binding/src/main/java/org/springframework/binding/convert/service/StaticConversionExecutor.java index 4ee2c36e..3e375d35 100644 --- a/spring-binding/src/main/java/org/springframework/binding/convert/support/ConversionExecutorImpl.java +++ b/spring-binding/src/main/java/org/springframework/binding/convert/service/StaticConversionExecutor.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.service; import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutor; @@ -30,7 +30,7 @@ import org.springframework.util.Assert; * * @author Keith Donald */ -class ConversionExecutorImpl implements ConversionExecutor { +class StaticConversionExecutor implements ConversionExecutor { /** * The source value type this executor will attempt to convert from. @@ -53,7 +53,7 @@ class ConversionExecutorImpl implements ConversionExecutor { * @param targetClass the target type that the converter will convert to * @param converter the converter that will perform the conversion */ - public ConversionExecutorImpl(Class sourceClass, Class targetClass, Converter converter) { + public StaticConversionExecutor(Class sourceClass, Class targetClass, Converter converter) { Assert.notNull(sourceClass, "The source class is required"); Assert.notNull(targetClass, "The target class is required"); Assert.notNull(converter, "The converter is required"); @@ -103,10 +103,10 @@ class ConversionExecutorImpl implements ConversionExecutor { } public boolean equals(Object o) { - if (!(o instanceof ConversionExecutorImpl)) { + if (!(o instanceof StaticConversionExecutor)) { return false; } - ConversionExecutorImpl other = (ConversionExecutorImpl) o; + StaticConversionExecutor other = (StaticConversionExecutor) o; return sourceClass.equals(other.sourceClass) && targetClass.equals(other.targetClass); } diff --git a/spring-binding/src/main/java/org/springframework/binding/convert/support/package.html b/spring-binding/src/main/java/org/springframework/binding/convert/service/package.html similarity index 100% rename from spring-binding/src/main/java/org/springframework/binding/convert/support/package.html rename to spring-binding/src/main/java/org/springframework/binding/convert/service/package.html diff --git a/spring-binding/src/main/java/org/springframework/binding/expression/el/DefaultExpressionFactoryUtils.java b/spring-binding/src/main/java/org/springframework/binding/expression/el/DefaultExpressionFactoryUtils.java index 97019fff..af09382e 100644 --- a/spring-binding/src/main/java/org/springframework/binding/expression/el/DefaultExpressionFactoryUtils.java +++ b/spring-binding/src/main/java/org/springframework/binding/expression/el/DefaultExpressionFactoryUtils.java @@ -2,8 +2,6 @@ package org.springframework.binding.expression.el; import javax.el.ExpressionFactory; -import org.springframework.beans.BeanInstantiationException; -import org.springframework.beans.BeanUtils; import org.springframework.util.ClassUtils; /** @@ -26,14 +24,12 @@ public class DefaultExpressionFactoryUtils { /** * Creates a new instance of the expression factory configured for this VM. - * @throws IllegalStateException if the ExpressionFactory class cannot be found - * @throws RuntimeException if the ExpressionFactory cannot be instantiated + * @throws IllegalStateException if the ExpressionFactory class cannot be instantiated */ - public static ExpressionFactory createExpressionFactory() throws IllegalStateException, RuntimeException { - // Fallback in the case of using an older version of the EL API + public static ExpressionFactory createExpressionFactory() throws IllegalStateException { + Class expressionFactoryClass; try { - Class expressionFactoryClass = ClassUtils.forName(getDefaultExpressionFactoryClassName()); - return (ExpressionFactory) BeanUtils.instantiateClass(expressionFactoryClass); + expressionFactoryClass = ClassUtils.forName(getDefaultExpressionFactoryClassName()); } catch (ClassNotFoundException e) { throw new IllegalStateException( "The default ExpressionFactory class '" @@ -46,10 +42,15 @@ public class DefaultExpressionFactoryUtils { + getDefaultExpressionFactoryClassName() + "' could not be found in the classpath. " + "Please add this to your classpath or set the default ExpressionFactory class name to something that is in the classpath."); - } catch (BeanInstantiationException e) { - throw new RuntimeException("An instance of the default ExpressionFactory '" + } + try { + return (ExpressionFactory) expressionFactoryClass.newInstance(); + } catch (Exception e) { + IllegalStateException iae = new IllegalStateException("An instance of the default ExpressionFactory '" + getDefaultExpressionFactoryClassName() - + "' could not be instantiated. Check your EL implementation configuration.", e); + + "' could not be instantiated. Check your EL implementation configuration."); + iae.initCause(e); + throw iae; } } } \ No newline at end of file diff --git a/spring-binding/src/main/java/org/springframework/binding/mapping/MappingResult.java b/spring-binding/src/main/java/org/springframework/binding/mapping/MappingResult.java index 12f44e4b..705ac73a 100644 --- a/spring-binding/src/main/java/org/springframework/binding/mapping/MappingResult.java +++ b/spring-binding/src/main/java/org/springframework/binding/mapping/MappingResult.java @@ -38,5 +38,4 @@ public class MappingResult { public String toString() { return new ToStringCreator(this).append("mapping", mapping).append("result", result).toString(); } - } diff --git a/spring-binding/src/main/java/org/springframework/binding/mapping/impl/DefaultMapping.java b/spring-binding/src/main/java/org/springframework/binding/mapping/impl/DefaultMapping.java index 08110fc5..d9596641 100644 --- a/spring-binding/src/main/java/org/springframework/binding/mapping/impl/DefaultMapping.java +++ b/spring-binding/src/main/java/org/springframework/binding/mapping/impl/DefaultMapping.java @@ -15,15 +15,12 @@ */ package org.springframework.binding.mapping.impl; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.ConversionService; import org.springframework.binding.expression.EvaluationException; import org.springframework.binding.expression.Expression; import org.springframework.binding.mapping.Mapping; -import org.springframework.core.style.StylerUtils; import org.springframework.util.Assert; /** @@ -34,8 +31,6 @@ import org.springframework.util.Assert; */ public class DefaultMapping implements Mapping { - private static final Log logger = LogFactory.getLog(DefaultMapping.class); - /** * The source expression to evaluate against a source object to map from. */ @@ -94,7 +89,6 @@ public class DefaultMapping implements Mapping { /** * Sets a specific type conversion executor to use during mapping execution. * @param typeConverter the type converter - * @see #map(MappingContext) */ public void setTypeConverter(ConversionExecutor typeConverter) { this.typeConverter = typeConverter; @@ -112,7 +106,7 @@ public class DefaultMapping implements Mapping { * Execute this mapping. * @param context the mapping context */ - public void map(MappingContext context) { + void map(MappingContext context) { context.setCurrentMapping(this); Object sourceValue; try { @@ -159,13 +153,6 @@ public class DefaultMapping implements Mapping { } try { targetExpression.setValue(context.getTarget(), targetValue); - if (logger.isDebugEnabled()) { - String sourceType = sourceValue != null ? sourceValue.getClass().getName() : "null"; - String targetType = targetValue != null ? targetValue.getClass().getName() : "null"; - logger.debug("Sucessfully mapped source [" + sourceType + "] " + sourceExpression + " value " - + StylerUtils.style(sourceValue) + " to target [" + targetType + "] " + targetExpression - + " value " + StylerUtils.style(targetValue)); - } context.setSuccessResult(sourceValue, targetValue); } catch (EvaluationException e) { context.setTargetAccessError(sourceValue, e); @@ -195,5 +182,4 @@ public class DefaultMapping implements Mapping { public String toString() { return sourceExpression + " -> " + targetExpression; } - } \ No newline at end of file diff --git a/spring-binding/src/main/java/org/springframework/binding/mapping/impl/DefaultMappingContext.java b/spring-binding/src/main/java/org/springframework/binding/mapping/impl/DefaultMappingContext.java index 3636e0ad..a5be98c4 100644 --- a/spring-binding/src/main/java/org/springframework/binding/mapping/impl/DefaultMappingContext.java +++ b/spring-binding/src/main/java/org/springframework/binding/mapping/impl/DefaultMappingContext.java @@ -3,6 +3,8 @@ package org.springframework.binding.mapping.impl; import java.util.ArrayList; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.binding.convert.ConversionService; import org.springframework.binding.expression.EvaluationException; import org.springframework.binding.mapping.Mapping; @@ -20,6 +22,8 @@ import org.springframework.binding.mapping.results.TypeConversionError; */ class DefaultMappingContext implements MappingContext { + private static final Log logger = LogFactory.getLog(DefaultMapping.class); + private Object source; private Object target; @@ -61,27 +65,30 @@ class DefaultMappingContext implements MappingContext { } public void setSuccessResult(Object originalValue, Object mappedValue) { - mappingResults.add(new MappingResult(currentMapping, new Success(mappedValue, originalValue))); - currentMapping = null; + add(new MappingResult(currentMapping, new Success(mappedValue, originalValue))); } public void setRequiredErrorResult(Object originalValue) { - mappingResults.add(new MappingResult(currentMapping, new RequiredError(originalValue))); - this.currentMapping = null; + add(new MappingResult(currentMapping, new RequiredError(originalValue))); } public void setTypeConversionErrorResult(Object originalValue, Class targetType) { - mappingResults.add(new MappingResult(currentMapping, new TypeConversionError(originalValue, targetType))); - this.currentMapping = null; + add(new MappingResult(currentMapping, new TypeConversionError(originalValue, targetType))); } public void setSourceAccessError(EvaluationException error) { - mappingResults.add(new MappingResult(currentMapping, new SourceAccessError(error))); - this.currentMapping = null; + add(new MappingResult(currentMapping, new SourceAccessError(error))); } public void setTargetAccessError(Object originalValue, EvaluationException error) { - mappingResults.add(new MappingResult(currentMapping, new TargetAccessError(originalValue, error))); + add(new MappingResult(currentMapping, new TargetAccessError(originalValue, error))); + } + + private void add(MappingResult result) { + if (logger.isDebugEnabled()) { + logger.debug("Adding " + result); + } + this.mappingResults.add(result); this.currentMapping = null; } diff --git a/spring-binding/src/main/java/org/springframework/binding/mapping/results/SourceAccessError.java b/spring-binding/src/main/java/org/springframework/binding/mapping/results/SourceAccessError.java index 354d3dc6..e9233e09 100644 --- a/spring-binding/src/main/java/org/springframework/binding/mapping/results/SourceAccessError.java +++ b/spring-binding/src/main/java/org/springframework/binding/mapping/results/SourceAccessError.java @@ -45,12 +45,12 @@ public class SourceAccessError extends Result { if (error instanceof PropertyNotFoundException) { return "propertyNotFound"; } else { - return "sourceAccess"; + return "evaluationException"; } } public String toString() { - return new ToStringCreator(this).append("error", error).toString(); + return new ToStringCreator(this).append("errorCode", getErrorCode()).append("details", error.getMessage()) + .toString(); } - } diff --git a/spring-binding/src/main/java/org/springframework/binding/mapping/results/Success.java b/spring-binding/src/main/java/org/springframework/binding/mapping/results/Success.java index 06ad8bd5..a589536b 100644 --- a/spring-binding/src/main/java/org/springframework/binding/mapping/results/Success.java +++ b/spring-binding/src/main/java/org/springframework/binding/mapping/results/Success.java @@ -40,7 +40,7 @@ public class Success extends Result { } public String toString() { - return new ToStringCreator(this).append("mappedValue", mappedValue).append("originalValue", originalValue) + return new ToStringCreator(this).append("originalValue", originalValue).append("mappedValue", mappedValue) .toString(); } } diff --git a/spring-binding/src/main/java/org/springframework/binding/mapping/results/TargetAccessError.java b/spring-binding/src/main/java/org/springframework/binding/mapping/results/TargetAccessError.java index 401ac488..330bb0cc 100644 --- a/spring-binding/src/main/java/org/springframework/binding/mapping/results/TargetAccessError.java +++ b/spring-binding/src/main/java/org/springframework/binding/mapping/results/TargetAccessError.java @@ -49,11 +49,12 @@ public class TargetAccessError extends Result { if (error instanceof PropertyNotFoundException) { return "propertyNotFound"; } else { - return "targetAccess"; + return "evaluationException"; } } public String toString() { - return new ToStringCreator(this).append("error", error).toString(); + return new ToStringCreator(this).append("errorCode", getErrorCode()).append("details", error.getMessage()) + .toString(); } } diff --git a/spring-binding/src/main/java/org/springframework/binding/method/MethodInvoker.java b/spring-binding/src/main/java/org/springframework/binding/method/MethodInvoker.java index 4653f238..cda468f5 100644 --- a/spring-binding/src/main/java/org/springframework/binding/method/MethodInvoker.java +++ b/spring-binding/src/main/java/org/springframework/binding/method/MethodInvoker.java @@ -21,7 +21,7 @@ import java.lang.reflect.Method; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.binding.convert.ConversionService; -import org.springframework.binding.convert.support.DefaultConversionService; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.core.style.StylerUtils; import org.springframework.util.CachingMapDecorator; @@ -39,7 +39,7 @@ public class MethodInvoker { /** * Conversion service for converting arguments to the necessary type if required. */ - private ConversionService conversionService = new DefaultConversionService(); + private ConversionService conversionService = DefaultConversionService.getSharedInstance(); /** * A cache of invoked bean methods, keyed weakly. diff --git a/spring-binding/src/test/java/org/springframework/binding/convert/support/ConversionExecutorImplTests.java b/spring-binding/src/test/java/org/springframework/binding/convert/service/ConversionExecutorImplTests.java similarity index 78% rename from spring-binding/src/test/java/org/springframework/binding/convert/support/ConversionExecutorImplTests.java rename to spring-binding/src/test/java/org/springframework/binding/convert/service/ConversionExecutorImplTests.java index 86e73cfe..8d381370 100644 --- a/spring-binding/src/test/java/org/springframework/binding/convert/support/ConversionExecutorImplTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/convert/service/ConversionExecutorImplTests.java @@ -13,23 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.service; import java.util.Date; import junit.framework.TestCase; import org.springframework.binding.convert.ConversionException; +import org.springframework.binding.convert.converters.AbstractConverter; +import org.springframework.binding.convert.service.StaticConversionExecutor; /** - * Test case for {@link ConversionExecutorImpl}. + * Test case for {@link StaticConversionExecutor}. */ public class ConversionExecutorImplTests extends TestCase { - private ConversionExecutorImpl conversionExecutor; + private StaticConversionExecutor conversionExecutor; protected void setUp() throws Exception { - conversionExecutor = new ConversionExecutorImpl(String.class, Date.class, new TestTextToDate()); + conversionExecutor = new StaticConversionExecutor(String.class, Date.class, new TestTextToDate()); } public void testTypeConversion() { 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/service/DefaultConversionServiceTests.java similarity index 83% rename from spring-binding/src/test/java/org/springframework/binding/convert/support/DefaultConversionServiceTests.java rename to spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java index 5482bb18..52b9266a 100644 --- a/spring-binding/src/test/java/org/springframework/binding/convert/support/DefaultConversionServiceTests.java +++ b/spring-binding/src/test/java/org/springframework/binding/convert/service/DefaultConversionServiceTests.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.binding.convert.support; +package org.springframework.binding.convert.service; import java.util.ArrayList; import java.util.HashMap; @@ -24,6 +24,9 @@ import junit.framework.TestCase; import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.Converter; +import org.springframework.binding.convert.converters.TextToBoolean; +import org.springframework.binding.convert.service.DefaultConversionService; +import org.springframework.binding.convert.service.StaticConversionExecutor; /** * Test case for the default conversion service. @@ -51,7 +54,7 @@ public class DefaultConversionServiceTests extends TestCase { DefaultConversionService service = new DefaultConversionService(); - ConversionExecutorImpl executor = (ConversionExecutorImpl) service.getConversionExecutor(String.class, + StaticConversionExecutor executor = (StaticConversionExecutor) service.getConversionExecutor(String.class, Boolean.class); assertNotSame(customConverter, executor.getConverter()); try { @@ -63,7 +66,7 @@ public class DefaultConversionServiceTests extends TestCase { service.addConverter(customConverter); - executor = (ConversionExecutorImpl) service.getConversionExecutor(String.class, Boolean.class); + executor = (StaticConversionExecutor) service.getConversionExecutor(String.class, Boolean.class); assertSame(customConverter, executor.getConverter()); assertTrue(((Boolean) executor.execute("ja")).booleanValue()); } diff --git a/spring-faces/src/main/java/org/springframework/faces/model/converter/DataModelConverter.java b/spring-faces/src/main/java/org/springframework/faces/model/converter/DataModelConverter.java index bd31b23d..783fda87 100644 --- a/spring-faces/src/main/java/org/springframework/faces/model/converter/DataModelConverter.java +++ b/spring-faces/src/main/java/org/springframework/faces/model/converter/DataModelConverter.java @@ -20,7 +20,7 @@ import java.util.List; import javax.faces.model.DataModel; -import org.springframework.binding.convert.support.AbstractConverter; +import org.springframework.binding.convert.converters.AbstractConverter; import org.springframework.util.ClassUtils; public class DataModelConverter extends AbstractConverter { diff --git a/spring-faces/src/main/java/org/springframework/faces/model/converter/FacesConversionService.java b/spring-faces/src/main/java/org/springframework/faces/model/converter/FacesConversionService.java index 66578e86..0aef23bd 100644 --- a/spring-faces/src/main/java/org/springframework/faces/model/converter/FacesConversionService.java +++ b/spring-faces/src/main/java/org/springframework/faces/model/converter/FacesConversionService.java @@ -13,8 +13,8 @@ e.org/licenses/LICENSE-2.0 package org.springframework.faces.model.converter; import org.springframework.binding.convert.ConversionService; -import org.springframework.binding.convert.support.DefaultConversionService; -import org.springframework.binding.convert.support.TextToClass; +import org.springframework.binding.convert.converters.TextToClass; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.faces.model.OneSelectionTrackingListDataModel; /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/action/AbstractBeanInvokingAction.java b/spring-webflow/src/main/java/org/springframework/webflow/action/AbstractBeanInvokingAction.java index 6161b484..43eaa684 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/action/AbstractBeanInvokingAction.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/action/AbstractBeanInvokingAction.java @@ -16,7 +16,7 @@ package org.springframework.webflow.action; import org.springframework.binding.convert.ConversionService; -import org.springframework.binding.convert.support.DefaultConversionService; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.binding.method.MethodInvoker; import org.springframework.binding.method.MethodSignature; import org.springframework.util.Assert; diff --git a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java index 9f0099b0..9ad2406f 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParser.java @@ -6,7 +6,7 @@ import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.binding.convert.support.DefaultConversionService; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.binding.format.FormatterRegistry; import org.springframework.binding.format.factories.BooleanFormatterFactory; import org.springframework.binding.format.factories.DateFormatterFactory; @@ -66,7 +66,8 @@ class FlowBuilderServicesBeanDefinitionParser extends AbstractSingleBeanDefiniti if (StringUtils.hasText(conversionService)) { definitionBuilder.addPropertyReference(CONVERSION_SERVICE_PROPERTY, conversionService); } else { - definitionBuilder.addPropertyValue(CONVERSION_SERVICE_PROPERTY, new DefaultConversionService()); + definitionBuilder.addPropertyValue(CONVERSION_SERVICE_PROPERTY, DefaultConversionService + .getSharedInstance()); } } diff --git a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java index be080750..efc2f6a3 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/config/FlowExecutorFactoryBean.java @@ -22,7 +22,7 @@ import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.ConversionService; -import org.springframework.binding.convert.support.DefaultConversionService; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.util.Assert; import org.springframework.webflow.conversation.ConversationManager; import org.springframework.webflow.conversation.impl.SessionBindingConversationManager; @@ -101,7 +101,7 @@ class FlowExecutorFactoryBean implements FactoryBean, InitializingBean { /** * The conversion service to use for type conversion of flow execution attribute values. */ - private ConversionService conversionService = new DefaultConversionService(); + private ConversionService conversionService = DefaultConversionService.getSharedInstance(); /** * The flow executor this factory bean creates. diff --git a/spring-webflow/src/main/java/org/springframework/webflow/core/collection/LocalParameterMap.java b/spring-webflow/src/main/java/org/springframework/webflow/core/collection/LocalParameterMap.java index 2e71c80c..2bdd4756 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/core/collection/LocalParameterMap.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/core/collection/LocalParameterMap.java @@ -29,7 +29,7 @@ import org.springframework.binding.collection.MapAccessor; import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.ConversionService; -import org.springframework.binding.convert.support.DefaultConversionService; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.core.style.StylerUtils; import org.springframework.util.Assert; import org.springframework.web.multipart.MultipartFile; @@ -65,7 +65,7 @@ public class LocalParameterMap implements ParameterMap, Serializable { * @param parameters the contents of this parameter map */ public LocalParameterMap(Map parameters) { - this(parameters, new DefaultConversionService()); + this(parameters, DefaultConversionService.getSharedInstance()); } /** diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java index 99af02fd..aa9a92c8 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/model/FlowModelFlowBuilder.java @@ -12,7 +12,7 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutor; -import org.springframework.binding.convert.support.RuntimeBindingConversionExecutor; +import org.springframework.binding.convert.service.RuntimeBindingConversionExecutor; import org.springframework.binding.expression.EvaluationException; import org.springframework.binding.expression.Expression; import org.springframework.binding.expression.ExpressionParser; diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/FlowBuilderContextImpl.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/FlowBuilderContextImpl.java index 209e9ed6..c07b3807 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/FlowBuilderContextImpl.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/FlowBuilderContextImpl.java @@ -2,7 +2,7 @@ package org.springframework.webflow.engine.builder.support; import org.springframework.beans.factory.BeanFactory; import org.springframework.binding.convert.ConversionService; -import org.springframework.binding.convert.support.GenericConversionService; +import org.springframework.binding.convert.service.GenericConversionService; import org.springframework.binding.expression.ExpressionParser; import org.springframework.binding.format.FormatterRegistry; import org.springframework.core.io.ResourceLoader; diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTargetStateResolver.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTargetStateResolver.java index 713d3afd..20b24c86 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTargetStateResolver.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTargetStateResolver.java @@ -15,7 +15,7 @@ */ package org.springframework.webflow.engine.builder.support; -import org.springframework.binding.convert.support.AbstractConverter; +import org.springframework.binding.convert.converters.AbstractConverter; import org.springframework.binding.expression.Expression; import org.springframework.binding.expression.ExpressionParser; import org.springframework.binding.expression.support.ParserContextImpl; diff --git a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTransitionCriteria.java b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTransitionCriteria.java index 76dfe477..59da9af9 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTransitionCriteria.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/engine/builder/support/TextToTransitionCriteria.java @@ -16,7 +16,7 @@ package org.springframework.webflow.engine.builder.support; import org.springframework.binding.convert.ConversionException; -import org.springframework.binding.convert.support.AbstractConverter; +import org.springframework.binding.convert.converters.AbstractConverter; import org.springframework.binding.expression.Expression; import org.springframework.binding.expression.ExpressionParser; import org.springframework.binding.expression.ExpressionVariable; diff --git a/spring-webflow/src/main/java/org/springframework/webflow/test/TestFlowBuilderServicesFactory.java b/spring-webflow/src/main/java/org/springframework/webflow/test/TestFlowBuilderServicesFactory.java index 5127ea9c..1487e2fe 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/test/TestFlowBuilderServicesFactory.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/test/TestFlowBuilderServicesFactory.java @@ -1,7 +1,7 @@ package org.springframework.webflow.test; import org.springframework.beans.factory.support.StaticListableBeanFactory; -import org.springframework.binding.convert.support.DefaultConversionService; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.webflow.engine.builder.support.FlowBuilderServices; import org.springframework.webflow.expression.DefaultExpressionParserFactory; @@ -17,7 +17,7 @@ public class TestFlowBuilderServicesFactory { public static FlowBuilderServices getServices() { FlowBuilderServices services = new FlowBuilderServices(); services.setViewFactoryCreator(new MockViewFactoryCreator()); - services.setConversionService(new DefaultConversionService()); + services.setConversionService(DefaultConversionService.getSharedInstance()); services.setExpressionParser(DefaultExpressionParserFactory.getExpressionParser()); services.setResourceLoader(new DefaultResourceLoader()); services.setBeanFactory(new StaticListableBeanFactory()); diff --git a/spring-webflow/src/test/java/org/springframework/webflow/action/ActionResultExposerTests.java b/spring-webflow/src/test/java/org/springframework/webflow/action/ActionResultExposerTests.java index 43b6fbcb..1428e3af 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/action/ActionResultExposerTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/action/ActionResultExposerTests.java @@ -2,7 +2,7 @@ package org.springframework.webflow.action; import junit.framework.TestCase; -import org.springframework.binding.convert.support.DefaultConversionService; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.binding.expression.support.StaticExpression; import org.springframework.webflow.test.MockRequestContext; diff --git a/spring-webflow/src/test/java/org/springframework/webflow/action/SetActionTests.java b/spring-webflow/src/test/java/org/springframework/webflow/action/SetActionTests.java index 54ae2906..ee6b13e9 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/action/SetActionTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/action/SetActionTests.java @@ -2,7 +2,7 @@ package org.springframework.webflow.action; import junit.framework.TestCase; -import org.springframework.binding.convert.support.DefaultConversionService; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.binding.expression.support.StaticExpression; import org.springframework.webflow.execution.Event; import org.springframework.webflow.test.MockRequestContext; diff --git a/spring-webflow/src/test/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParserTests.java b/spring-webflow/src/test/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParserTests.java index 94970a6c..4d7f4013 100644 --- a/spring-webflow/src/test/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParserTests.java +++ b/spring-webflow/src/test/java/org/springframework/webflow/config/FlowBuilderServicesBeanDefinitionParserTests.java @@ -5,7 +5,7 @@ import junit.framework.TestCase; import org.springframework.binding.convert.ConversionException; import org.springframework.binding.convert.ConversionExecutor; import org.springframework.binding.convert.ConversionService; -import org.springframework.binding.convert.support.DefaultConversionService; +import org.springframework.binding.convert.service.DefaultConversionService; import org.springframework.binding.expression.Expression; import org.springframework.binding.expression.ExpressionParser; import org.springframework.binding.format.FormatterRegistry;