Fix issue with SpEL in mvc namespace
This change ensures that the location attribute of a resource mapping and the path attribute of an interceptor mapping support SpEL expressions. Issue: SPR-9291, SPR-9848
This commit is contained in:
parent
950f00a280
commit
62f2858f7f
|
@ -21,6 +21,7 @@ import java.util.List;
|
||||||
import org.springframework.beans.factory.config.BeanDefinition;
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
|
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
|
||||||
import org.springframework.beans.factory.parsing.CompositeComponentDefinition;
|
import org.springframework.beans.factory.parsing.CompositeComponentDefinition;
|
||||||
|
import org.springframework.beans.factory.support.ManagedList;
|
||||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||||
import org.springframework.beans.factory.xml.BeanDefinitionParser;
|
import org.springframework.beans.factory.xml.BeanDefinitionParser;
|
||||||
import org.springframework.beans.factory.xml.ParserContext;
|
import org.springframework.beans.factory.xml.ParserContext;
|
||||||
|
@ -47,8 +48,8 @@ class InterceptorsBeanDefinitionParser implements BeanDefinitionParser {
|
||||||
mappedInterceptorDef.setSource(parserContext.extractSource(interceptor));
|
mappedInterceptorDef.setSource(parserContext.extractSource(interceptor));
|
||||||
mappedInterceptorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
mappedInterceptorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||||
|
|
||||||
String[] includePatterns = null;
|
ManagedList<String> includePatterns = null;
|
||||||
String[] excludePatterns = null;
|
ManagedList<String> excludePatterns = null;
|
||||||
Object interceptorBean;
|
Object interceptorBean;
|
||||||
if ("interceptor".equals(interceptor.getLocalName())) {
|
if ("interceptor".equals(interceptor.getLocalName())) {
|
||||||
includePatterns = getIncludePatterns(interceptor, "mapping");
|
includePatterns = getIncludePatterns(interceptor, "mapping");
|
||||||
|
@ -71,11 +72,11 @@ class InterceptorsBeanDefinitionParser implements BeanDefinitionParser {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String[] getIncludePatterns(Element interceptor, String elementName) {
|
private ManagedList<String> getIncludePatterns(Element interceptor, String elementName) {
|
||||||
List<Element> paths = DomUtils.getChildElementsByTagName(interceptor, elementName);
|
List<Element> paths = DomUtils.getChildElementsByTagName(interceptor, elementName);
|
||||||
String[] patterns = new String[paths.size()];
|
ManagedList<String> patterns = new ManagedList<String>(paths.size());
|
||||||
for (int i = 0; i < paths.size(); i++) {
|
for (int i = 0; i < paths.size(); i++) {
|
||||||
patterns[i] = paths.get(i).getAttribute("path");
|
patterns.add(paths.get(i).getAttribute("path"));
|
||||||
}
|
}
|
||||||
return patterns;
|
return patterns;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.w3c.dom.Element;
|
||||||
|
|
||||||
import org.springframework.beans.factory.config.BeanDefinition;
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
|
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
|
||||||
|
import org.springframework.beans.factory.support.ManagedList;
|
||||||
import org.springframework.beans.factory.support.ManagedMap;
|
import org.springframework.beans.factory.support.ManagedMap;
|
||||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||||
import org.springframework.beans.factory.xml.BeanDefinitionParser;
|
import org.springframework.beans.factory.xml.BeanDefinitionParser;
|
||||||
|
@ -87,10 +88,13 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ManagedList<String> locations = new ManagedList<String>();
|
||||||
|
locations.addAll(StringUtils.commaDelimitedListToSet(locationAttr));
|
||||||
|
|
||||||
RootBeanDefinition resourceHandlerDef = new RootBeanDefinition(ResourceHttpRequestHandler.class);
|
RootBeanDefinition resourceHandlerDef = new RootBeanDefinition(ResourceHttpRequestHandler.class);
|
||||||
resourceHandlerDef.setSource(source);
|
resourceHandlerDef.setSource(source);
|
||||||
resourceHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
resourceHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||||
resourceHandlerDef.getPropertyValues().add("locations", StringUtils.commaDelimitedListToStringArray(locationAttr));
|
resourceHandlerDef.getPropertyValues().add("locations", locations);
|
||||||
|
|
||||||
String cacheSeconds = element.getAttribute("cache-period");
|
String cacheSeconds = element.getAttribute("cache-period");
|
||||||
if (StringUtils.hasText(cacheSeconds)) {
|
if (StringUtils.hasText(cacheSeconds)) {
|
||||||
|
|
Loading…
Reference in New Issue