in src/java/org/apache/turbine/annotation/AnnotationProcessor.java [438:562]
private static void injectTurbineConfiguration(Object object, Configuration conf, Field field, TurbineConfiguration annotation) throws TurbineException
{
Class<?> type = field.getType();
String key = annotation.value();
try
{
if (Configuration.class.isAssignableFrom(type))
{
final Configuration injectConfiguration;
// Check for annotation value
if (StringUtils.isNotEmpty(key))
{
injectConfiguration = conf.subset(key);
}
else
{
injectConfiguration = conf;
}
log.debug("Injection of {} into object {}", injectConfiguration, object);
field.setAccessible(true);
field.set(object, injectConfiguration);
}
else if (conf.containsKey(key))
{
if ( String.class.isAssignableFrom( type ) )
{
String value = conf.getString(key);
log.debug("Injection of key {} into object {}", value, object);
field.setAccessible(true);
field.set(object, value);
}
else if ( Boolean.TYPE.isAssignableFrom( type ) )
{
boolean value = conf.getBoolean(key);
log.debug("Injection of key {} into object {}", value, object);
field.setAccessible(true);
field.setBoolean(object, value);
}
else if ( Integer.TYPE.isAssignableFrom( type ) )
{
int value = conf.getInt(key);
log.debug("Injection of key {} into object {}", value, object);
field.setAccessible(true);
field.setInt(object, value);
}
else if ( Long.TYPE.isAssignableFrom( type ) )
{
long value = conf.getLong(key);
log.debug("Injection of key {} into object {}", value, object);
field.setAccessible(true);
field.setLong(object, value);
}
else if ( Short.TYPE.isAssignableFrom( type ) )
{
short value = conf.getShort(key);
log.debug("Injection of key {} into object {}", value, object);
field.setAccessible(true);
field.setShort(object, value);
}
else if ( Long.TYPE.isAssignableFrom( type ) )
{
long value = conf.getLong(key);
log.debug("Injection of key {} into object {}", value, object);
field.setAccessible(true);
field.setLong(object, value);
}
else if ( Float.TYPE.isAssignableFrom( type ) )
{
float value = conf.getFloat(key);
log.debug("Injection of key {} into object {}", value, object);
field.setAccessible(true);
field.setFloat(object, value);
}
else if ( Double.TYPE.isAssignableFrom( type ) )
{
double value = conf.getDouble(key);
log.debug("Injection of key {} into object {}", value, object);
field.setAccessible(true);
field.setDouble(object, value);
}
else if ( Byte.TYPE.isAssignableFrom( type ) )
{
byte value = conf.getByte(key);
log.debug("Injection of key {} into object {}", value, object);
field.setAccessible(true);
field.setByte(object, value);
}
else if ( List.class.isAssignableFrom( type ) )
{
List<Object> values = conf.getList(key);
log.debug("Injection of key {} into object {}", values, object);
field.setAccessible(true);
field.set(object, values);
} else {
throw new TurbineException("Could not inject type " +
type + " into object " + object + ". Type "+ type + " not assignable in configuration "
+ conf + " (allowed: String, Boolean, List, Number Types, "+ Configuration.class.getName() + ").");
}
} else {
field.setAccessible(true);
Object defaultValue = field.get(object);
// this should not throw an error as it might be set later from container e. g. session.timeout
// we might check field.get<Type> to show the default value of the field, but this is only a guess, it might be set even later..
log.info("No key {} of type {} injected into object {}. Field {} is set to default {}.", key, type, object, field.getName(), defaultValue);
}
}
catch (IllegalArgumentException | IllegalAccessException e)
{
throw new TurbineException("Could not inject configuration "
+ conf + " into object " + object, e);
}
}