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;
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.BeanDefinitionHolder;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
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.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;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
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
@ -67,6 +71,16 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
mappingDef.getPropertyValues().add("order", 0);
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);
bindingDef.setSource(source);
bindingDef.getPropertyValues().add("conversionService", getConversionService(element, source, parserContext));

View File

@ -22,7 +22,7 @@
<xsd:documentation source="java:org.springframework.web.servlet.HandlerInterceptor"><![CDATA[
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.
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:annotation>
<xsd:complexType>

View File

@ -16,15 +16,20 @@
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.Locale;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.i18n.LocaleContextHolder;
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.RequestParam;
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.DefaultAnnotationHandlerMapping;
import org.springframework.web.servlet.theme.ThemeChangeInterceptor;
/**
* @author Keith Donald
@ -132,16 +140,22 @@ public class MvcNamespaceTests {
}
@Test
@Ignore
public void testInterceptors() throws Exception {
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
reader.loadBeanDefinitions(new ClassPathResource("mvc-config-interceptors.xml", getClass()));
assertEquals(4, container.getBeanDefinitionCount());
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));
mapping.setRootHandler(new TestController());
MockHttpServletRequest request = new MockHttpServletRequest();
request.addParameter("locale", "en");
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