in velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/UberspectImpl.java [102:182]
public void setRuntimeServices(RuntimeServices rs)
{
rsvc = rs;
log = rsvc.getLog("introspection");
Object conversionHandlerInstance = rs.getProperty(RuntimeConstants.CONVERSION_HANDLER_INSTANCE);
if (conversionHandlerInstance == null)
{
String conversionHandlerClass = rs.getString(RuntimeConstants.CONVERSION_HANDLER_CLASS);
if (conversionHandlerClass != null && !conversionHandlerClass.equals("none"))
{
try
{
conversionHandlerInstance = ClassUtils.getNewInstance(conversionHandlerClass);
}
catch (ClassNotFoundException cnfe )
{
String err = "The specified class for ConversionHandler (" + conversionHandlerClass
+ ") does not exist or is not accessible to the current classloader.";
log.error(err);
throw new VelocityException(err, cnfe);
}
catch (InstantiationException ie)
{
throw new VelocityException("Could not instantiate class '" + conversionHandlerClass + "'", ie);
}
catch (IllegalAccessException ae)
{
throw new VelocityException("Cannot access class '" + conversionHandlerClass + "'", ae);
}
}
}
if (conversionHandlerInstance != null)
{
if (conversionHandlerInstance instanceof ConversionHandler)
{
log.warn("The ConversionHandler interface is deprecated - see the TypeConversionHandler interface");
final ConversionHandler ch = (ConversionHandler)conversionHandlerInstance;
conversionHandler = new TypeConversionHandler()
{
@Override
public boolean isExplicitlyConvertible(Type formal, Class<?> actual, boolean possibleVarArg)
{
Class<?> formalClass = IntrospectionUtils.getTypeClass(formal);
if (formalClass != null) return ch.isExplicitlyConvertible(formalClass, actual, possibleVarArg);
else return false;
}
@Override
public Converter<?> getNeededConverter(Type formal, Class<?> actual)
{
Class<?> formalClass = IntrospectionUtils.getTypeClass(formal);
if (formalClass != null) return ch.getNeededConverter(formalClass, actual);
else return null;
}
@Override
public void addConverter(Type formal, Class<?> actual, Converter<?> converter)
{
Class<?> formalClass = IntrospectionUtils.getTypeClass(formal);
if (formalClass != null) ch.addConverter(formalClass, actual, converter);
else throw new UnsupportedOperationException("This conversion handler doesn't know how to handle Type: " + formal.getTypeName());
}
};
}
else if (!(conversionHandlerInstance instanceof TypeConversionHandler))
{
String err = "The specified class or provided instance for the conversion handler (" + conversionHandlerInstance.getClass().getName()
+ ") does not implement " + TypeConversionHandler.class.getName()
+ "; Velocity is not initialized correctly.";
log.error(err);
throw new VelocityException(err, null, rsvc.getLogContext().getStackTrace());
}
else
{
conversionHandler = (TypeConversionHandler)conversionHandlerInstance;
}
}
}