java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling

spring, spring-mvc, spring-test

Solution

One of your `@Configuration` classes is obviously annotated with `@EnableWebMvc`. That's how `DelegatingWebMvcConfiguration` ends up in your stack trace, since it is imported by `@EnableWebMvc`.

So although you think you don't need a `WebApplicationContext` (and hence a `ServletContext`), you in fact do need it simply because you are loading an application context with `@EnableWebMvc`.

You have two options:

- Compose the configuration classes for your integration test so that you are not including the web-related configuration (i.e., the `@Configuration` class(es) annotated with `@EnableWebMvc`).

- Annotate your test class with `@WebAppConfiguration` as suggested in other comments above.

Regards,

Sam (author of the Spring TestContext Framework)

Problem

I have the following test class: ``` @ActiveProfiles({ "DataTC", "test" }) @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {BaseTestConfiguration.class, DataTestConfiguration.class, JpaConfiguration.class, PropertyPlaceholderConfiguration.class }) public class RegularDayToTimeSlotsTest { ... ``` The issue seems to come from the BaseTestConfiguration class: ``` @Configuration @ComponentScan(basePackages = { "com.bignibou" }, excludeFilters = { @Filter(type = FilterType.CUSTOM, value = RooRegexFilter.class), @Filter(type = FilterType.ANNOTATION, value = Controller.class), @Filter(type = FilterType.ANNOTATION, value = ControllerAdvice.class) }) public class BaseTestConfiguration { } ``` I systematically get this exception: ``` Caused by: java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling at org.springframework.util.Assert.notNull(Assert.java:112) at org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer.<init>(DefaultServletHandlerConfigurer.java:54) at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.defaultServletHandlerMapping(WebMvcConfigurationSupport.java:329) at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerByCGLIB$$bb4ceb44.CGLIB$defaultServletHandlerMapping$22(<generated>) at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerByCGLIB$$bb4ceb44$$FastClassByCGLIB$$368bb5c1.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:326) at org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration$$EnhancerByCGLIB$$bb4ceb44.defaultServletHandlerMapping(<generated>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166) ... 43 more ``` I am not sure how to get around this issue. Somehow Spring is looking for a ServletContext when I run the test and I get the above exception...

Original source

Related problems