0

I'm using the embedded Tomcat 7.0.40 for my unit tests. My webapp uses Servlet 3.x (with x>0).

I managed to deploy my webapp on the Tomcat.

// create the embedded Tomcat
Tomcat tomcat = new Tomcat();

// (...)

// deploy the WAR in the webApp folder

// (...)

// add the WebApp in Tomcat
Context context = tomcat.addWebapp(tomcat.getHost(), "/myapp", webApp.getAbsolutePath());

// (...)

// start the embedded Tomcat
tomcat.start()

However, when I start Tomcat an exception is thrown:

(...)

    Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContainerInitializer
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1659)
        at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1569)
        at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1277)
        at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
        at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5269)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 7 more
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContainerInitializer
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        ... 25 more

The javax.servlet.ServletContainerInitializer is localized in the javax.servlet-api JAR starting from version 3.1.

  • Do you know how to solve this issue?

  • How can I add programatically this library in the classpath of the embedded Tomcat?

I try several methods by none work...

Thanks for help.

user520481
  • 51
  • 1
  • 5
  • Hi, afaik javax.servlet.ServletContainerInitializer is located at **tomcat-embed-core.jar** in the same JAR is also the Tomcat class that you are using in your example.. can you share your classpath settings? what other jars are getting loaded? – Rafael Oltra Jun 14 '13 at 19:42
  • Issue is now solved. I change the parent ClassLoader of myTomcat engine. tomcat.getEngine().setParentClassLoader(this.getClass().getClassLoader()); – user520481 Jun 17 '13 at 10:34

0 Answers0