package com.opensymphony.xwork2.factory; import com.opensymphony.xwork2.ObjectFactory; import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.config.entities.InterceptorConfig; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.interceptor.Interceptor; import com.opensymphony.xwork2.util.reflection.ReflectionProvider; import java.util.HashMap; import java.util.Map; /** * Default implementation */ public class DefaultInterceptorFactory implements InterceptorFactory { private ObjectFactory objectFactory; private ReflectionProvider reflectionProvider; @Inject public void setObjectFactory(ObjectFactory objectFactory) { this.objectFactory = objectFactory; } @Inject public void setReflectionProvider(ReflectionProvider reflectionProvider) { this.reflectionProvider = reflectionProvider; } public Interceptor buildInterceptor(InterceptorConfig interceptorConfig, Map<String, String> interceptorRefParams) throws ConfigurationException { String interceptorClassName = interceptorConfig.getClassName(); Map<String, String> thisInterceptorClassParams = interceptorConfig.getParams(); Map<String, String> params = (thisInterceptorClassParams == null) ? new HashMap<String, String>() : new HashMap<String, String>(thisInterceptorClassParams); params.putAll(interceptorRefParams); String message; Throwable cause; try { // interceptor instances are long-lived and used across user sessions, so don't try to pass in any extra context Interceptor interceptor = (Interceptor) objectFactory.buildBean(interceptorClassName, null); reflectionProvider.setProperties(params, interceptor); interceptor.init(); return interceptor; } catch (InstantiationException e) { cause = e; message = "Unable to instantiate an instance of Interceptor class [" + interceptorClassName + "]."; } catch (IllegalAccessException e) { cause = e; message = "IllegalAccessException while attempting to instantiate an instance of Interceptor class [" + interceptorClassName + "]."; } catch (ClassCastException e) { cause = e; message = "Class [" + interceptorClassName + "] does not implement com.opensymphony.xwork2.interceptor.Interceptor"; } catch (Exception e) { cause = e; message = "Caught Exception while registering Interceptor class " + interceptorClassName; } catch (NoClassDefFoundError e) { cause = e; message = "Could not load class " + interceptorClassName + ". Perhaps it exists but certain dependencies are not available?"; } throw new ConfigurationException(message, cause, interceptorConfig); } }