private static void injectTurbineService()

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);
        }
    }