private static void injectTurbineService()

in src/java/org/apache/turbine/annotation/AnnotationProcessor.java [574:619]


    private static void injectTurbineService(Object object, ServiceManager manager, Field field, TurbineService annotation) throws TurbineException
    {
        String serviceName = null;
        // Check for annotation value
        if (annotation != null && StringUtils.isNotEmpty(annotation.value()))
        {
            serviceName = annotation.value();
        }
        // Check for fields SERVICE_NAME and ROLE
        else
        { 
            // check field level annotation
            Field[] typeFields = field.getType().getFields();
            serviceName = checkServiceOrRoleInField(serviceName, typeFields);
            // if it is the default Service, we check class level annotation
            if ( (serviceName == null || serviceName.equals(Service.SERVICE_NAME)) &&
                    field.getType().isAnnotationPresent(TurbineService.class)) {
                TurbineService service = field.getType().getAnnotation(TurbineService.class);
                log.debug("retrieved class annotation: "+ service);
                serviceName = service.value();
            } 
        }

        if (StringUtils.isEmpty(serviceName))
        {
            // Try interface class name (e.g. used by Fulcrum)
            serviceName = field.getType().getName();
        }

        log.debug("Looking up service for injection: {} for object {}", serviceName, object);

        Object service = manager.getService(serviceName); // throws Exception on unknown service
        field.setAccessible(true);

        try
        {
            log.debug("Injection of {} into object {}", serviceName, object);

            field.set(object, service);
        }
        catch (IllegalArgumentException | IllegalAccessException e)
        {
            throw new TurbineException("Could not inject service "
                    + serviceName + " into object " + object, e);
        }
    }