Не задан ServletContext, пытающийся включить Spring MVC с помощью пристенного веб-сервера - PullRequest
0 голосов

Я пытаюсь включить Spring-MVC в существующем приложении, имеющем веб-сервер.У меня есть два класса с @Configuration, один со всеми компонентами из приложения и один, где я включил mvc, используя @EnableWebMvc.Чем перед запуском джети сервера я установил обработчик добавив DispatcherServlet.Проблема в том, что после установки контекста пружины мне нужно получить от него бин, но когда я вызываю обновление для контекста, я получаю:

 Factory method 'resourceHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set

Я пытаюсь инициировать контекст для получения бина не из пружиныкласс, потому что это унаследованный класс:

private void initSpringAppContext() {
        this.springAppContext = new AnnotationConfigWebApplicationContext();
        ((AnnotationConfigWebApplicationContext) this.springAppContext).register(SpringConfiguration.class);
        ((AnnotationConfigWebApplicationContext) this.springAppContext).refresh();
    }

SpringWebConfiguration:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.whitelist.manager.resources")
public class SpringWebConfiguration implements WebMvcConfigurer {


}

SpringConfiguration:

@Configuration
@EnableScheduling
@EnableTransactionManagement
@ComponentScan({"com.netoptics", "com.whitelist.manager", "com.websilicon", "com.wsnms.server", "com.anue", "com.wsnms"})
public class SpringConfiguration {

    @Bean
        .....
        @Bean
        .....

}

web.xml:

<servlet>
            <servlet-name>springMvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextClass</param-name>
                <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
            </init-param>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>com.netoptics.server.SpringWebConfiguration</param-value>
            </init-param>
        </servlet>


    <context-param>
        <param-name>contextClass</param-name>
        <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </context-param>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>com.netoptics.server.SpringConfiguration</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

<servlet-mapping>
        <servlet-name>springMvc</servlet-name>
        <url-pattern>/v2/*</url-pattern>
    </servlet-mapping>

Проблема в этой строке: springAppContext.refresh(); Если я удаляю эту и пытаюсь позвонить springAppContex.getBean() я получаю:

 java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

ОБНОВЛЕНИЕ: Попытка изменить конфигурацию Java с XML, та же ошибка.Когда я пытаюсь получить контекст весны (SpringConfiguration.class).Так что я не могу получить корневой контекст для доступа к бинам.Что я делаю не так в initSpringAppContext()

...