getConverter calls now throw exception and query parent
This commit is contained in:
parent
5faa4d90ac
commit
6ce33dba75
|
|
@ -53,7 +53,13 @@ import org.springframework.util.ClassUtils;
|
|||
*/
|
||||
public class GenericConversionService implements ConversionService, ConverterRegistry {
|
||||
|
||||
private ConversionService parent;
|
||||
private static final GenericConverter NO_OP_CONVERTER = new GenericConverter() {
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||
return source;
|
||||
}
|
||||
};
|
||||
|
||||
private GenericConversionService parent;
|
||||
|
||||
private final Map<Class, Map<Class, GenericConverter>> sourceTypeConverters = new HashMap<Class, Map<Class, GenericConverter>>();
|
||||
|
||||
|
|
@ -86,7 +92,7 @@ public class GenericConversionService implements ConversionService, ConverterReg
|
|||
/**
|
||||
* Set the parent of this conversion service. This is optional.
|
||||
*/
|
||||
public void setParent(ConversionService parent) {
|
||||
public void setParent(GenericConversionService parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
|
|
@ -142,8 +148,7 @@ public class GenericConversionService implements ConversionService, ConverterReg
|
|||
if (targetType == TypeDescriptor.NULL) {
|
||||
return true;
|
||||
}
|
||||
return getConverter(sourceType, targetType) != null || this.parent != null
|
||||
&& this.parent.canConvert(sourceType, targetType);
|
||||
return getConverter(sourceType, targetType) != null;
|
||||
}
|
||||
|
||||
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||
|
|
@ -158,7 +163,6 @@ public class GenericConversionService implements ConversionService, ConverterReg
|
|||
return null;
|
||||
}
|
||||
GenericConverter converter = getConverter(sourceType, targetType);
|
||||
if (converter != null) {
|
||||
try {
|
||||
return converter.convert(source, sourceType, targetType);
|
||||
} catch (ConversionFailedException e) {
|
||||
|
|
@ -166,17 +170,6 @@ public class GenericConversionService implements ConversionService, ConverterReg
|
|||
} catch (Exception e) {
|
||||
throw new ConversionFailedException(sourceType, targetType, source, e);
|
||||
}
|
||||
} else {
|
||||
if (this.parent != null) {
|
||||
return this.parent.convert(source, sourceType, targetType);
|
||||
} else {
|
||||
if (targetType.isAssignableValue(source)) {
|
||||
return source;
|
||||
} else {
|
||||
throw new ConverterNotFoundException(sourceType, targetType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// subclassing hooks
|
||||
|
|
@ -202,7 +195,19 @@ public class GenericConversionService implements ConversionService, ConverterReg
|
|||
}
|
||||
|
||||
protected GenericConverter getConverter(TypeDescriptor sourceType, TypeDescriptor targetType) {
|
||||
return findConverterByClassPair(sourceType.getObjectType(), targetType.getObjectType());
|
||||
GenericConverter converter = findConverterByClassPair(sourceType.getObjectType(), targetType.getObjectType());
|
||||
if (converter != null) {
|
||||
return converter;
|
||||
}
|
||||
if (this.parent != null) {
|
||||
return this.parent.getConverter(sourceType, targetType);
|
||||
} else {
|
||||
if (sourceType.isAssignableTo(targetType)) {
|
||||
return NO_OP_CONVERTER;
|
||||
} else {
|
||||
throw new ConverterNotFoundException(sourceType, targetType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// internal helpers
|
||||
|
|
|
|||
Loading…
Reference in New Issue