Spring boot - multiple ContextLoader* definitions in your web.xml

Viewed 3644

I am trying to migrate existing spring web application (Spring version 4.1.X) to Spring boot (version 1.3),

I am using web.xml in the application, There I have configured listener.

<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.package.config.WebApplicationContextConfig</param-value>
</context-param>

<listener>
    <listener-class>com.package.application.ApplicationContextLoaderListener</listener-class>
</listener>

<servlet>
    <description>
    </description>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>com.package.servlet.ApplicationServlet</servlet-class>
    <init-param>
        <description>contextClass</description>
        <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.package.config.SpringWebMvcConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>      

In the listener I am calling super contextIntialized.

public class ApplicationContextLoaderListener extends ContextLoaderListener

public void contextInitialized(ServletContextEvent event) {
    super.contextInitialized(event);

Application is failing at below location which is available in ContextLoader.class

public WebApplicationContext initWebApplicationContext(ServletContext servletContext) {
    if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null) {
        throw new IllegalStateException(
                "Cannot initialize context because there is already a root application context present - " +
                "check whether you have multiple ContextLoader* definitions in your web.xml!");
    }

I am getting below error.

java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:297) ~[spring-web-4.2.7.RELEASE.jar:4.2.7.RELEASE]
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) ~[spring-web-4.2.7.RELEASE.jar:4.2.7.RELEASE]
at com.package.application.ApplicationContextLoaderListener.contextInitialized(ApplicationContextLoaderListener.java:47) ~[classes/:1.0-SNAPSHOT]
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842) [catalina.jar:8.0.36]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) [catalina.jar:8.0.36]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) [catalina.jar:8.0.36]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407) [catalina.jar:8.0.36]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397) [catalina.jar:8.0.36]
at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0_31]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_31]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_31][enter image description here][1]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_31]

Jars used in the application are placed below. enter image description here

0 Answers
Related