in src/java/org/apache/turbine/annotation/AnnotationProcessor.java [630:680]
private static void injectTurbineService(Object object, ServiceManager manager, Method method, TurbineService annotation) throws TurbineException
{
String serviceName = null;
// Check for annotation value
if (annotation != null && StringUtils.isNotEmpty(annotation.value()))
{
serviceName = annotation.value();
}
else
{
Class<?>[] classes = method.getParameterTypes();
for (Class<?> c : classes)
{
Field[] fields = c.getFields();
// Check for fields SERVICE_NAME and ROLE
serviceName = checkServiceOrRoleInField(serviceName, fields);
if ( (serviceName == null || serviceName.equals(Service.SERVICE_NAME)) &&
c.isAnnotationPresent(TurbineService.class)) {
TurbineService service = c.getAnnotation(TurbineService.class);
log.debug("retrieved class annotation: "+ service);
serviceName = service.value();
}
}
}
log.debug("Looking up service for injection: {} for object {}", serviceName, object);
if (StringUtils.isEmpty(serviceName))
{
// Try interface class name
serviceName = method.getName();
}
Object service = manager.getService(serviceName); // throws Exception on unknown service
method.setAccessible(true);
try
{
log.debug("Injection of {} into object {}", serviceName, object);
Object[] paramValues = new Object[1];
paramValues[0] = service;
method.invoke(object, paramValues);
}
catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e)
{
throw new TurbineException("Could not inject service "
+ serviceName + " into object " + object, e);
}
}