
com.opensymphony.xwork2.config.providers.InterceptorBuilder Maven / Gradle / Ivy
Go to download
XWork is an command-pattern framework that is used to power WebWork
as well as other applications. XWork provides an Inversion of Control
container, a powerful expression language, data type conversion,
validation, and pluggable configuration.
/*
* Copyright (c) 2002-2006 by OpenSymphony
* All rights reserved.
*/
package com.opensymphony.xwork2.config.providers;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.config.entities.InterceptorConfig;
import com.opensymphony.xwork2.config.entities.InterceptorMapping;
import com.opensymphony.xwork2.config.entities.InterceptorStackConfig;
import com.opensymphony.xwork2.config.entities.PackageConfig;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.util.location.Location;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.*;
/**
* Builds a list of interceptors referenced by the refName in the supplied PackageConfig.
*
* @author Mike
* @author Rainer Hermanns
* @author tmjee
* @version $Date: 2006-11-13 09:05:32 +0100 (Mo, 13 Nov 2006) $ $Id: InterceptorBuilder.java 1187 2006-11-13 08:05:32Z mrdon $
*/
public class InterceptorBuilder {
private static final Log LOG = LogFactory.getLog(InterceptorBuilder.class);
/**
* Builds a list of interceptors referenced by the refName in the supplied PackageConfig.
*
* @param packageConfig
* @param refName
* @param refParams
* @return list of interceptors referenced by the refName in the supplied PackageConfig.
* @throws ConfigurationException
*/
public static List constructInterceptorReference(PackageConfig packageConfig,
String refName, Map refParams, Location location, ObjectFactory objectFactory) throws ConfigurationException {
Object referencedConfig = packageConfig.getAllInterceptorConfigs().get(refName);
List result = new ArrayList();
if (referencedConfig == null) {
throw new ConfigurationException("Unable to find interceptor class referenced by ref-name " + refName, location);
} else {
if (referencedConfig instanceof InterceptorConfig) {
InterceptorConfig config = (InterceptorConfig) referencedConfig;
Interceptor inter = null;
try {
inter = objectFactory.buildInterceptor(config, refParams);
result.add(new InterceptorMapping(refName, inter));
} catch (ConfigurationException ex) {
LOG.warn("Unable to load config class "+config.getClassName()+" at "+
ex.getLocation()+" probably due to a missing jar, which might "+
"be fine if you never plan to use the "+config.getName()+" interceptor");
LOG.error("Actual exception", ex);
}
} else if (referencedConfig instanceof InterceptorStackConfig) {
InterceptorStackConfig stackConfig = (InterceptorStackConfig) referencedConfig;
if ((refParams != null) && (refParams.size() > 0)) {
result = constructParameterizedInterceptorReferences(packageConfig, stackConfig, refParams, objectFactory);
} else {
result.addAll(stackConfig.getInterceptors());
}
} else {
LOG.error("Got unexpected type for interceptor " + refName + ". Got " + referencedConfig);
}
}
return result;
}
/**
* Builds a list of interceptors referenced by the refName in the supplied PackageConfig overriding the properties
* of the referenced interceptor with refParams.
*
* @param packageConfig
* @param stackConfig
* @param refParams The overridden interceptor properies
* @return list of interceptors referenced by the refName in the supplied PackageConfig overridden with refParams.
*/
private static List constructParameterizedInterceptorReferences(
PackageConfig packageConfig, InterceptorStackConfig stackConfig, Map refParams,
ObjectFactory objectFactory) {
List result;
Map> params = new HashMap>();
for (Iterator iter = refParams.keySet().iterator(); iter.hasNext();) {
String key = (String) iter.next();
String value = (String) refParams.get(key);
try {
String name = key.substring(0, key.indexOf('.'));
key = key.substring(key.indexOf('.') + 1);
Map
© 2015 - 2025 Weber Informatics LLC | Privacy Policy