Programing

java.lang.IllegalArgumentException : 기본 서블릿 처리를 구성하려면 ServletContext가 필요합니다.

lottogame 2021. 1. 5. 07:40
반응형

java.lang.IllegalArgumentException : 기본 서블릿 처리를 구성하려면 ServletContext가 필요합니다.


다음 테스트 클래스가 있습니다.

@ActiveProfiles({ "DataTC", "test" })
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {BaseTestConfiguration.class, DataTestConfiguration.class, JpaConfiguration.class, PropertyPlaceholderConfiguration.class })
public class RegularDayToTimeSlotsTest {
...

이 문제는 BaseTestConfiguration 클래스에서 발생한 것 같습니다.

@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 {

}

이 예외가 체계적으로 발생합니다.

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

이 문제를 해결하는 방법을 잘 모르겠습니다. 어떻게 든 Spring은 테스트를 실행할 때 ServletContext를 찾고 위의 예외가 발생합니다.


@Configuration클래스 중 하나 는 분명히 @EnableWebMvc. 그 방법 DelegatingWebMvcConfiguration이 있기 때문에, 당신의 스택 추적의 끝을 가져@EnableWebMvc.

따라서 (따라서 ) 가 필요 없다고 생각 하지만 실제로 응용 프로그램 컨텍스트를 .WebApplicationContextServletContext@EnableWebMvc

두 가지 옵션이 있습니다.

  • 웹 관련 구성 (예 :로 @Configuration주석이 달린 클래스)을 포함하지 않도록 통합 테스트를위한 구성 클래스를 작성하십시오 @EnableWebMvc.
  • @WebAppConfiguration위의 다른 주석에서 제안한대로 테스트 클래스에 주석을 추가하십시오 .

문안 인사,

Sam (Spring TestContext Framework의 저자)


실종 된 것 같습니다

@WebAppConfiguration

시험 수업에서.

문서의 상태

리소스 기본 경로는 테스트의 WebApplicationContext에 대한 ServletContext 역할을하는 MockServletContext를 생성하기 위해 백그라운드에서 사용됩니다.

일반적으로 Servlet 컨테이너는 ServletContext. 테스트 환경에 있으므로 가짜가 필요합니다. @WebAppConfiguration제공합니다.


서블릿 컨텍스트를 인스턴스화하려면 주석을 사용해야합니다.

@WebAppConfiguration

A class-level annotation that is used to declare that the ApplicationContext loaded for an integration test should be a WebApplicationContext. The mere presence of @WebAppConfiguration on a test class ensures that a WebApplicationContext will be loaded for the test, using the default value of "file:src/main/webapp" for the path to the root of the web application (i.e., the resource base path). The resource base path is used behind the scenes to create a MockServletContext which serves as the ServletContext for the test’s WebApplicationContext.


I was getting a similar error but whilst running the application normally rather than trying to run tests.

It turns out if you're making use of a custom PermissionEvaluator then you need to declare it in a separate @Configuration class to the one with your main Spring security configuration in.

See: How do I add method based security to a Spring Boot project?

There is also an open Github issue: https://github.com/spring-projects/spring-boot/issues/4875

ReferenceURL : https://stackoverflow.com/questions/21516683/java-lang-illegalargumentexception-a-servletcontext-is-required-to-configure-de

반응형