mvc namespace interceptors element--ignoring test case until issue with setting collection of bean definition property values is resolved

This commit is contained in:
Keith Donald 2009-11-21 16:00:53 +00:00
parent 44fcc572a7
commit 7309b11849
3 changed files with 36 additions and 8 deletions

View File

@ -16,9 +16,11 @@
package org.springframework.web.servlet.config; package org.springframework.web.servlet.config;
import org.w3c.dom.Element; import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.parsing.BeanComponentDefinition; import org.springframework.beans.factory.parsing.BeanComponentDefinition;
import org.springframework.beans.factory.parsing.CompositeComponentDefinition; import org.springframework.beans.factory.parsing.CompositeComponentDefinition;
@ -28,11 +30,13 @@ import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.ConversionService;
import org.springframework.format.support.FormattingConversionServiceFactoryBean; import org.springframework.format.support.FormattingConversionServiceFactoryBean;
import org.springframework.util.ClassUtils; import org.springframework.util.ClassUtils;
import org.springframework.util.xml.DomUtils;
import org.springframework.validation.Validator; import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer; import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter; import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping; import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
import org.w3c.dom.Element;
/** /**
* {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses the {@code annotation-driven} element to configure * {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses the {@code annotation-driven} element to configure
@ -67,6 +71,16 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
mappingDef.getPropertyValues().add("order", 0); mappingDef.getPropertyValues().add("order", 0);
String mappingName = parserContext.getReaderContext().registerWithGeneratedName(mappingDef); String mappingName = parserContext.getReaderContext().registerWithGeneratedName(mappingDef);
Element interceptors = DomUtils.getChildElementByTagName(element, "interceptors");
if (interceptors != null) {
List<Element> beans = DomUtils.getChildElementsByTagName(interceptors, "bean");
List<BeanDefinition> interceptorBeans = new ArrayList<BeanDefinition>(beans.size());
for (Element bean : beans) {
interceptorBeans.add(parserContext.getDelegate().parseBeanDefinitionElement(bean).getBeanDefinition());
}
mappingDef.getPropertyValues().add("interceptors", interceptorBeans);
}
RootBeanDefinition bindingDef = new RootBeanDefinition(ConfigurableWebBindingInitializer.class); RootBeanDefinition bindingDef = new RootBeanDefinition(ConfigurableWebBindingInitializer.class);
bindingDef.setSource(source); bindingDef.setSource(source);
bindingDef.getPropertyValues().add("conversionService", getConversionService(element, source, parserContext)); bindingDef.getPropertyValues().add("conversionService", getConversionService(element, source, parserContext));

View File

@ -22,7 +22,7 @@
<xsd:documentation source="java:org.springframework.web.servlet.HandlerInterceptor"><![CDATA[ <xsd:documentation source="java:org.springframework.web.servlet.HandlerInterceptor"><![CDATA[
The ordered list of interceptors that intercept HTTP Servlet Requests mapped to Controllers. The ordered list of interceptors that intercept HTTP Servlet Requests mapped to Controllers.
Interceptors allow a request to be pre/post processed before/after handling. Interceptors allow a request to be pre/post processed before/after handling.
Each inteceptor should be configured as an inner bean that implements the org.springframework.web.servlet.HandlerInterceptor interface. Each inteceptor should be configured as an inner bean that implements either the org.springframework.web.servlet.HandlerInterceptor or org.springframework.web.context.request.WebRequestInterceptor interface.
]]></xsd:documentation> ]]></xsd:documentation>
</xsd:annotation> </xsd:annotation>
<xsd:complexType> <xsd:complexType>

View File

@ -16,15 +16,20 @@
package org.springframework.web.servlet.config; 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.assertTrue;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import static org.junit.Assert.*;
import org.junit.Before; import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.core.convert.ConversionFailedException; import org.springframework.core.convert.ConversionFailedException;
@ -44,8 +49,11 @@ import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.support.GenericWebApplicationContext; import org.springframework.web.context.support.GenericWebApplicationContext;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter; import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping; import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
import org.springframework.web.servlet.theme.ThemeChangeInterceptor;
/** /**
* @author Keith Donald * @author Keith Donald
@ -132,16 +140,22 @@ public class MvcNamespaceTests {
} }
@Test @Test
@Ignore
public void testInterceptors() throws Exception { public void testInterceptors() throws Exception {
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
reader.loadBeanDefinitions(new ClassPathResource("mvc-config-interceptors.xml", getClass())); reader.loadBeanDefinitions(new ClassPathResource("mvc-config-interceptors.xml", getClass()));
assertEquals(4, container.getBeanDefinitionCount()); assertEquals(4, container.getBeanDefinitionCount());
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class); DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
assertNotNull(mapping); assertNotNull(mapping);
assertEquals(0, mapping.getOrder()); mapping.setRootHandler(new TestController());
AnnotationMethodHandlerAdapter adapter = container.getBean(AnnotationMethodHandlerAdapter.class); MockHttpServletRequest request = new MockHttpServletRequest();
assertNotNull(adapter); request.addParameter("locale", "en");
assertNotNull(container.getBean(FormattingConversionServiceFactoryBean.class)); request.addParameter("theme", "green");
HandlerExecutionChain chain = mapping.getHandler(request);
assertEquals(2, chain.getInterceptors().length);
assertTrue(chain.getInterceptors()[0] instanceof LocaleChangeInterceptor);
assertTrue(chain.getInterceptors()[1] instanceof ThemeChangeInterceptor);
} }
@Controller @Controller