diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java index 1e42f33d1a0..52fe3071fa4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java @@ -30,7 +30,6 @@ import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.UrlResource; import org.springframework.util.AntPathMatcher; -import org.springframework.util.Assert; import org.springframework.util.PathMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping; @@ -129,16 +128,16 @@ public abstract class MvcNamespaceUtils { * Registers an {@link HttpRequestHandlerAdapter} under a well-known * name unless already registered. */ - private static void registerBeanNameUrlHandlerMapping(ParserContext parserContext, Object source) { - if (!parserContext.getRegistry().containsBeanDefinition(BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME)){ - RootBeanDefinition beanNameMappingDef = new RootBeanDefinition(BeanNameUrlHandlerMapping.class); - beanNameMappingDef.setSource(source); - beanNameMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - beanNameMappingDef.getPropertyValues().add("order", 2); // consistent with WebMvcConfigurationSupport - RuntimeBeanReference corsConfigurationsRef = MvcNamespaceUtils.registerCorsConfigurations(null, parserContext, source); - beanNameMappingDef.getPropertyValues().add("corsConfigurations", corsConfigurationsRef); - parserContext.getRegistry().registerBeanDefinition(BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME, beanNameMappingDef); - parserContext.registerComponent(new BeanComponentDefinition(beanNameMappingDef, BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME)); + private static void registerBeanNameUrlHandlerMapping(ParserContext context, Object source) { + if (!context.getRegistry().containsBeanDefinition(BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME)){ + RootBeanDefinition mappingDef = new RootBeanDefinition(BeanNameUrlHandlerMapping.class); + mappingDef.setSource(source); + mappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); + mappingDef.getPropertyValues().add("order", 2); // consistent with WebMvcConfigurationSupport + RuntimeBeanReference corsRef = MvcNamespaceUtils.registerCorsConfigurations(null, context, source); + mappingDef.getPropertyValues().add("corsConfigurations", corsRef); + context.getRegistry().registerBeanDefinition(BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME, mappingDef); + context.registerComponent(new BeanComponentDefinition(mappingDef, BEAN_NAME_URL_HANDLER_MAPPING_BEAN_NAME)); } } @@ -146,13 +145,13 @@ public abstract class MvcNamespaceUtils { * Registers an {@link HttpRequestHandlerAdapter} under a well-known * name unless already registered. */ - private static void registerHttpRequestHandlerAdapter(ParserContext parserContext, Object source) { - if (!parserContext.getRegistry().containsBeanDefinition(HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME)) { - RootBeanDefinition handlerAdapterDef = new RootBeanDefinition(HttpRequestHandlerAdapter.class); - handlerAdapterDef.setSource(source); - handlerAdapterDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - parserContext.getRegistry().registerBeanDefinition(HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME, handlerAdapterDef); - parserContext.registerComponent(new BeanComponentDefinition(handlerAdapterDef, HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME)); + private static void registerHttpRequestHandlerAdapter(ParserContext context, Object source) { + if (!context.getRegistry().containsBeanDefinition(HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME)) { + RootBeanDefinition adapterDef = new RootBeanDefinition(HttpRequestHandlerAdapter.class); + adapterDef.setSource(source); + adapterDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); + context.getRegistry().registerBeanDefinition(HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME, adapterDef); + context.registerComponent(new BeanComponentDefinition(adapterDef, HTTP_REQUEST_HANDLER_ADAPTER_BEAN_NAME)); } } @@ -160,13 +159,13 @@ public abstract class MvcNamespaceUtils { * Registers a {@link SimpleControllerHandlerAdapter} under a well-known * name unless already registered. */ - private static void registerSimpleControllerHandlerAdapter(ParserContext parserContext, Object source) { - if (!parserContext.getRegistry().containsBeanDefinition(SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME)) { - RootBeanDefinition handlerAdapterDef = new RootBeanDefinition(SimpleControllerHandlerAdapter.class); - handlerAdapterDef.setSource(source); - handlerAdapterDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - parserContext.getRegistry().registerBeanDefinition(SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME, handlerAdapterDef); - parserContext.registerComponent(new BeanComponentDefinition(handlerAdapterDef, SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME)); + private static void registerSimpleControllerHandlerAdapter(ParserContext context, Object source) { + if (!context.getRegistry().containsBeanDefinition(SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME)) { + RootBeanDefinition beanDef = new RootBeanDefinition(SimpleControllerHandlerAdapter.class); + beanDef.setSource(source); + beanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); + context.getRegistry().registerBeanDefinition(SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME, beanDef); + context.registerComponent(new BeanComponentDefinition(beanDef, SIMPLE_CONTROLLER_HANDLER_ADAPTER_BEAN_NAME)); } } @@ -177,21 +176,21 @@ public abstract class MvcNamespaceUtils { * @return a RuntimeBeanReference to this {@code Map} instance */ public static RuntimeBeanReference registerCorsConfigurations( - Map corsConfigurations, ParserContext parserContext, Object source) { + Map corsConfigurations, ParserContext context, Object source) { - if (!parserContext.getRegistry().containsBeanDefinition(CORS_CONFIGURATION_BEAN_NAME)) { - RootBeanDefinition corsConfigurationsDef = new RootBeanDefinition(LinkedHashMap.class); - corsConfigurationsDef.setSource(source); - corsConfigurationsDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); + if (!context.getRegistry().containsBeanDefinition(CORS_CONFIGURATION_BEAN_NAME)) { + RootBeanDefinition corsDef = new RootBeanDefinition(LinkedHashMap.class); + corsDef.setSource(source); + corsDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); if (corsConfigurations != null) { - corsConfigurationsDef.getConstructorArgumentValues().addIndexedArgumentValue(0, corsConfigurations); + corsDef.getConstructorArgumentValues().addIndexedArgumentValue(0, corsConfigurations); } - parserContext.getReaderContext().getRegistry().registerBeanDefinition(CORS_CONFIGURATION_BEAN_NAME, corsConfigurationsDef); - parserContext.registerComponent(new BeanComponentDefinition(corsConfigurationsDef, CORS_CONFIGURATION_BEAN_NAME)); + context.getReaderContext().getRegistry().registerBeanDefinition(CORS_CONFIGURATION_BEAN_NAME, corsDef); + context.registerComponent(new BeanComponentDefinition(corsDef, CORS_CONFIGURATION_BEAN_NAME)); } else if (corsConfigurations != null) { - BeanDefinition corsConfigurationsDef = parserContext.getRegistry().getBeanDefinition(CORS_CONFIGURATION_BEAN_NAME); - corsConfigurationsDef.getConstructorArgumentValues().addIndexedArgumentValue(0, corsConfigurations); + BeanDefinition corsDef = context.getRegistry().getBeanDefinition(CORS_CONFIGURATION_BEAN_NAME); + corsDef.getConstructorArgumentValues().addIndexedArgumentValue(0, corsConfigurations); } return new RuntimeBeanReference(CORS_CONFIGURATION_BEAN_NAME); } @@ -214,7 +213,7 @@ public abstract class MvcNamespaceUtils { /** * Find the {@code ContentNegotiationManager} bean created by or registered * with the {@code annotation-driven} element. - * @return a bean definition, bean reference, or {@code null} + * @return a bean definition, bean reference, or {@code null} if none defined */ public static Object getContentNegotiationManager(ParserContext context) { String name = AnnotationDrivenBeanDefinitionParser.HANDLER_MAPPING_BEAN_NAME; @@ -232,12 +231,11 @@ public abstract class MvcNamespaceUtils { /** * Load the {@link Resource}'s for the given locations with the given * {@link ResourceLoader} and add them to the output list. Also for - * {@link org.springframework.core.io.UrlResource URL-based resources} (e.g. - * files, HTTP URLs, etc) this method supports a special prefix to indicate - * the charset associated with the URL so that relative paths appended to it - * can be encoded correctly, e.g. - * {@code [charset=Windows-31J]http://example.org/path}. The charsets, if - * any, are added to the output map. + * {@link org.springframework.core.io.UrlResource URL-based resources} (e.g. files, + * HTTP URLs, etc) this method supports a special prefix to indicate the charset + * associated with the URL so that relative paths appended to it can be encoded + * correctly, e.g. {@code [charset=Windows-31J]http://example.org/path}. + * The charsets, if any, are added to the output map. * @since 4.3.13 */ public static void loadResourceLocations(String[] locations, ResourceLoader resourceLoader, @@ -248,7 +246,9 @@ public abstract class MvcNamespaceUtils { location = location.trim(); if (location.startsWith(URL_RESOURCE_CHARSET_PREFIX)) { int endIndex = location.indexOf("]", URL_RESOURCE_CHARSET_PREFIX.length()); - Assert.isTrue(endIndex != -1, "Invalid charset syntax in location: " + location); + if (endIndex == -1) { + throw new IllegalArgumentException("Invalid charset syntax in location: " + location); + } String value = location.substring(URL_RESOURCE_CHARSET_PREFIX.length(), endIndex); charset = Charset.forName(value); location = location.substring(endIndex + 1); @@ -256,7 +256,9 @@ public abstract class MvcNamespaceUtils { Resource resource = resourceLoader.getResource(location); outputLocations.add(resource); if (charset != null) { - Assert.isInstanceOf(UrlResource.class, resource, "Unexpected charset for: " + resource); + if (!(resource instanceof UrlResource)) { + throw new IllegalArgumentException("Unexpected charset for non-UrlResource: " + resource); + } outputLocationCharsets.put(resource, charset); } } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java index 2029cbd61aa..aa34ef6d5ed 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ import org.w3c.dom.Element; import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.beans.factory.config.ConstructorArgumentValues; import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.parsing.BeanComponentDefinition; @@ -40,10 +41,10 @@ import org.springframework.cache.concurrent.ConcurrentMapCache; import org.springframework.core.Ordered; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; +import org.springframework.http.CacheControl; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; -import org.springframework.http.CacheControl; import org.springframework.web.servlet.handler.MappedInterceptor; import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; import org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter; @@ -92,15 +93,15 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { @Override - public BeanDefinition parse(Element element, ParserContext parserContext) { - Object source = parserContext.extractSource(element); + public BeanDefinition parse(Element element, ParserContext context) { + Object source = context.extractSource(element); - registerUrlProvider(parserContext, source); + registerUrlProvider(context, source); - RuntimeBeanReference pathMatcherRef = MvcNamespaceUtils.registerPathMatcher(null, parserContext, source); - RuntimeBeanReference pathHelperRef = MvcNamespaceUtils.registerUrlPathHelper(null, parserContext, source); + RuntimeBeanReference pathMatcherRef = MvcNamespaceUtils.registerPathMatcher(null, context, source); + RuntimeBeanReference pathHelperRef = MvcNamespaceUtils.registerUrlPathHelper(null, context, source); - String resourceHandlerName = registerResourceHandler(parserContext, element, pathHelperRef, source); + String resourceHandlerName = registerResourceHandler(context, element, pathHelperRef, source); if (resourceHandlerName == null) { return null; } @@ -108,7 +109,7 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { Map urlMap = new ManagedMap(); String resourceRequestPath = element.getAttribute("mapping"); if (!StringUtils.hasText(resourceRequestPath)) { - parserContext.getReaderContext().error("The 'mapping' attribute is required.", parserContext.extractSource(element)); + context.getReaderContext().error("The 'mapping' attribute is required.", context.extractSource(element)); return null; } urlMap.put(resourceRequestPath, resourceHandlerName); @@ -119,31 +120,32 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { handlerMappingDef.getPropertyValues().add("urlMap", urlMap); handlerMappingDef.getPropertyValues().add("pathMatcher", pathMatcherRef).add("urlPathHelper", pathHelperRef); - String order = element.getAttribute("order"); + String orderValue = element.getAttribute("order"); // Use a default of near-lowest precedence, still allowing for even lower precedence in other mappings - handlerMappingDef.getPropertyValues().add("order", StringUtils.hasText(order) ? order : Ordered.LOWEST_PRECEDENCE - 1); + Object order = StringUtils.hasText(orderValue) ? orderValue : Ordered.LOWEST_PRECEDENCE - 1; + handlerMappingDef.getPropertyValues().add("order", order); - RuntimeBeanReference corsConfigurationsRef = MvcNamespaceUtils.registerCorsConfigurations(null, parserContext, source); - handlerMappingDef.getPropertyValues().add("corsConfigurations", corsConfigurationsRef); + RuntimeBeanReference corsRef = MvcNamespaceUtils.registerCorsConfigurations(null, context, source); + handlerMappingDef.getPropertyValues().add("corsConfigurations", corsRef); - String beanName = parserContext.getReaderContext().generateBeanName(handlerMappingDef); - parserContext.getRegistry().registerBeanDefinition(beanName, handlerMappingDef); - parserContext.registerComponent(new BeanComponentDefinition(handlerMappingDef, beanName)); + String beanName = context.getReaderContext().generateBeanName(handlerMappingDef); + context.getRegistry().registerBeanDefinition(beanName, handlerMappingDef); + context.registerComponent(new BeanComponentDefinition(handlerMappingDef, beanName)); // Ensure BeanNameUrlHandlerMapping (SPR-8289) and default HandlerAdapters are not "turned off" // Register HttpRequestHandlerAdapter - MvcNamespaceUtils.registerDefaultComponents(parserContext, source); + MvcNamespaceUtils.registerDefaultComponents(context, source); return null; } - private void registerUrlProvider(ParserContext parserContext, Object source) { - if (!parserContext.getRegistry().containsBeanDefinition(RESOURCE_URL_PROVIDER)) { + private void registerUrlProvider(ParserContext context, Object source) { + if (!context.getRegistry().containsBeanDefinition(RESOURCE_URL_PROVIDER)) { RootBeanDefinition urlProvider = new RootBeanDefinition(ResourceUrlProvider.class); urlProvider.setSource(source); urlProvider.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - parserContext.getRegistry().registerBeanDefinition(RESOURCE_URL_PROVIDER, urlProvider); - parserContext.registerComponent(new BeanComponentDefinition(urlProvider, RESOURCE_URL_PROVIDER)); + context.getRegistry().registerBeanDefinition(RESOURCE_URL_PROVIDER, urlProvider); + context.registerComponent(new BeanComponentDefinition(urlProvider, RESOURCE_URL_PROVIDER)); RootBeanDefinition interceptor = new RootBeanDefinition(ResourceUrlProviderExposingInterceptor.class); interceptor.setSource(source); @@ -154,24 +156,31 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { mappedInterceptor.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); mappedInterceptor.getConstructorArgumentValues().addIndexedArgumentValue(0, (Object) null); mappedInterceptor.getConstructorArgumentValues().addIndexedArgumentValue(1, interceptor); - String mappedInterceptorName = parserContext.getReaderContext().registerWithGeneratedName(mappedInterceptor); - parserContext.registerComponent(new BeanComponentDefinition(mappedInterceptor, mappedInterceptorName)); + String mappedInterceptorName = context.getReaderContext().registerWithGeneratedName(mappedInterceptor); + context.registerComponent(new BeanComponentDefinition(mappedInterceptor, mappedInterceptorName)); } } - private String registerResourceHandler(ParserContext parserContext, Element element, - RuntimeBeanReference pathHelperRef, Object source) { + private String registerResourceHandler( + ParserContext context, Element element, RuntimeBeanReference pathHelperRef, Object source) { String locationAttr = element.getAttribute("location"); if (!StringUtils.hasText(locationAttr)) { - parserContext.getReaderContext().error("The 'location' attribute is required.", parserContext.extractSource(element)); + context.getReaderContext().error("The 'location' attribute is required.", context.extractSource(element)); return null; } String[] locationValues = StringUtils.commaDelimitedListToStringArray(locationAttr); + if (context.getRegistry() instanceof ConfigurableBeanFactory) { + ConfigurableBeanFactory cbf = ((ConfigurableBeanFactory) context.getRegistry()); + for (int i = 0; i < locationValues.length; i++) { + locationValues[i] = cbf.resolveEmbeddedValue(locationValues[i]); + } + } + ManagedList locations = new ManagedList(); Map locationCharsets = new HashMap(); - ResourceLoader resourceLoader = parserContext.getReaderContext().getResourceLoader(); + ResourceLoader resourceLoader = context.getReaderContext().getResourceLoader(); if (resourceLoader != null) { List resources = new ArrayList(); @@ -204,44 +213,21 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { Element resourceChainElement = DomUtils.getChildElementByTagName(element, "resource-chain"); if (resourceChainElement != null) { - parseResourceChain(resourceHandlerDef, parserContext, resourceChainElement, source); + parseResourceChain(resourceHandlerDef, context, resourceChainElement, source); } - Object manager = MvcNamespaceUtils.getContentNegotiationManager(parserContext); + Object manager = MvcNamespaceUtils.getContentNegotiationManager(context); if (manager != null) { values.add("contentNegotiationManager", manager); } - String beanName = parserContext.getReaderContext().generateBeanName(resourceHandlerDef); - parserContext.getRegistry().registerBeanDefinition(beanName, resourceHandlerDef); - parserContext.registerComponent(new BeanComponentDefinition(resourceHandlerDef, beanName)); + String beanName = context.getReaderContext().generateBeanName(resourceHandlerDef); + context.getRegistry().registerBeanDefinition(beanName, resourceHandlerDef); + context.registerComponent(new BeanComponentDefinition(resourceHandlerDef, beanName)); return beanName; } - private void parseResourceChain(RootBeanDefinition resourceHandlerDef, ParserContext parserContext, - Element element, Object source) { - - String autoRegistration = element.getAttribute("auto-registration"); - boolean isAutoRegistration = !(StringUtils.hasText(autoRegistration) && "false".equals(autoRegistration)); - - ManagedList resourceResolvers = new ManagedList(); - resourceResolvers.setSource(source); - ManagedList resourceTransformers = new ManagedList(); - resourceTransformers.setSource(source); - - parseResourceCache(resourceResolvers, resourceTransformers, element, source); - parseResourceResolversTransformers(isAutoRegistration, resourceResolvers, resourceTransformers, - parserContext, element, source); - - if (!resourceResolvers.isEmpty()) { - resourceHandlerDef.getPropertyValues().add("resourceResolvers", resourceResolvers); - } - if (!resourceTransformers.isEmpty()) { - resourceHandlerDef.getPropertyValues().add("resourceTransformers", resourceTransformers); - } - } - private CacheControl parseCacheControl(Element element) { CacheControl cacheControl = CacheControl.empty(); if ("true".equals(element.getAttribute("no-cache"))) { @@ -282,29 +268,52 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { return cacheControl; } + private void parseResourceChain( + RootBeanDefinition resourceHandlerDef, ParserContext context, Element element, Object source) { + + String autoRegistration = element.getAttribute("auto-registration"); + boolean isAutoRegistration = !(StringUtils.hasText(autoRegistration) && "false".equals(autoRegistration)); + + ManagedList resourceResolvers = new ManagedList(); + resourceResolvers.setSource(source); + ManagedList resourceTransformers = new ManagedList(); + resourceTransformers.setSource(source); + + parseResourceCache(resourceResolvers, resourceTransformers, element, source); + parseResourceResolversTransformers( + isAutoRegistration, resourceResolvers, resourceTransformers, context, element, source); + + if (!resourceResolvers.isEmpty()) { + resourceHandlerDef.getPropertyValues().add("resourceResolvers", resourceResolvers); + } + if (!resourceTransformers.isEmpty()) { + resourceHandlerDef.getPropertyValues().add("resourceTransformers", resourceTransformers); + } + } + private void parseResourceCache(ManagedList resourceResolvers, ManagedList resourceTransformers, Element element, Object source) { String resourceCache = element.getAttribute("resource-cache"); if ("true".equals(resourceCache)) { - ConstructorArgumentValues cavs = new ConstructorArgumentValues(); + ConstructorArgumentValues cargs = new ConstructorArgumentValues(); RootBeanDefinition cachingResolverDef = new RootBeanDefinition(CachingResourceResolver.class); cachingResolverDef.setSource(source); cachingResolverDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - cachingResolverDef.setConstructorArgumentValues(cavs); + cachingResolverDef.setConstructorArgumentValues(cargs); RootBeanDefinition cachingTransformerDef = new RootBeanDefinition(CachingResourceTransformer.class); cachingTransformerDef.setSource(source); cachingTransformerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - cachingTransformerDef.setConstructorArgumentValues(cavs); + cachingTransformerDef.setConstructorArgumentValues(cargs); String cacheManagerName = element.getAttribute("cache-manager"); String cacheName = element.getAttribute("cache-name"); if (StringUtils.hasText(cacheManagerName) && StringUtils.hasText(cacheName)) { RuntimeBeanReference cacheManagerRef = new RuntimeBeanReference(cacheManagerName); - cavs.addIndexedArgumentValue(0, cacheManagerRef); - cavs.addIndexedArgumentValue(1, cacheName); + cargs.addIndexedArgumentValue(0, cacheManagerRef); + cargs.addIndexedArgumentValue(1, cacheName); } else { ConstructorArgumentValues cacheCavs = new ConstructorArgumentValues(); @@ -313,23 +322,22 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { cacheDef.setSource(source); cacheDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); cacheDef.setConstructorArgumentValues(cacheCavs); - cavs.addIndexedArgumentValue(0, cacheDef); + cargs.addIndexedArgumentValue(0, cacheDef); } resourceResolvers.add(cachingResolverDef); resourceTransformers.add(cachingTransformerDef); } } - private void parseResourceResolversTransformers(boolean isAutoRegistration, ManagedList resourceResolvers, ManagedList resourceTransformers, - ParserContext parserContext, Element element, Object source) { + ParserContext context, Element element, Object source) { Element resolversElement = DomUtils.getChildElementByTagName(element, "resolvers"); if (resolversElement != null) { for (Element beanElement : DomUtils.getChildElements(resolversElement)) { if (VERSION_RESOLVER_ELEMENT.equals(beanElement.getLocalName())) { - RootBeanDefinition versionResolverDef = parseVersionResolver(parserContext, beanElement, source); + RootBeanDefinition versionResolverDef = parseVersionResolver(context, beanElement, source); versionResolverDef.setSource(source); resourceResolvers.add(versionResolverDef); if (isAutoRegistration) { @@ -340,7 +348,7 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { } } else { - Object object = parserContext.getDelegate().parsePropertySubElement(beanElement, null); + Object object = context.getDelegate().parsePropertySubElement(beanElement, null); resourceResolvers.add(object); } } @@ -362,13 +370,13 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { Element transformersElement = DomUtils.getChildElementByTagName(element, "transformers"); if (transformersElement != null) { for (Element beanElement : DomUtils.getChildElementsByTagName(transformersElement, "bean", "ref")) { - Object object = parserContext.getDelegate().parsePropertySubElement(beanElement, null); + Object object = context.getDelegate().parsePropertySubElement(beanElement, null); resourceTransformers.add(object); } } } - private RootBeanDefinition parseVersionResolver(ParserContext parserContext, Element element, Object source) { + private RootBeanDefinition parseVersionResolver(ParserContext context, Element element, Object source) { ManagedMap strategyMap = new ManagedMap(); strategyMap.setSource(source); RootBeanDefinition versionResolverDef = new RootBeanDefinition(VersionResourceResolver.class); @@ -380,12 +388,12 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { String[] patterns = StringUtils.commaDelimitedListToStringArray(beanElement.getAttribute("patterns")); Object strategy = null; if (FIXED_VERSION_STRATEGY_ELEMENT.equals(beanElement.getLocalName())) { - ConstructorArgumentValues cavs = new ConstructorArgumentValues(); - cavs.addIndexedArgumentValue(0, beanElement.getAttribute("version")); + ConstructorArgumentValues cargs = new ConstructorArgumentValues(); + cargs.addIndexedArgumentValue(0, beanElement.getAttribute("version")); RootBeanDefinition strategyDef = new RootBeanDefinition(FixedVersionStrategy.class); strategyDef.setSource(source); strategyDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - strategyDef.setConstructorArgumentValues(cavs); + strategyDef.setConstructorArgumentValues(cargs); strategy = strategyDef; } else if (CONTENT_VERSION_STRATEGY_ELEMENT.equals(beanElement.getLocalName())) { @@ -396,7 +404,7 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser { } else if (VERSION_STRATEGY_ELEMENT.equals(beanElement.getLocalName())) { Element childElement = DomUtils.getChildElementsByTagName(beanElement, "bean", "ref").get(0); - strategy = parserContext.getDelegate().parsePropertySubElement(childElement, null); + strategy = context.getDelegate().parsePropertySubElement(childElement, null); } for (String pattern : patterns) { strategyMap.put(pattern, strategy);