support for transfomer custom converters

This commit is contained in:
Keith Donald
2008-09-18 20:58:01 +00:00
parent 6eb7e9041f
commit 4e55681d3a
4 changed files with 30 additions and 363 deletions

View File

@@ -171,11 +171,6 @@ public class GenericConversionService implements ConversionService {
Assert.hasText(id, "The id of the custom converter is required");
Assert.notNull(sourceClass, "The source class to convert from is required");
Assert.notNull(targetClass, "The target class to convert to is required");
sourceClass = convertToWrapperClassIfNecessary(sourceClass);
targetClass = convertToWrapperClassIfNecessary(targetClass);
if (targetClass.isAssignableFrom(sourceClass)) {
return new StaticConversionExecutor(sourceClass, targetClass, new NoOpConverter(sourceClass, targetClass));
}
Converter converter = (Converter) customConverters.get(id);
if (converter == null) {
if (parent != null) {
@@ -186,6 +181,8 @@ public class GenericConversionService implements ConversionService {
+ sourceClass.getName() + "] to targetClass [" + targetClass.getName() + "]");
}
}
sourceClass = convertToWrapperClassIfNecessary(sourceClass);
targetClass = convertToWrapperClassIfNecessary(targetClass);
if (converter.getSourceClass().isAssignableFrom(sourceClass)) {
if (!converter.getTargetClass().isAssignableFrom(targetClass)) {
throw new ConversionExecutorNotFoundException(sourceClass, targetClass,

View File

@@ -87,13 +87,9 @@ public class StaticConversionExecutor implements ConversionExecutor {
}
public Object execute(Object source) throws ConversionExecutionException {
if (targetClass.isInstance(source)) {
// source is already assignment compatible with target class
return source;
}
if (source != null && !sourceClass.isInstance(source)) {
throw new ConversionExecutionException(source, getSourceClass(), getTargetClass(), "Source object "
+ source + " is expected to be an instance of " + getSourceClass());
+ source + " to convert is expected to be an instance of " + getSourceClass());
}
try {
return converter.convertSourceToTargetClass(source, targetClass);