|
|
|
@ -197,14 +197,14 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
public BeanDefinition parse(Element element, ParserContext parserContext) { |
|
|
|
public BeanDefinition parse(Element element, ParserContext context) { |
|
|
|
Object source = parserContext.extractSource(element); |
|
|
|
Object source = context.extractSource(element); |
|
|
|
XmlReaderContext readerContext = parserContext.getReaderContext(); |
|
|
|
XmlReaderContext readerContext = context.getReaderContext(); |
|
|
|
|
|
|
|
|
|
|
|
CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(), source); |
|
|
|
CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(), source); |
|
|
|
parserContext.pushContainingComponent(compDefinition); |
|
|
|
context.pushContainingComponent(compDefinition); |
|
|
|
|
|
|
|
|
|
|
|
RuntimeBeanReference contentNegotiationManager = getContentNegotiationManager(element, source, parserContext); |
|
|
|
RuntimeBeanReference contentNegotiationManager = getContentNegotiationManager(element, source, context); |
|
|
|
|
|
|
|
|
|
|
|
RootBeanDefinition handlerMappingDef = new RootBeanDefinition(RequestMappingHandlerMapping.class); |
|
|
|
RootBeanDefinition handlerMappingDef = new RootBeanDefinition(RequestMappingHandlerMapping.class); |
|
|
|
handlerMappingDef.setSource(source); |
|
|
|
handlerMappingDef.setSource(source); |
|
|
|
@ -217,14 +217,14 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
handlerMappingDef.getPropertyValues().add("removeSemicolonContent", !enableMatrixVariables); |
|
|
|
handlerMappingDef.getPropertyValues().add("removeSemicolonContent", !enableMatrixVariables); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
configurePathMatchingProperties(handlerMappingDef, element, parserContext); |
|
|
|
configurePathMatchingProperties(handlerMappingDef, element, context); |
|
|
|
readerContext.getRegistry().registerBeanDefinition(HANDLER_MAPPING_BEAN_NAME , handlerMappingDef); |
|
|
|
readerContext.getRegistry().registerBeanDefinition(HANDLER_MAPPING_BEAN_NAME , handlerMappingDef); |
|
|
|
|
|
|
|
|
|
|
|
RuntimeBeanReference corsRef = MvcNamespaceUtils.registerCorsConfigurations(null, parserContext, source); |
|
|
|
RuntimeBeanReference corsRef = MvcNamespaceUtils.registerCorsConfigurations(null, context, source); |
|
|
|
handlerMappingDef.getPropertyValues().add("corsConfigurations", corsRef); |
|
|
|
handlerMappingDef.getPropertyValues().add("corsConfigurations", corsRef); |
|
|
|
|
|
|
|
|
|
|
|
RuntimeBeanReference conversionService = getConversionService(element, source, parserContext); |
|
|
|
RuntimeBeanReference conversionService = getConversionService(element, source, context); |
|
|
|
RuntimeBeanReference validator = getValidator(element, source, parserContext); |
|
|
|
RuntimeBeanReference validator = getValidator(element, source, context); |
|
|
|
RuntimeBeanReference messageCodesResolver = getMessageCodesResolver(element); |
|
|
|
RuntimeBeanReference messageCodesResolver = getMessageCodesResolver(element); |
|
|
|
|
|
|
|
|
|
|
|
RootBeanDefinition bindingDef = new RootBeanDefinition(ConfigurableWebBindingInitializer.class); |
|
|
|
RootBeanDefinition bindingDef = new RootBeanDefinition(ConfigurableWebBindingInitializer.class); |
|
|
|
@ -234,13 +234,13 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
bindingDef.getPropertyValues().add("validator", validator); |
|
|
|
bindingDef.getPropertyValues().add("validator", validator); |
|
|
|
bindingDef.getPropertyValues().add("messageCodesResolver", messageCodesResolver); |
|
|
|
bindingDef.getPropertyValues().add("messageCodesResolver", messageCodesResolver); |
|
|
|
|
|
|
|
|
|
|
|
ManagedList<?> messageConverters = getMessageConverters(element, source, parserContext); |
|
|
|
ManagedList<?> messageConverters = getMessageConverters(element, source, context); |
|
|
|
ManagedList<?> argumentResolvers = getArgumentResolvers(element, parserContext); |
|
|
|
ManagedList<?> argumentResolvers = getArgumentResolvers(element, context); |
|
|
|
ManagedList<?> returnValueHandlers = getReturnValueHandlers(element, parserContext); |
|
|
|
ManagedList<?> returnValueHandlers = getReturnValueHandlers(element, context); |
|
|
|
String asyncTimeout = getAsyncTimeout(element); |
|
|
|
String asyncTimeout = getAsyncTimeout(element); |
|
|
|
RuntimeBeanReference asyncExecutor = getAsyncExecutor(element); |
|
|
|
RuntimeBeanReference asyncExecutor = getAsyncExecutor(element); |
|
|
|
ManagedList<?> callableInterceptors = getCallableInterceptors(element, source, parserContext); |
|
|
|
ManagedList<?> callableInterceptors = getCallableInterceptors(element, source, context); |
|
|
|
ManagedList<?> deferredResultInterceptors = getDeferredResultInterceptors(element, source, parserContext); |
|
|
|
ManagedList<?> deferredResultInterceptors = getDeferredResultInterceptors(element, source, context); |
|
|
|
|
|
|
|
|
|
|
|
RootBeanDefinition handlerAdapterDef = new RootBeanDefinition(RequestMappingHandlerAdapter.class); |
|
|
|
RootBeanDefinition handlerAdapterDef = new RootBeanDefinition(RequestMappingHandlerAdapter.class); |
|
|
|
handlerAdapterDef.setSource(source); |
|
|
|
handlerAdapterDef.setSource(source); |
|
|
|
@ -317,18 +317,18 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
defaultExceptionResolver.getPropertyValues().add("order", 2); |
|
|
|
defaultExceptionResolver.getPropertyValues().add("order", 2); |
|
|
|
String defaultExResolverName = readerContext.registerWithGeneratedName(defaultExceptionResolver); |
|
|
|
String defaultExResolverName = readerContext.registerWithGeneratedName(defaultExceptionResolver); |
|
|
|
|
|
|
|
|
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(handlerMappingDef, HANDLER_MAPPING_BEAN_NAME)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(handlerMappingDef, HANDLER_MAPPING_BEAN_NAME)); |
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(handlerAdapterDef, HANDLER_ADAPTER_BEAN_NAME)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(handlerAdapterDef, HANDLER_ADAPTER_BEAN_NAME)); |
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(uriContributorDef, uriContributorName)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(uriContributorDef, uriContributorName)); |
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(mappedInterceptorDef, mappedInterceptorName)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(mappedInterceptorDef, mappedInterceptorName)); |
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(methodExceptionResolver, methodExResolverName)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(methodExceptionResolver, methodExResolverName)); |
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(statusExceptionResolver, statusExResolverName)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(statusExceptionResolver, statusExResolverName)); |
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(defaultExceptionResolver, defaultExResolverName)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(defaultExceptionResolver, defaultExResolverName)); |
|
|
|
|
|
|
|
|
|
|
|
// Ensure BeanNameUrlHandlerMapping (SPR-8289) and default HandlerAdapters are not "turned off"
|
|
|
|
// Ensure BeanNameUrlHandlerMapping (SPR-8289) and default HandlerAdapters are not "turned off"
|
|
|
|
MvcNamespaceUtils.registerDefaultComponents(parserContext, source); |
|
|
|
MvcNamespaceUtils.registerDefaultComponents(context, source); |
|
|
|
|
|
|
|
|
|
|
|
parserContext.popAndRegisterContainingComponent(); |
|
|
|
context.popAndRegisterContainingComponent(); |
|
|
|
|
|
|
|
|
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -347,9 +347,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private RuntimeBeanReference getConversionService( |
|
|
|
private RuntimeBeanReference getConversionService(Element element, @Nullable Object source, ParserContext context) { |
|
|
|
Element element, @Nullable Object source, ParserContext parserContext) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RuntimeBeanReference conversionServiceRef; |
|
|
|
RuntimeBeanReference conversionServiceRef; |
|
|
|
if (element.hasAttribute("conversion-service")) { |
|
|
|
if (element.hasAttribute("conversion-service")) { |
|
|
|
conversionServiceRef = new RuntimeBeanReference(element.getAttribute("conversion-service")); |
|
|
|
conversionServiceRef = new RuntimeBeanReference(element.getAttribute("conversion-service")); |
|
|
|
@ -358,15 +356,15 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
RootBeanDefinition conversionDef = new RootBeanDefinition(FormattingConversionServiceFactoryBean.class); |
|
|
|
RootBeanDefinition conversionDef = new RootBeanDefinition(FormattingConversionServiceFactoryBean.class); |
|
|
|
conversionDef.setSource(source); |
|
|
|
conversionDef.setSource(source); |
|
|
|
conversionDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); |
|
|
|
conversionDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); |
|
|
|
String conversionName = parserContext.getReaderContext().registerWithGeneratedName(conversionDef); |
|
|
|
String conversionName = context.getReaderContext().registerWithGeneratedName(conversionDef); |
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(conversionDef, conversionName)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(conversionDef, conversionName)); |
|
|
|
conversionServiceRef = new RuntimeBeanReference(conversionName); |
|
|
|
conversionServiceRef = new RuntimeBeanReference(conversionName); |
|
|
|
} |
|
|
|
} |
|
|
|
return conversionServiceRef; |
|
|
|
return conversionServiceRef; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
private RuntimeBeanReference getValidator(Element element, @Nullable Object source, ParserContext parserContext) { |
|
|
|
private RuntimeBeanReference getValidator(Element element, @Nullable Object source, ParserContext context) { |
|
|
|
if (element.hasAttribute("validator")) { |
|
|
|
if (element.hasAttribute("validator")) { |
|
|
|
return new RuntimeBeanReference(element.getAttribute("validator")); |
|
|
|
return new RuntimeBeanReference(element.getAttribute("validator")); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -375,8 +373,8 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
"org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean"); |
|
|
|
"org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean"); |
|
|
|
validatorDef.setSource(source); |
|
|
|
validatorDef.setSource(source); |
|
|
|
validatorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); |
|
|
|
validatorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); |
|
|
|
String validatorName = parserContext.getReaderContext().registerWithGeneratedName(validatorDef); |
|
|
|
String validatorName = context.getReaderContext().registerWithGeneratedName(validatorDef); |
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(validatorDef, validatorName)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(validatorDef, validatorName)); |
|
|
|
return new RuntimeBeanReference(validatorName); |
|
|
|
return new RuntimeBeanReference(validatorName); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
|
@ -385,7 +383,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private RuntimeBeanReference getContentNegotiationManager( |
|
|
|
private RuntimeBeanReference getContentNegotiationManager( |
|
|
|
Element element, @Nullable Object source, ParserContext parserContext) { |
|
|
|
Element element, @Nullable Object source, ParserContext context) { |
|
|
|
|
|
|
|
|
|
|
|
RuntimeBeanReference beanRef; |
|
|
|
RuntimeBeanReference beanRef; |
|
|
|
if (element.hasAttribute("content-negotiation-manager")) { |
|
|
|
if (element.hasAttribute("content-negotiation-manager")) { |
|
|
|
@ -398,19 +396,19 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
factoryBeanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); |
|
|
|
factoryBeanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); |
|
|
|
factoryBeanDef.getPropertyValues().add("mediaTypes", getDefaultMediaTypes()); |
|
|
|
factoryBeanDef.getPropertyValues().add("mediaTypes", getDefaultMediaTypes()); |
|
|
|
String name = CONTENT_NEGOTIATION_MANAGER_BEAN_NAME; |
|
|
|
String name = CONTENT_NEGOTIATION_MANAGER_BEAN_NAME; |
|
|
|
parserContext.getReaderContext().getRegistry().registerBeanDefinition(name , factoryBeanDef); |
|
|
|
context.getReaderContext().getRegistry().registerBeanDefinition(name , factoryBeanDef); |
|
|
|
parserContext.registerComponent(new BeanComponentDefinition(factoryBeanDef, name)); |
|
|
|
context.registerComponent(new BeanComponentDefinition(factoryBeanDef, name)); |
|
|
|
beanRef = new RuntimeBeanReference(name); |
|
|
|
beanRef = new RuntimeBeanReference(name); |
|
|
|
} |
|
|
|
} |
|
|
|
return beanRef; |
|
|
|
return beanRef; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void configurePathMatchingProperties( |
|
|
|
private void configurePathMatchingProperties( |
|
|
|
RootBeanDefinition handlerMappingDef, Element element, ParserContext parserContext) { |
|
|
|
RootBeanDefinition handlerMappingDef, Element element, ParserContext context) { |
|
|
|
|
|
|
|
|
|
|
|
Element pathMatchingElement = DomUtils.getChildElementByTagName(element, "path-matching"); |
|
|
|
Element pathMatchingElement = DomUtils.getChildElementByTagName(element, "path-matching"); |
|
|
|
if (pathMatchingElement != null) { |
|
|
|
if (pathMatchingElement != null) { |
|
|
|
Object source = parserContext.extractSource(element); |
|
|
|
Object source = context.extractSource(element); |
|
|
|
|
|
|
|
|
|
|
|
if (pathMatchingElement.hasAttribute("suffix-pattern")) { |
|
|
|
if (pathMatchingElement.hasAttribute("suffix-pattern")) { |
|
|
|
Boolean useSuffixPatternMatch = Boolean.valueOf(pathMatchingElement.getAttribute("suffix-pattern")); |
|
|
|
Boolean useSuffixPatternMatch = Boolean.valueOf(pathMatchingElement.getAttribute("suffix-pattern")); |
|
|
|
@ -429,14 +427,14 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
if (pathMatchingElement.hasAttribute("path-helper")) { |
|
|
|
if (pathMatchingElement.hasAttribute("path-helper")) { |
|
|
|
pathHelperRef = new RuntimeBeanReference(pathMatchingElement.getAttribute("path-helper")); |
|
|
|
pathHelperRef = new RuntimeBeanReference(pathMatchingElement.getAttribute("path-helper")); |
|
|
|
} |
|
|
|
} |
|
|
|
pathHelperRef = MvcNamespaceUtils.registerUrlPathHelper(pathHelperRef, parserContext, source); |
|
|
|
pathHelperRef = MvcNamespaceUtils.registerUrlPathHelper(pathHelperRef, context, source); |
|
|
|
handlerMappingDef.getPropertyValues().add("urlPathHelper", pathHelperRef); |
|
|
|
handlerMappingDef.getPropertyValues().add("urlPathHelper", pathHelperRef); |
|
|
|
|
|
|
|
|
|
|
|
RuntimeBeanReference pathMatcherRef = null; |
|
|
|
RuntimeBeanReference pathMatcherRef = null; |
|
|
|
if (pathMatchingElement.hasAttribute("path-matcher")) { |
|
|
|
if (pathMatchingElement.hasAttribute("path-matcher")) { |
|
|
|
pathMatcherRef = new RuntimeBeanReference(pathMatchingElement.getAttribute("path-matcher")); |
|
|
|
pathMatcherRef = new RuntimeBeanReference(pathMatchingElement.getAttribute("path-matcher")); |
|
|
|
} |
|
|
|
} |
|
|
|
pathMatcherRef = MvcNamespaceUtils.registerPathMatcher(pathMatcherRef, parserContext, source); |
|
|
|
pathMatcherRef = MvcNamespaceUtils.registerPathMatcher(pathMatcherRef, context, source); |
|
|
|
handlerMappingDef.getPropertyValues().add("pathMatcher", pathMatcherRef); |
|
|
|
handlerMappingDef.getPropertyValues().add("pathMatcher", pathMatcherRef); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -488,18 +486,18 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ManagedList<?> getCallableInterceptors( |
|
|
|
private ManagedList<?> getCallableInterceptors( |
|
|
|
Element element, @Nullable Object source, ParserContext parserContext) { |
|
|
|
Element element, @Nullable Object source, ParserContext context) { |
|
|
|
|
|
|
|
|
|
|
|
ManagedList<? super Object> interceptors = new ManagedList<>(); |
|
|
|
ManagedList<Object> interceptors = new ManagedList<>(); |
|
|
|
Element asyncElement = DomUtils.getChildElementByTagName(element, "async-support"); |
|
|
|
Element asyncElement = DomUtils.getChildElementByTagName(element, "async-support"); |
|
|
|
if (asyncElement != null) { |
|
|
|
if (asyncElement != null) { |
|
|
|
Element interceptorsElement = DomUtils.getChildElementByTagName(asyncElement, "callable-interceptors"); |
|
|
|
Element interceptorsElement = DomUtils.getChildElementByTagName(asyncElement, "callable-interceptors"); |
|
|
|
if (interceptorsElement != null) { |
|
|
|
if (interceptorsElement != null) { |
|
|
|
interceptors.setSource(source); |
|
|
|
interceptors.setSource(source); |
|
|
|
for (Element converter : DomUtils.getChildElementsByTagName(interceptorsElement, "bean")) { |
|
|
|
for (Element converter : DomUtils.getChildElementsByTagName(interceptorsElement, "bean")) { |
|
|
|
BeanDefinitionHolder beanDef = parserContext.getDelegate().parseBeanDefinitionElement(converter); |
|
|
|
BeanDefinitionHolder beanDef = context.getDelegate().parseBeanDefinitionElement(converter); |
|
|
|
if (beanDef != null) { |
|
|
|
if (beanDef != null) { |
|
|
|
beanDef = parserContext.getDelegate().decorateBeanDefinitionIfRequired(converter, beanDef); |
|
|
|
beanDef = context.getDelegate().decorateBeanDefinitionIfRequired(converter, beanDef); |
|
|
|
interceptors.add(beanDef); |
|
|
|
interceptors.add(beanDef); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -509,18 +507,18 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ManagedList<?> getDeferredResultInterceptors( |
|
|
|
private ManagedList<?> getDeferredResultInterceptors( |
|
|
|
Element element, @Nullable Object source, ParserContext parserContext) { |
|
|
|
Element element, @Nullable Object source, ParserContext context) { |
|
|
|
|
|
|
|
|
|
|
|
ManagedList<? super Object> interceptors = new ManagedList<>(); |
|
|
|
ManagedList<Object> interceptors = new ManagedList<>(); |
|
|
|
Element asyncElement = DomUtils.getChildElementByTagName(element, "async-support"); |
|
|
|
Element asyncElement = DomUtils.getChildElementByTagName(element, "async-support"); |
|
|
|
if (asyncElement != null) { |
|
|
|
if (asyncElement != null) { |
|
|
|
Element interceptorsElement = DomUtils.getChildElementByTagName(asyncElement, "deferred-result-interceptors"); |
|
|
|
Element interceptorsElement = DomUtils.getChildElementByTagName(asyncElement, "deferred-result-interceptors"); |
|
|
|
if (interceptorsElement != null) { |
|
|
|
if (interceptorsElement != null) { |
|
|
|
interceptors.setSource(source); |
|
|
|
interceptors.setSource(source); |
|
|
|
for (Element converter : DomUtils.getChildElementsByTagName(interceptorsElement, "bean")) { |
|
|
|
for (Element converter : DomUtils.getChildElementsByTagName(interceptorsElement, "bean")) { |
|
|
|
BeanDefinitionHolder beanDef = parserContext.getDelegate().parseBeanDefinitionElement(converter); |
|
|
|
BeanDefinitionHolder beanDef = context.getDelegate().parseBeanDefinitionElement(converter); |
|
|
|
if (beanDef != null) { |
|
|
|
if (beanDef != null) { |
|
|
|
beanDef = parserContext.getDelegate().decorateBeanDefinitionIfRequired(converter, beanDef); |
|
|
|
beanDef = context.getDelegate().decorateBeanDefinitionIfRequired(converter, beanDef); |
|
|
|
interceptors.add(beanDef); |
|
|
|
interceptors.add(beanDef); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -530,11 +528,11 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
private ManagedList<?> getArgumentResolvers(Element element, ParserContext parserContext) { |
|
|
|
private ManagedList<?> getArgumentResolvers(Element element, ParserContext context) { |
|
|
|
Element resolversElement = DomUtils.getChildElementByTagName(element, "argument-resolvers"); |
|
|
|
Element resolversElement = DomUtils.getChildElementByTagName(element, "argument-resolvers"); |
|
|
|
if (resolversElement != null) { |
|
|
|
if (resolversElement != null) { |
|
|
|
ManagedList<Object> resolvers = extractBeanSubElements(resolversElement, parserContext); |
|
|
|
ManagedList<Object> resolvers = extractBeanSubElements(resolversElement, context); |
|
|
|
return wrapLegacyResolvers(resolvers, parserContext); |
|
|
|
return wrapLegacyResolvers(resolvers, context); |
|
|
|
} |
|
|
|
} |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -560,18 +558,18 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
private ManagedList<?> getReturnValueHandlers(Element element, ParserContext parserContext) { |
|
|
|
private ManagedList<?> getReturnValueHandlers(Element element, ParserContext context) { |
|
|
|
Element handlers = DomUtils.getChildElementByTagName(element, "return-value-handlers"); |
|
|
|
Element handlers = DomUtils.getChildElementByTagName(element, "return-value-handlers"); |
|
|
|
return (handlers != null ? extractBeanSubElements(handlers, parserContext) : null); |
|
|
|
return (handlers != null ? extractBeanSubElements(handlers, context) : null); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ManagedList<?> getMessageConverters(Element element, @Nullable Object source, ParserContext parserContext) { |
|
|
|
private ManagedList<?> getMessageConverters(Element element, @Nullable Object source, ParserContext context) { |
|
|
|
Element convertersElement = DomUtils.getChildElementByTagName(element, "message-converters"); |
|
|
|
Element convertersElement = DomUtils.getChildElementByTagName(element, "message-converters"); |
|
|
|
ManagedList<? super Object> messageConverters = new ManagedList<>(); |
|
|
|
ManagedList<Object> messageConverters = new ManagedList<>(); |
|
|
|
if (convertersElement != null) { |
|
|
|
if (convertersElement != null) { |
|
|
|
messageConverters.setSource(source); |
|
|
|
messageConverters.setSource(source); |
|
|
|
for (Element beanElement : DomUtils.getChildElementsByTagName(convertersElement, "bean", "ref")) { |
|
|
|
for (Element beanElement : DomUtils.getChildElementsByTagName(convertersElement, "bean", "ref")) { |
|
|
|
Object object = parserContext.getDelegate().parsePropertySubElement(beanElement, null); |
|
|
|
Object object = context.getDelegate().parsePropertySubElement(beanElement, null); |
|
|
|
messageConverters.add(object); |
|
|
|
messageConverters.add(object); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -652,11 +650,11 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
return beanDefinition; |
|
|
|
return beanDefinition; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ManagedList<Object> extractBeanSubElements(Element parentElement, ParserContext parserContext) { |
|
|
|
private ManagedList<Object> extractBeanSubElements(Element parentElement, ParserContext context) { |
|
|
|
ManagedList<Object> list = new ManagedList<>(); |
|
|
|
ManagedList<Object> list = new ManagedList<>(); |
|
|
|
list.setSource(parserContext.extractSource(parentElement)); |
|
|
|
list.setSource(context.extractSource(parentElement)); |
|
|
|
for (Element beanElement : DomUtils.getChildElementsByTagName(parentElement, "bean", "ref")) { |
|
|
|
for (Element beanElement : DomUtils.getChildElementsByTagName(parentElement, "bean", "ref")) { |
|
|
|
Object object = parserContext.getDelegate().parsePropertySubElement(beanElement, null); |
|
|
|
Object object = context.getDelegate().parsePropertySubElement(beanElement, null); |
|
|
|
list.add(object); |
|
|
|
list.add(object); |
|
|
|
} |
|
|
|
} |
|
|
|
return list; |
|
|
|
return list; |
|
|
|
|