public static <U> void processFieldConfigAnnotations(U instance, SmooksResourceConfiguration config, boolean includeConfigParams) { Class contentHandlerClass = instance.getClass(); if(includeConfigParams) { processFieldConfigParamAnnotations(contentHandlerClass, instance, config); } processFieldConfigAnnotations(contentHandlerClass, instance, config); processStreamResultWriterAnnotations(instance, config); }
private static <U> void processFieldConfigAnnotations(Class contentHandlerClass, U instance, SmooksResourceConfiguration config) { Field[] fields = contentHandlerClass.getDeclaredFields(); // Work back up the Inheritance tree first... Class superClass = contentHandlerClass.getSuperclass(); if(superClass != null) { processFieldConfigAnnotations(superClass, instance, config); } for (Field field : fields) { ConfigParam configParamAnnotation = field.getAnnotation(ConfigParam.class); Config configAnnotation = field.getAnnotation(Config.class); if(configAnnotation != null) { if(configParamAnnotation != null) { throw new SmooksConfigurationException("Invalid Smooks configuration annotations on Field '" + getLongMemberName(field) + "'. Field should not specify both @ConfigParam and @Config annotations."); } applyConfig(field, instance, config); } } }
/** * Configure the supplied {@link org.dhatim.delivery.ContentHandler} instance using the supplied * {@link SmooksResourceConfiguration} instance. * @param instance The instance to be configured. * @param config The configuration. * @return The configured ContentHandler instance. * @throws SmooksConfigurationException Invalid field annotations. */ public static <U> U configure(U instance, SmooksResourceConfiguration config) throws SmooksConfigurationException { AssertArgument.isNotNull(instance, "instance"); AssertArgument.isNotNull(config, "config"); // process the field annotations (@ConfigParam and @Config)... processFieldConfigAnnotations(instance, config, true); // process the method annotations (@ConfigParam)... processMethodConfigAnnotations(instance, config); // reflectively call the "setConfiguration" method, if defined... setConfiguration(instance, config); // process the @Initialise annotations... initialise(instance); return instance; }
Configurator.processFieldConfigAnnotations(visitor, resourceConfig, false); Configurator.initialise(visitor); applicationContext.getStore().getInitializedObjects().add(visitor);