SPR-7327 Add minOccurs=0 to sub-elements of mvc:annotation-driven and add more tests

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3938 50f2f4bb-b051-0410-bef5-90022cba6387
This commit is contained in:
Rossen Stoyanchev 2011-02-03 22:56:13 +00:00
parent 5c337da704
commit 0d06b35924
5 changed files with 44 additions and 17 deletions

View File

@ -18,7 +18,7 @@
</xsd:annotation> </xsd:annotation>
<xsd:complexType> <xsd:complexType>
<xsd:all minOccurs="0"> <xsd:all minOccurs="0">
<xsd:element name="message-converters"> <xsd:element name="message-converters" minOccurs="0">
<xsd:annotation> <xsd:annotation>
<xsd:documentation><![CDATA[ <xsd:documentation><![CDATA[
Configures one or more HttpMessageConverter types to use for converting @RequestBody method parameters and @ResponseBody method return values. Configures one or more HttpMessageConverter types to use for converting @RequestBody method parameters and @ResponseBody method return values.
@ -38,7 +38,7 @@
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="argument-resolvers"> <xsd:element name="argument-resolvers" minOccurs="0">
<xsd:annotation> <xsd:annotation>
<xsd:documentation><![CDATA[ <xsd:documentation><![CDATA[
Configures one or more WebArgumentResolver types to use for resolving custom arguments to handler methods. Configures one or more WebArgumentResolver types to use for resolving custom arguments to handler methods.

View File

@ -19,7 +19,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import org.junit.BeforeClass; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
@ -42,19 +42,16 @@ import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExc
*/ */
public class AnnotationDrivenBeanDefinitionParserTests { public class AnnotationDrivenBeanDefinitionParserTests {
private static GenericWebApplicationContext appContext; private GenericWebApplicationContext appContext;
@BeforeClass @Before
public static void setup() { public void setup() {
appContext = new GenericWebApplicationContext(); appContext = new GenericWebApplicationContext();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(appContext);
reader.loadBeanDefinitions(new ClassPathResource("mvc-config-annotation-driven.xml",
AnnotationDrivenBeanDefinitionParserTests.class));
appContext.refresh();
} }
@Test @Test
public void testMessageCodesResolver() { public void testMessageCodesResolver() {
loadBeanDefinitions("mvc-config-message-codes-resolver.xml");
AnnotationMethodHandlerAdapter adapter = appContext.getBean(AnnotationMethodHandlerAdapter.class); AnnotationMethodHandlerAdapter adapter = appContext.getBean(AnnotationMethodHandlerAdapter.class);
assertNotNull(adapter); assertNotNull(adapter);
Object initializer = new DirectFieldAccessor(adapter).getPropertyValue("webBindingInitializer"); Object initializer = new DirectFieldAccessor(adapter).getPropertyValue("webBindingInitializer");
@ -66,12 +63,14 @@ public class AnnotationDrivenBeanDefinitionParserTests {
@Test @Test
public void testMessageConverters() { public void testMessageConverters() {
loadBeanDefinitions("mvc-config-message-converters.xml");
verifyMessageConverters(appContext.getBean(AnnotationMethodHandlerAdapter.class)); verifyMessageConverters(appContext.getBean(AnnotationMethodHandlerAdapter.class));
verifyMessageConverters(appContext.getBean(AnnotationMethodHandlerExceptionResolver.class)); verifyMessageConverters(appContext.getBean(AnnotationMethodHandlerExceptionResolver.class));
} }
@Test @Test
public void testArgumentResolvers() { public void testArgumentResolvers() {
loadBeanDefinitions("mvc-config-argument-resolvers.xml");
AnnotationMethodHandlerAdapter adapter = appContext.getBean(AnnotationMethodHandlerAdapter.class); AnnotationMethodHandlerAdapter adapter = appContext.getBean(AnnotationMethodHandlerAdapter.class);
assertNotNull(adapter); assertNotNull(adapter);
Object resolvers = new DirectFieldAccessor(adapter).getPropertyValue("customArgumentResolvers"); Object resolvers = new DirectFieldAccessor(adapter).getPropertyValue("customArgumentResolvers");
@ -82,6 +81,13 @@ public class AnnotationDrivenBeanDefinitionParserTests {
assertTrue(((WebArgumentResolver[]) resolvers)[1] instanceof TestWebArgumentResolver); assertTrue(((WebArgumentResolver[]) resolvers)[1] instanceof TestWebArgumentResolver);
} }
private void loadBeanDefinitions(String fileName) {
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(appContext);
reader.loadBeanDefinitions(new ClassPathResource(fileName,
AnnotationDrivenBeanDefinitionParserTests.class));
appContext.refresh();
}
private void verifyMessageConverters(Object bean) { private void verifyMessageConverters(Object bean) {
assertNotNull(bean); assertNotNull(bean);
Object converters = new DirectFieldAccessor(bean).getPropertyValue("messageConverters"); Object converters = new DirectFieldAccessor(bean).getPropertyValue("messageConverters");

View File

@ -5,17 +5,11 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<mvc:annotation-driven message-codes-resolver="messageCodesResolver"> <mvc:annotation-driven>
<mvc:argument-resolvers> <mvc:argument-resolvers>
<bean class="org.springframework.web.servlet.config.TestWebArgumentResolver"/> <bean class="org.springframework.web.servlet.config.TestWebArgumentResolver"/>
<bean class="org.springframework.web.servlet.config.TestWebArgumentResolver"/> <bean class="org.springframework.web.servlet.config.TestWebArgumentResolver"/>
</mvc:argument-resolvers> </mvc:argument-resolvers>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven> </mvc:annotation-driven>
<bean id="messageCodesResolver" class="org.springframework.web.servlet.config.TestMessageCodesResolver"/>
</beans> </beans>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<mvc:annotation-driven message-codes-resolver="messageCodesResolver"/>
<bean id="messageCodesResolver" class="org.springframework.web.servlet.config.TestMessageCodesResolver"/>
</beans>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
</beans>