Update view-resolver namespace

Issue: SPR-7093
This commit is contained in:
Rossen Stoyanchev
2014-07-12 22:19:18 -04:00
parent f54cee47b0
commit 5e1a5c8d51
16 changed files with 730 additions and 576 deletions

View File

@@ -67,6 +67,7 @@ import org.springframework.web.method.support.InvocableHandlerMethod;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.handler.*;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter;
@@ -95,6 +96,8 @@ import org.springframework.web.servlet.view.velocity.VelocityViewResolver;
import static org.junit.Assert.*;
/**
* Tests loading actual MVC namespace configuration.
*
* @author Keith Donald
* @author Arjen Poutsma
* @author Jeremy Grelle
@@ -557,95 +560,87 @@ public class MvcNamespaceTests {
}
@Test
public void testViewResolvers() throws Exception {
loadBeanDefinitions("mvc-config-view-resolution.xml", 8);
public void testViewResolution() throws Exception {
loadBeanDefinitions("mvc-config-view-resolution.xml", 5);
ViewResolverComposite compositeResolver = this.appContext.getBean(ViewResolverComposite.class);
assertNotNull(compositeResolver);
assertEquals(7, compositeResolver.getViewResolvers().size());
assertEquals(0, compositeResolver.getOrder());
List<ViewResolver> resolvers = compositeResolver.getViewResolvers();
assertEquals(BeanNameViewResolver.class, resolvers.get(0).getClass());
ViewResolver resolver = resolvers.get(1);
assertEquals(InternalResourceViewResolver.class, resolver.getClass());
DirectFieldAccessor accessor = new DirectFieldAccessor(resolver);
assertEquals(InternalResourceView.class, accessor.getPropertyValue("viewClass"));
assertEquals(TilesViewResolver.class, resolvers.get(2).getClass());
resolver = resolvers.get(3);
FreeMarkerViewResolver freeMarkerViewResolver = (FreeMarkerViewResolver) resolver;
accessor = new DirectFieldAccessor(resolver);
assertEquals("freemarker-", accessor.getPropertyValue("prefix"));
assertEquals(".freemarker", accessor.getPropertyValue("suffix"));
assertArrayEquals(new String[] {"my*", "*Report"}, (String[]) accessor.getPropertyValue("viewNames"));
assertEquals(1024, accessor.getPropertyValue("cacheLimit"));
resolver = resolvers.get(4);
VelocityViewResolver velocityViewResolver = (VelocityViewResolver) resolver;
accessor = new DirectFieldAccessor(resolver);
assertEquals("", accessor.getPropertyValue("prefix"));
assertEquals(".vm", accessor.getPropertyValue("suffix"));
assertEquals(0, accessor.getPropertyValue("cacheLimit"));
assertEquals(InternalResourceViewResolver.class, resolvers.get(5).getClass());
assertEquals(InternalResourceViewResolver.class, resolvers.get(6).getClass());
InternalResourceViewResolver internalResourceViewResolver = appContext.getBean(InternalResourceViewResolver.class);
assertNotNull(internalResourceViewResolver);
assertEquals(0, internalResourceViewResolver.getOrder());
DirectFieldAccessor internalResourceViewResolverFieldAccessor = new DirectFieldAccessor(internalResourceViewResolver);
assertEquals("/WEB-INF/", internalResourceViewResolverFieldAccessor.getPropertyValue("prefix"));
assertEquals(".jsp", internalResourceViewResolverFieldAccessor.getPropertyValue("suffix"));
BeanNameViewResolver beanNameViewResolver = appContext.getBean(BeanNameViewResolver.class);
assertNotNull(beanNameViewResolver);
assertEquals(1, beanNameViewResolver.getOrder());
TilesConfigurer tilesConfigurer = appContext.getBean(TilesConfigurer.class);
assertNotNull(tilesConfigurer);
DirectFieldAccessor tilesConfigurerFieldAccessor = new DirectFieldAccessor(tilesConfigurer);
assertArrayEquals(new String[]{"/org/springframework/web/servlet/resource/tiles/tiles1.xml","/org/springframework/web/servlet/resource/tiles/tiles2.xml"},
(String[])tilesConfigurerFieldAccessor.getPropertyValue("definitions"));
assertTrue((boolean)tilesConfigurerFieldAccessor.getPropertyValue("checkRefresh"));
TilesViewResolver tilesViewResolver = appContext.getBean(TilesViewResolver.class);
assertNotNull(tilesViewResolver);
assertEquals(2, tilesViewResolver.getOrder());
String[] definitions = {
"/org/springframework/web/servlet/resource/tiles/tiles1.xml",
"/org/springframework/web/servlet/resource/tiles/tiles2.xml"
};
accessor = new DirectFieldAccessor(tilesConfigurer);
assertArrayEquals(definitions, (String[]) accessor.getPropertyValue("definitions"));
assertTrue((boolean)accessor.getPropertyValue("checkRefresh"));
FreeMarkerConfigurer freeMarkerConfigurer = appContext.getBean(FreeMarkerConfigurer.class);
assertNotNull(freeMarkerConfigurer);
DirectFieldAccessor freeMarkerConfigurerFieldAccessor = new DirectFieldAccessor(freeMarkerConfigurer);
assertArrayEquals(new String[]{"/","/test"},
(String[])freeMarkerConfigurerFieldAccessor.getPropertyValue("templateLoaderPaths"));
FreeMarkerViewResolver freeMarkerViewResolver = appContext.getBean(FreeMarkerViewResolver.class);
assertNotNull(freeMarkerViewResolver);
assertEquals(3, freeMarkerViewResolver.getOrder());
DirectFieldAccessor freeMarkerViewResolverFieldAccessor = new DirectFieldAccessor(freeMarkerViewResolver);
assertEquals("", freeMarkerViewResolverFieldAccessor.getPropertyValue("prefix"));
assertEquals(".ftl", freeMarkerViewResolverFieldAccessor.getPropertyValue("suffix"));
assertEquals(0, freeMarkerViewResolverFieldAccessor.getPropertyValue("cacheLimit"));
accessor = new DirectFieldAccessor(freeMarkerConfigurer);
assertArrayEquals(new String[]{"/", "/test"}, (String[]) accessor.getPropertyValue("templateLoaderPaths"));
VelocityConfigurer velocityConfigurer = appContext.getBean(VelocityConfigurer.class);
assertNotNull(velocityConfigurer);
DirectFieldAccessor velocityConfigurerFieldAccessor = new DirectFieldAccessor(velocityConfigurer);
assertEquals("/", velocityConfigurerFieldAccessor.getPropertyValue("resourceLoaderPath"));
VelocityViewResolver velocityViewResolver = appContext.getBean(VelocityViewResolver.class);
assertNotNull(velocityViewResolver);
assertEquals(4, velocityViewResolver.getOrder());
DirectFieldAccessor velocityViewResolverFieldAccessor = new DirectFieldAccessor(velocityViewResolver);
assertEquals("", velocityViewResolverFieldAccessor.getPropertyValue("prefix"));
assertEquals(".vm", velocityViewResolverFieldAccessor.getPropertyValue("suffix"));
assertEquals(0, velocityViewResolverFieldAccessor.getPropertyValue("cacheLimit"));
accessor = new DirectFieldAccessor(velocityConfigurer);
assertEquals("/test", accessor.getPropertyValue("resourceLoaderPath"));
}
@Test
public void testContentNegotiating() throws Exception {
loadBeanDefinitions("mvc-config-content-negotiating.xml", 11);
public void testViewResolutionWithContentNegotiation() throws Exception {
loadBeanDefinitions("mvc-config-view-resolution-content-negotiation.xml", 5);
ContentNegotiatingViewResolver contentNegotiatingViewResolver = appContext.getBean(ContentNegotiatingViewResolver.class);
assertNotNull(contentNegotiatingViewResolver);
DirectFieldAccessor contentNegotiatingViewResolverFieldAccessor = new DirectFieldAccessor(contentNegotiatingViewResolver);
assertTrue((boolean)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("useNotAcceptableStatusCode"));
assertEquals(1, ((List<?>)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("defaultViews")).size());
assertEquals(7, ((List<?>)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("viewResolvers")).size());
ContentNegotiationManager contentNegotiationManagerProperty =
(ContentNegotiationManager)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("contentNegotiationManager");
assertNotNull(contentNegotiationManagerProperty);
ContentNegotiationManager contentNegotiationManager = appContext.getBean(ContentNegotiationManager.class);
assertNotNull(contentNegotiationManager);
assertEquals(contentNegotiationManagerProperty.getClass(), contentNegotiationManager.getClass());
ViewResolverComposite compositeResolver = this.appContext.getBean(ViewResolverComposite.class);
assertNotNull(compositeResolver);
assertEquals(1, compositeResolver.getViewResolvers().size());
assertEquals(Ordered.HIGHEST_PRECEDENCE, compositeResolver.getOrder());
List<ViewResolver> resolvers = compositeResolver.getViewResolvers();
assertEquals(ContentNegotiatingViewResolver.class, resolvers.get(0).getClass());
ContentNegotiatingViewResolver cnvr = (ContentNegotiatingViewResolver) resolvers.get(0);
assertEquals(5, cnvr.getViewResolvers().size());
assertEquals(1, cnvr.getDefaultViews().size());
assertTrue(cnvr.isUseNotAcceptableStatusCode());
String beanName = "contentNegotiationManager";
DirectFieldAccessor accessor = new DirectFieldAccessor(cnvr);
ContentNegotiationManager manager = (ContentNegotiationManager) accessor.getPropertyValue(beanName);
assertNotNull(manager);
assertSame(manager, this.appContext.getBean(ContentNegotiationManager.class));
}
@Test
public void testContentNegotiatingWithDefaultValues() throws Exception {
loadBeanDefinitions("mvc-config-content-negotiating-with-default-values.xml", 19);
ContentNegotiatingViewResolver contentNegotiatingViewResolver = appContext.getBean(ContentNegotiatingViewResolver.class);
assertNotNull(contentNegotiatingViewResolver);
DirectFieldAccessor contentNegotiatingViewResolverFieldAccessor = new DirectFieldAccessor(contentNegotiatingViewResolver);
assertEquals(1, ((List<?>)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("defaultViews")).size());
assertEquals(3, ((List<?>)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("viewResolvers")).size());
ContentNegotiationManager contentNegotiationManagerProperty =
(ContentNegotiationManager)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("contentNegotiationManager");
assertNotNull(contentNegotiationManagerProperty);
ContentNegotiationManager contentNegotiationManager = appContext.getBean(ContentNegotiationManager.class);
assertNotNull(contentNegotiationManager);
assertEquals(contentNegotiationManagerProperty.getClass(), contentNegotiationManager.getClass());
}
@Test
public void testPathMatchingHandlerMappings() throws Exception {
loadBeanDefinitions("mvc-config-path-matching-mappings.xml", 20);
@@ -673,7 +668,8 @@ public class MvcNamespaceTests {
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(appContext);
ClassPathResource resource = new ClassPathResource(fileName, AnnotationDrivenBeanDefinitionParserTests.class);
reader.loadBeanDefinitions(resource);
assertEquals(expectedBeanCount, appContext.getBeanDefinitionCount());
assertEquals("Bean names: " + Arrays.toString(this.appContext.getBeanDefinitionNames()),
expectedBeanCount, appContext.getBeanDefinitionCount());
appContext.refresh();
}

View File

@@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<mvc:annotation-driven />
<mvc:view-resolution>
<mvc:content-negotiating use-not-acceptable="true">
<mvc:default-views>
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
</mvc:default-views>
</mvc:content-negotiating>
<mvc:jsp />
<mvc:freemarker />
<mvc:velocity />
</mvc:view-resolution>
</beans>

View File

@@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myViewResolver2"
class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="mediaTypes">
<value>
xml=application/rss+xml
</value>
</property>
</bean>
<mvc:view-resolution>
<mvc:content-negotiating manager="contentNegotiationManager" use-not-acceptable="true">
<mvc:default-views>
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
</mvc:default-views>
</mvc:content-negotiating>
<mvc:jsp prefix="/WEB-INF/" suffix=".jsp" />
<mvc:bean-name />
<mvc:tiles definitions="/org/springframework/web/servlet/resource/tiles/tiles1.xml" />
<mvc:freemarker prefix="" suffix=".ftl" template-loader-paths="/" />
<mvc:velocity prefix="" suffix=".vm" resource-loader-path="/" />
<bean id="myViewResolver1" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<ref bean="myViewResolver2" />
</mvc:view-resolution>
</beans>

View File

@@ -1,10 +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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
View resolution finds the ContentNegotiationManager created by or
registered with <mvc:annotation-driven>. Or in its absence simply declare it.
-->
<bean id="mvcContentNegotiationManager"
class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"/>
<mvc:view-resolvers>
<mvc:content-negotiation use-not-acceptable="true">
<mvc:default-views>
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
</mvc:default-views>
</mvc:content-negotiation>
<mvc:bean-name />
<mvc:jsp />
<mvc:tiles />
<mvc:freemarker />
<mvc:velocity />
</mvc:view-resolvers>
<mvc:tiles check-refresh="true">
<mvc:definitions location="/org/springframework/web/servlet/resource/tiles/tiles1.xml" />
</mvc:tiles>
<mvc:freemarker>
<mvc:template-loader-path location="/org/springframework/web/servlet/view" />
</mvc:freemarker>
<mvc:velocity resource-loader-path="/org/springframework/web/servlet/view" />
</beans>

View File

@@ -1,26 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<mvc:view-resolution>
<mvc:view-resolvers>
<mvc:bean-name />
<mvc:jsp view-class="org.springframework.web.servlet.view.InternalResourceView" />
<mvc:tiles />
<mvc:freemarker prefix="freemarker-" suffix=".freemarker" view-names="my*,*Report" />
<mvc:velocity cache-views="false" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
<ref bean="customResolver" />
</mvc:view-resolvers>
<mvc:jsp prefix="/WEB-INF/" suffix=".jsp" />
<bean id="customResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
<mvc:bean-name />
<mvc:tiles check-refresh="true" validate-definitions="true">
<mvc:definitions location="/org/springframework/web/servlet/resource/tiles/tiles1.xml" />
<mvc:definitions location="/org/springframework/web/servlet/resource/tiles/tiles2.xml" />
</mvc:tiles>
<mvc:tiles definitions="/org/springframework/web/servlet/resource/tiles/tiles1.xml,/org/springframework/web/servlet/resource/tiles/tiles2.xml"
check-refresh="true" />
<mvc:freemarker>
<mvc:template-loader-path location="/" />
<mvc:template-loader-path location="/test" />
</mvc:freemarker>
<mvc:freemarker prefix="" suffix=".ftl"
template-loader-paths="/,/test" cache="false" />
<mvc:velocity resource-loader-path="/test" />
<mvc:velocity prefix="" suffix=".vm"
resource-loader-path="/" cache="false" />
</mvc:view-resolution>
</beans>