|
|
|
@ -471,21 +471,34 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
private ManagedList<?> getArgumentResolvers(Element element, ParserContext parserContext) { |
|
|
|
private ManagedList<?> getArgumentResolvers(Element element, ParserContext parserContext) { |
|
|
|
Element resolversElement = DomUtils.getChildElementByTagName(element, "argument-resolvers"); |
|
|
|
Element resolversElement = DomUtils.getChildElementByTagName(element, "argument-resolvers"); |
|
|
|
if (resolversElement != null) { |
|
|
|
if (resolversElement != null) { |
|
|
|
ManagedList<BeanDefinitionHolder> argumentResolvers = extractBeanSubElements(resolversElement, parserContext); |
|
|
|
ManagedList<Object> resolvers = extractBeanSubElements(resolversElement, parserContext); |
|
|
|
ManagedList<BeanMetadataElement> customAndReferencedResolvers = new ManagedList<BeanMetadataElement>(); |
|
|
|
return wrapLegacyResolvers(resolvers, parserContext); |
|
|
|
customAndReferencedResolvers.addAll(wrapWebArgumentResolverBeanDefs(argumentResolvers, parserContext)); |
|
|
|
|
|
|
|
customAndReferencedResolvers.addAll(extractBeanRefSubElements(resolversElement, parserContext)); |
|
|
|
|
|
|
|
return customAndReferencedResolvers; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ManagedList<?> getReturnValueHandlers(Element element, ParserContext parserContext) { |
|
|
|
private ManagedList<Object> wrapLegacyResolvers(List<Object> list, ParserContext context) { |
|
|
|
Element handlersElement = DomUtils.getChildElementByTagName(element, "return-value-handlers"); |
|
|
|
ManagedList<Object> result = new ManagedList<Object>(); |
|
|
|
if (handlersElement != null) { |
|
|
|
for (Object object : list) { |
|
|
|
return extractBeanSubElements(handlersElement, parserContext); |
|
|
|
if (object instanceof BeanDefinitionHolder) { |
|
|
|
|
|
|
|
BeanDefinitionHolder beanDef = (BeanDefinitionHolder) object; |
|
|
|
|
|
|
|
String className = beanDef.getBeanDefinition().getBeanClassName(); |
|
|
|
|
|
|
|
Class<?> clazz = ClassUtils.resolveClassName(className, context.getReaderContext().getBeanClassLoader()); |
|
|
|
|
|
|
|
if (WebArgumentResolver.class.isAssignableFrom(clazz)) { |
|
|
|
|
|
|
|
RootBeanDefinition adapter = new RootBeanDefinition(ServletWebArgumentResolverAdapter.class); |
|
|
|
|
|
|
|
adapter.getConstructorArgumentValues().addIndexedArgumentValue(0, beanDef); |
|
|
|
|
|
|
|
result.add(new BeanDefinitionHolder(adapter, beanDef.getBeanName() + "Adapter")); |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
result.add(object); |
|
|
|
} |
|
|
|
} |
|
|
|
return null; |
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private ManagedList<?> getReturnValueHandlers(Element element, ParserContext parserContext) { |
|
|
|
|
|
|
|
Element handlers = DomUtils.getChildElementByTagName(element, "return-value-handlers"); |
|
|
|
|
|
|
|
return (handlers != null ? extractBeanSubElements(handlers, parserContext) : null); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ManagedList<?> getMessageConverters(Element element, Object source, ParserContext parserContext) { |
|
|
|
private ManagedList<?> getMessageConverters(Element element, Object source, ParserContext parserContext) { |
|
|
|
@ -536,13 +549,12 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private ManagedList<BeanDefinitionHolder> extractBeanSubElements(Element parentElement, ParserContext parserContext) { |
|
|
|
private ManagedList<Object> extractBeanSubElements(Element parentElement, ParserContext parserContext) { |
|
|
|
ManagedList<BeanDefinitionHolder> list = new ManagedList<BeanDefinitionHolder>(); |
|
|
|
ManagedList<Object> list = new ManagedList<Object>(); |
|
|
|
list.setSource(parserContext.extractSource(parentElement)); |
|
|
|
list.setSource(parserContext.extractSource(parentElement)); |
|
|
|
for (Element beanElement : DomUtils.getChildElementsByTagName(parentElement, "bean")) { |
|
|
|
for (Element beanElement : DomUtils.getChildElementsByTagName(parentElement, "bean", "ref")) { |
|
|
|
BeanDefinitionHolder beanDef = parserContext.getDelegate().parseBeanDefinitionElement(beanElement); |
|
|
|
Object object = parserContext.getDelegate().parsePropertySubElement(beanElement, null); |
|
|
|
beanDef = parserContext.getDelegate().decorateBeanDefinitionIfRequired(beanElement, beanDef); |
|
|
|
list.add(object); |
|
|
|
list.add(beanDef); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
return list; |
|
|
|
return list; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -566,25 +578,6 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { |
|
|
|
return list; |
|
|
|
return list; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ManagedList<BeanDefinitionHolder> wrapWebArgumentResolverBeanDefs( |
|
|
|
|
|
|
|
List<BeanDefinitionHolder> beanDefs, ParserContext parserContext) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ManagedList<BeanDefinitionHolder> result = new ManagedList<BeanDefinitionHolder>(); |
|
|
|
|
|
|
|
for (BeanDefinitionHolder beanDef : beanDefs) { |
|
|
|
|
|
|
|
String className = beanDef.getBeanDefinition().getBeanClassName(); |
|
|
|
|
|
|
|
Class<?> clazz = ClassUtils.resolveClassName(className, parserContext.getReaderContext().getBeanClassLoader()); |
|
|
|
|
|
|
|
if (WebArgumentResolver.class.isAssignableFrom(clazz)) { |
|
|
|
|
|
|
|
RootBeanDefinition adapter = new RootBeanDefinition(ServletWebArgumentResolverAdapter.class); |
|
|
|
|
|
|
|
adapter.getConstructorArgumentValues().addIndexedArgumentValue(0, beanDef); |
|
|
|
|
|
|
|
result.add(new BeanDefinitionHolder(adapter, beanDef.getBeanName() + "Adapter")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
result.add(beanDef); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* A FactoryBean for a CompositeUriComponentsContributor that obtains the |
|
|
|
* A FactoryBean for a CompositeUriComponentsContributor that obtains the |
|
|
|
|