diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java
index a61d7f1304b..b226dbd836b 100644
--- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java
@@ -16,20 +16,16 @@
package org.springframework.web.servlet.config;
-import java.util.List;
-
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
import org.springframework.beans.factory.parsing.CompositeComponentDefinition;
-import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.core.convert.ConversionService;
import org.springframework.format.support.FormattingConversionServiceFactoryBean;
import org.springframework.util.ClassUtils;
-import org.springframework.util.xml.DomUtils;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
@@ -56,44 +52,34 @@ import org.w3c.dom.Element;
* @author Juergen Hoeller
* @since 3.0
*/
-class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
+public class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
private static final boolean jsr303Present = ClassUtils.isPresent(
- "javax.validation.Validator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());
+ "javax.validation.Validator", InterceptorsBeanDefinitionParser.class.getClassLoader());
public BeanDefinition parse(Element element, ParserContext parserContext) {
Object source = parserContext.extractSource(element);
- RootBeanDefinition mappingDef = new RootBeanDefinition(DefaultAnnotationHandlerMapping.class);
- mappingDef.setSource(source);
- mappingDef.getPropertyValues().add("order", 0);
- String mappingName = parserContext.getReaderContext().registerWithGeneratedName(mappingDef);
+ RootBeanDefinition annMappingDef = new RootBeanDefinition(DefaultAnnotationHandlerMapping.class);
+ annMappingDef.setSource(source);
+ annMappingDef.getPropertyValues().add("order", 0);
+ String annMappingName = parserContext.getReaderContext().registerWithGeneratedName(annMappingDef);
- Element interceptors = DomUtils.getChildElementByTagName(element, "interceptors");
- if (interceptors != null) {
- List beans = DomUtils.getChildElementsByTagName(interceptors, "bean");
- List interceptorBeans = new ManagedList(beans.size());
- for (Element bean : beans) {
- interceptorBeans.add(parserContext.getDelegate().parseBeanDefinitionElement(bean).getBeanDefinition());
- }
- mappingDef.getPropertyValues().add("interceptors", interceptorBeans);
- }
-
RootBeanDefinition bindingDef = new RootBeanDefinition(ConfigurableWebBindingInitializer.class);
bindingDef.setSource(source);
bindingDef.getPropertyValues().add("conversionService", getConversionService(element, source, parserContext));
bindingDef.getPropertyValues().add("validator", getValidator(element, source, parserContext));
- RootBeanDefinition adapterDef = new RootBeanDefinition(AnnotationMethodHandlerAdapter.class);
- adapterDef.setSource(source);
- adapterDef.getPropertyValues().add("webBindingInitializer", bindingDef);
- String adapterName = parserContext.getReaderContext().registerWithGeneratedName(adapterDef);
+ RootBeanDefinition annAdapterDef = new RootBeanDefinition(AnnotationMethodHandlerAdapter.class);
+ annAdapterDef.setSource(source);
+ annAdapterDef.getPropertyValues().add("webBindingInitializer", bindingDef);
+ String adapterName = parserContext.getReaderContext().registerWithGeneratedName(annAdapterDef);
CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(), source);
parserContext.pushContainingComponent(compDefinition);
- parserContext.registerComponent(new BeanComponentDefinition(mappingDef, mappingName));
- parserContext.registerComponent(new BeanComponentDefinition(adapterDef, adapterName));
+ parserContext.registerComponent(new BeanComponentDefinition(annMappingDef, annMappingName));
+ parserContext.registerComponent(new BeanComponentDefinition(annAdapterDef, adapterName));
parserContext.popAndRegisterContainingComponent();
return null;
diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/InterceptorsBeanDefinitionParser.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/InterceptorsBeanDefinitionParser.java
new file mode 100644
index 00000000000..7c111261588
--- /dev/null
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/InterceptorsBeanDefinitionParser.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2002-2009 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.web.servlet.config;
+
+import java.util.List;
+
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.BeanDefinitionHolder;
+import org.springframework.beans.factory.xml.BeanDefinitionParser;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.util.xml.DomUtils;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.w3c.dom.Element;
+
+/**
+ * {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses the {@code interceptors} element to configure
+ * a set of global Spring MVC {@link HandlerInterceptor HandlerInterceptors}.
+ * The set is expected to be configured by type on each registered HandlerMapping.
+ *
+ * @author Keith Donald
+ * @since 3.0
+ */
+class InterceptorsBeanDefinitionParser implements BeanDefinitionParser {
+
+ public BeanDefinition parse(Element element, ParserContext parserContext) {
+ List beans = DomUtils.getChildElementsByTagName(element, "bean");
+ for (Element bean : beans) {
+ BeanDefinitionHolder beanHolder = parserContext.getDelegate().parseBeanDefinitionElement(bean);
+ parserContext.getDelegate().decorateBeanDefinitionIfRequired(bean, beanHolder);
+ parserContext.getReaderContext().registerWithGeneratedName(beanHolder.getBeanDefinition());
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java
index c295b11b476..9716fab6d66 100644
--- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/MvcNamespaceHandler.java
@@ -29,6 +29,8 @@ public class MvcNamespaceHandler extends NamespaceHandlerSupport {
public void init() {
registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser());
+ registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());
+ registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser());
}
}
diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/ViewControllerBeanDefinitionParser.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/ViewControllerBeanDefinitionParser.java
new file mode 100644
index 00000000000..9c298291a64
--- /dev/null
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/ViewControllerBeanDefinitionParser.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2002-2009 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.web.servlet.config;
+
+import java.util.Map;
+
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.beans.factory.xml.BeanDefinitionParser;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
+import org.springframework.web.servlet.mvc.ParameterizableViewController;
+import org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter;
+import org.w3c.dom.Element;
+
+/**
+ * {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses a {@code view-controller} element to register
+ * a {@link ParameterizableViewController}. Will also register a {@link SimpleUrlHandlerMapping} for view controllers.
+ *
+ * @author Keith Donald
+ * @since 3.0
+ */
+class ViewControllerBeanDefinitionParser implements BeanDefinitionParser {
+
+ private String handlerAdapterBeanName;
+
+ private String handlerMappingBeanName;
+
+ public BeanDefinition parse(Element element, ParserContext parserContext) {
+ Object source = parserContext.extractSource(element);
+ if (this.handlerAdapterBeanName == null) {
+ RootBeanDefinition handlerAdapterDef = new RootBeanDefinition(SimpleControllerHandlerAdapter.class);
+ handlerAdapterDef.setSource(source);
+ this.handlerAdapterBeanName = parserContext.getReaderContext().registerWithGeneratedName(handlerAdapterDef);
+ }
+ RootBeanDefinition handlerMappingDef;
+ if (this.handlerMappingBeanName == null) {
+ handlerMappingDef = new RootBeanDefinition(SimpleUrlHandlerMapping.class);
+ handlerMappingDef.setSource(source);
+ handlerMappingDef.getPropertyValues().add("order", "1");
+ this.handlerMappingBeanName = parserContext.getReaderContext().registerWithGeneratedName(handlerMappingDef);
+ } else {
+ handlerMappingDef = (RootBeanDefinition) parserContext.getReaderContext().getRegistry().getBeanDefinition(this.handlerMappingBeanName);
+ }
+ RootBeanDefinition viewControllerDef = new RootBeanDefinition(ParameterizableViewController.class);
+ viewControllerDef.setSource(source);
+ if (element.hasAttribute("view-name")) {
+ viewControllerDef.getPropertyValues().add("viewName", element.getAttribute("view-name"));
+ }
+ Map urlMap;
+ if (handlerMappingDef.getPropertyValues().contains("urlMap")) {
+ urlMap = (Map) handlerMappingDef.getPropertyValues().getPropertyValue("urlMap").getValue();
+ } else {
+ urlMap = new ManagedMap();
+ handlerMappingDef.getPropertyValues().add("urlMap", urlMap);
+ }
+ urlMap.put(element.getAttribute("path"), viewControllerDef);
+ return null;
+ }
+
+}
diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java
index 5ad07788060..9fba6369ea2 100644
--- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMapping.java
@@ -19,6 +19,7 @@ package org.springframework.web.servlet.handler;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@@ -130,6 +131,12 @@ public abstract class AbstractHandlerMapping extends WebApplicationObjectSupport
* @see #adaptInterceptor
*/
protected void initInterceptors() {
+ // TODO consider impact on backwards compatibility here
+ Map globalInterceptors = getApplicationContext().getBeansOfType(HandlerInterceptor.class);
+ if (globalInterceptors != null) {
+ this.interceptors.addAll(globalInterceptors.values());
+ }
+
if (!this.interceptors.isEmpty()) {
this.adaptedInterceptors = new HandlerInterceptor[this.interceptors.size()];
for (int i = 0; i < this.interceptors.size(); i++) {
diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/ParameterizableViewController.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/ParameterizableViewController.java
index 3ab6a819f55..b444e003494 100644
--- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/ParameterizableViewController.java
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/ParameterizableViewController.java
@@ -56,14 +56,15 @@ import org.springframework.web.servlet.ModelAndView;
* | viewName |
* null |
* the name of the view the viewResolver will use to forward to
- * (if this property is not set, an exception will be thrown during
- * initialization) |
+ * (if this property is not set, a null view name will be returned
+ * directing the caller to calculate the view name from the current request)
*
*
*
*
* @author Rod Johnson
* @author Juergen Hoeller
+ * @author Keith Donald
*/
public class ParameterizableViewController extends AbstractController {
@@ -84,14 +85,6 @@ public class ParameterizableViewController extends AbstractController {
return this.viewName;
}
- @Override
- protected void initApplicationContext() {
- if (this.viewName == null) {
- throw new IllegalArgumentException("Property 'viewName' is required");
- }
- }
-
-
/**
* Return a ModelAndView object with the specified view name.
* @see #getViewName()
@@ -99,7 +92,6 @@ public class ParameterizableViewController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
-
return new ModelAndView(getViewName());
}
diff --git a/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd b/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd
index 8bc0dbe28f5..bbaa5dd9a4c 100644
--- a/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd
+++ b/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd
@@ -16,22 +16,6 @@
]]>
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
index 69a175f53c6..963ee151bdf 100644
--- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
+++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
@@ -19,6 +19,7 @@ package org.springframework.web.servlet.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.Date;
@@ -34,7 +35,6 @@ import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.convert.ConversionFailedException;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.style.StylerUtils;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import org.springframework.format.support.FormattingConversionServiceFactoryBean;
@@ -50,7 +50,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.support.GenericWebApplicationContext;
import org.springframework.web.servlet.HandlerExecutionChain;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
+import org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
import org.springframework.web.servlet.theme.ThemeChangeInterceptor;
@@ -79,6 +82,7 @@ public class MvcNamespaceTests {
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
assertNotNull(mapping);
assertEquals(0, mapping.getOrder());
+
AnnotationMethodHandlerAdapter adapter = container.getBean(AnnotationMethodHandlerAdapter.class);
assertNotNull(adapter);
assertNotNull(container.getBean(FormattingConversionServiceFactoryBean.class));
@@ -103,12 +107,8 @@ public class MvcNamespaceTests {
assertEquals(4, container.getBeanDefinitionCount());
container.refresh();
- DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
- assertNotNull(mapping);
- assertEquals(0, mapping.getOrder());
AnnotationMethodHandlerAdapter adapter = container.getBean(AnnotationMethodHandlerAdapter.class);
assertNotNull(adapter);
- assertNotNull(container.getBean(LocalValidatorFactoryBean.class));
TestController handler = new TestController();
@@ -126,12 +126,8 @@ public class MvcNamespaceTests {
assertEquals(4, container.getBeanDefinitionCount());
container.refresh();
- DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
- assertNotNull(mapping);
- assertEquals(0, mapping.getOrder());
AnnotationMethodHandlerAdapter adapter = container.getBean(AnnotationMethodHandlerAdapter.class);
assertNotNull(adapter);
- assertNotNull(container.getBean(FormattingConversionServiceFactoryBean.class));
TestController handler = new TestController();
@@ -149,12 +145,13 @@ public class MvcNamespaceTests {
public void testInterceptors() throws Exception {
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
reader.loadBeanDefinitions(new ClassPathResource("mvc-config-interceptors.xml", getClass()));
- assertEquals(4, container.getBeanDefinitionCount());
+ assertEquals(6, container.getBeanDefinitionCount());
container.refresh();
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
assertNotNull(mapping);
- mapping.setRootHandler(new TestController());
+ mapping.setDefaultHandler(new TestController());
+
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("locale", "en");
request.addParameter("theme", "green");
@@ -165,6 +162,65 @@ public class MvcNamespaceTests {
assertTrue(chain.getInterceptors()[2] instanceof ThemeChangeInterceptor);
}
+ @Test
+ public void testBeanDecoration() throws Exception {
+ XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
+ reader.loadBeanDefinitions(new ClassPathResource("mvc-config-bean-decoration.xml", getClass()));
+ assertEquals(5, container.getBeanDefinitionCount());
+ container.refresh();
+
+ DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
+ assertNotNull(mapping);
+ mapping.setDefaultHandler(new TestController());
+
+ MockHttpServletRequest request = new MockHttpServletRequest();
+
+ HandlerExecutionChain chain = mapping.getHandler(request);
+ assertEquals(2, chain.getInterceptors().length);
+ assertTrue(chain.getInterceptors()[1] instanceof LocaleChangeInterceptor);
+ LocaleChangeInterceptor interceptor = (LocaleChangeInterceptor) chain.getInterceptors()[1];
+ assertEquals("lang", interceptor.getParamName());
+ }
+
+ @Test
+ public void testViewControllers() throws Exception {
+ XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
+ reader.loadBeanDefinitions(new ClassPathResource("mvc-config-view-controllers.xml", getClass()));
+ assertEquals(8, container.getBeanDefinitionCount());
+ container.refresh();
+
+ DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
+ assertNotNull(mapping);
+ mapping.setDefaultHandler(new TestController());
+
+ MockHttpServletRequest request = new MockHttpServletRequest();
+
+ HandlerExecutionChain chain = mapping.getHandler(request);
+ assertEquals(3, chain.getInterceptors().length);
+ assertTrue(chain.getInterceptors()[1] instanceof LocaleChangeInterceptor);
+
+ SimpleUrlHandlerMapping mapping2 = container.getBean(SimpleUrlHandlerMapping.class);
+ assertNotNull(mapping2);
+
+ SimpleControllerHandlerAdapter adapter = container.getBean(SimpleControllerHandlerAdapter.class);
+ assertNotNull(adapter);
+
+ request.setRequestURI("/foo");
+ request.setMethod("GET");
+ chain = mapping2.getHandler(request);
+ assertEquals(3, chain.getInterceptors().length);
+ assertTrue(chain.getInterceptors()[1] instanceof LocaleChangeInterceptor);
+ ModelAndView mv = adapter.handle(request, new MockHttpServletResponse(), chain.getHandler());
+ assertNull(mv.getViewName());
+
+ request.setRequestURI("/bar");
+ chain = mapping2.getHandler(request);
+ assertEquals(3, chain.getInterceptors().length);
+ assertTrue(chain.getInterceptors()[1] instanceof LocaleChangeInterceptor);
+ ModelAndView mv2 = adapter.handle(request, new MockHttpServletResponse(), chain.getHandler());
+ assertEquals("baz", mv2.getViewName());
+ }
+
@Controller
public static class TestController {
diff --git a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-bean-decoration.xml b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-bean-decoration.xml
new file mode 100644
index 00000000000..6d5fd4da234
--- /dev/null
+++ b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-bean-decoration.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-interceptors.xml b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-interceptors.xml
index f7b031bbb1b..6fd3dcd7aad 100644
--- a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-interceptors.xml
+++ b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-interceptors.xml
@@ -5,11 +5,11 @@
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.0.xsd">
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-controllers.xml b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-controllers.xml
new file mode 100644
index 00000000000..785bf5974f5
--- /dev/null
+++ b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-controllers.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config.xml b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config.xml
index 032b2b4ba77..1b0b4c7212e 100644
--- a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config.xml
+++ b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config.xml
@@ -5,6 +5,6 @@
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.0.xsd">
-
-
+
+