38
38
import org .springframework .validation .Validator ;
39
39
import org .springframework .validation .beanvalidation .LocalValidatorFactoryBean ;
40
40
import org .springframework .web .bind .support .ConfigurableWebBindingInitializer ;
41
+ import org .springframework .web .servlet .handler .ConversionServiceHandlerInterceptor ;
42
+ import org .springframework .web .servlet .handler .MappedInterceptor ;
41
43
import org .springframework .web .servlet .mvc .annotation .AnnotationMethodHandlerAdapter ;
42
44
import org .springframework .web .servlet .mvc .annotation .DefaultAnnotationHandlerMapping ;
43
45
@@ -94,28 +96,42 @@ public BeanDefinition parse(Element element, ParserContext parserContext) {
94
96
annMappingDef .getPropertyValues ().add ("order" , 0 );
95
97
String annMappingName = parserContext .getReaderContext ().registerWithGeneratedName (annMappingDef );
96
98
99
+ RuntimeBeanReference conversionService = getConversionService (element , source , parserContext );
100
+ RuntimeBeanReference validator = getValidator (element , source , parserContext );
101
+
97
102
RootBeanDefinition bindingDef = new RootBeanDefinition (ConfigurableWebBindingInitializer .class );
98
103
bindingDef .setSource (source );
99
104
bindingDef .setRole (BeanDefinition .ROLE_INFRASTRUCTURE );
100
- bindingDef .getPropertyValues ().add ("conversionService" , getConversionService ( element , source , parserContext ) );
101
- bindingDef .getPropertyValues ().add ("validator" , getValidator ( element , source , parserContext ) );
105
+ bindingDef .getPropertyValues ().add ("conversionService" , conversionService );
106
+ bindingDef .getPropertyValues ().add ("validator" , validator );
102
107
103
108
RootBeanDefinition annAdapterDef = new RootBeanDefinition (AnnotationMethodHandlerAdapter .class );
104
109
annAdapterDef .setSource (source );
105
110
annAdapterDef .setRole (BeanDefinition .ROLE_INFRASTRUCTURE );
106
111
annAdapterDef .getPropertyValues ().add ("webBindingInitializer" , bindingDef );
107
112
annAdapterDef .getPropertyValues ().add ("messageConverters" , getMessageConverters (source ));
108
- String adapterName = parserContext .getReaderContext ().registerWithGeneratedName (annAdapterDef );
113
+ String annAdapterName = parserContext .getReaderContext ().registerWithGeneratedName (annAdapterDef );
114
+
115
+ RootBeanDefinition csInterceptorDef = new RootBeanDefinition (ConversionServiceHandlerInterceptor .class );
116
+ csInterceptorDef .setSource (source );
117
+ csInterceptorDef .getConstructorArgumentValues ().addIndexedArgumentValue (0 , conversionService );
118
+ RootBeanDefinition mappedCsInterceptorDef = new RootBeanDefinition (MappedInterceptor .class );
119
+ mappedCsInterceptorDef .setSource (source );
120
+ mappedCsInterceptorDef .setRole (BeanDefinition .ROLE_INFRASTRUCTURE );
121
+ mappedCsInterceptorDef .getConstructorArgumentValues ().addIndexedArgumentValue (0 , (Object ) null );
122
+ mappedCsInterceptorDef .getConstructorArgumentValues ().addIndexedArgumentValue (1 , csInterceptorDef );
123
+ String mappedInterceptorName = parserContext .getReaderContext ().registerWithGeneratedName (mappedCsInterceptorDef );
109
124
110
125
parserContext .registerComponent (new BeanComponentDefinition (annMappingDef , annMappingName ));
111
- parserContext .registerComponent (new BeanComponentDefinition (annAdapterDef , adapterName ));
126
+ parserContext .registerComponent (new BeanComponentDefinition (annAdapterDef , annAdapterName ));
127
+ parserContext .registerComponent (new BeanComponentDefinition (mappedCsInterceptorDef , mappedInterceptorName ));
112
128
parserContext .popAndRegisterContainingComponent ();
113
129
114
130
return null ;
115
131
}
116
132
117
133
118
- private Object getConversionService (Element element , Object source , ParserContext parserContext ) {
134
+ private RuntimeBeanReference getConversionService (Element element , Object source , ParserContext parserContext ) {
119
135
if (element .hasAttribute ("conversion-service" )) {
120
136
return new RuntimeBeanReference (element .getAttribute ("conversion-service" ));
121
137
}
@@ -129,7 +145,7 @@ private Object getConversionService(Element element, Object source, ParserContex
129
145
}
130
146
}
131
147
132
- private Object getValidator (Element element , Object source , ParserContext parserContext ) {
148
+ private RuntimeBeanReference getValidator (Element element , Object source , ParserContext parserContext ) {
133
149
if (element .hasAttribute ("validator" )) {
134
150
return new RuntimeBeanReference (element .getAttribute ("validator" ));
135
151
}
0 commit comments