Попытка переключить tomcat на undertow, ошибка «ServletContext set» отсутствует

#java #spring #spring-boot #tomcat #undertow

#java #spring #весенняя загрузка #tomcat #undertow

Вопрос:

Я использую spring-boot-starter-web пакет, который включает Tomcat в качестве реализации сервлета по умолчанию.

Насколько я знаю, мне нужно исключить spring-boot-starter-tomcat и включить spring-boot-starter-undertow , чтобы это заработало. (Должен сказать, что с приложением Tomcat все работает нормально) Однако я столкнулся с такого рода ошибкой, когда попытался запустить его с этими изменениями:

 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcHandlerMappingIntrospector' defined in class path resource [config/SwaggerConfig.class]: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resourceHandlerMapping' defined in class path resource [config/SwaggerConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'resourceHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcHandlerMappingIntrospector' defined in class path resource [config/SwaggerConfig.class]: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resourceHandlerMapping' defined in class path resource [config/SwaggerConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'resourceHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'resourceHandlerMapping' defined in class path resource [config/SwaggerConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'resourceHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'resourceHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set

Caused by: java.lang.IllegalStateException: No ServletContext set
  

SwaggerConfig.java:

 @Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {

    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                .paths(regex("/.*"))
                .build();
    }

    @Override
    protected void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}
  

Я отладил это и обнаружил, что внутри org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.resourceHandlerMapping() я действительно инициализировал ServletContext, если это Tomcat, но когда у меня есть Undertow, эта переменная равна нулю.
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.resourceHandlerMapping()

Там это не null введите описание изображения здесь

Здесь это null введите описание изображения здесь

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать

Комментарии:

1. Вы чего-нибудь добились с этим? У меня проблемы с переходом с tomcat на undertow