Why Tomcat server is not working with the web.xml file as servlet configuration used in a Vaadin 7 application?

22,846

I have found that the comment from @tonix is actually true. The annotations and web.xml cannot coexist. You just have to remove web.xml if you want to keep the annotations.

Moreover, just check all of your url-pattern whether it is in web.xml or it is in annotation, they should be correct and by that I mean generally they should be prefixed by '/' (forward-slash).

After making these changes, try restarting tomcat and it should work, which did in my very much similar case.

Share:
22,846

Related videos on Youtube

tonix
Author by

tonix

Updated on April 15, 2020

Comments

  • tonix
    tonix about 4 years

    I can't start Tomcat when I use web.xml as the configuration file for the servlets in an application, this is the content of the file:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app
      id="WebApp_ID" version="3.0"
      xmlns="http://java.sun.com/xml/ns/j2ee" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    
      <servlet>
        <servlet-name>AppLifeServlet</servlet-name>
        <servlet-class>
            com.example.application_lifecycle_chapter_4_7.ApplicatationLifecycleUI.Servlet
        </servlet-class>
        <init-param>
          <param-name>UI</param-name>
          <param-value>com.example.application_lifecycle_chapter_4_7.ApplicationLifecycleUI</param-value>
        </init-param>
        <async-supported>true</async-supported>
      </servlet>
    
      <servlet>
          <servlet-name>MyPushyServlet</servlet-name>
          <servlet-class>
              com.example.application_lifecycle_chapter_4_7.MyPushyUI.Servlet
          </servlet-class>
          <init-param>
            <param-name>UI</param-name>
            <param-value>com.example.application_lifecycle_chapter_4_7.MyPushyUI</param-value>
          </init-param>
          <async-supported>true</async-supported>
      </servlet>    
    
      <servlet-mapping>
        <servlet-name>AppLifeServlet</servlet-name>
        <url-pattern>/AppLife/*</url-pattern>
      </servlet-mapping>
    
      <servlet-mapping>
          <servlet-name>AppLifeServlet</servlet-name>
          <url-pattern>/VAADIN/*</url-pattern>
      </servlet-mapping>
    
      <servlet-mapping>
          <servlet-name>MyPushyServlet</servlet-name>
          <url-pattern>/MyPushyUI/*</url-pattern>
      </servlet-mapping>
    </web-app>
    

    Why is it not working? Tomcat even doesn't start and instead returns an exception:

    SEVERE: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"]
    java.lang.NullPointerException
        at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:307)
        at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:482)
        at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:795)
        at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:531)
        at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
        at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
        at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:588)
        at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
        at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:850)
        at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
    

    If I disable web.xml and I use Servlet's 3.0 API annotations everything works...

    What's the problem with the web.xml file?

    EDIT: Here is the full exception output when Tomcat tries to start:

    SEVERE: A child container failed during start
    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Application_Lifecycle_Chapter_4.7]]
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:917)
        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:868)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Application_Lifecycle_Chapter_4.7]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
        ... 6 more
    Caused by: java.lang.IllegalArgumentException: The servlets named [AppLifeServlet] and [com.example.application_lifecycle_chapter_4_7.ApplicationLifecycleUI$Servlet] are both mapped to the url-pattern [/AppLife/*] which is not permitted
        at org.apache.tomcat.util.descriptor.web.WebXml.addServletMapping(WebXml.java:308)
        at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2325)
        at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2007)
        at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1901)
        at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1896)
        at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1896)
        at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1896)
        at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1139)
        at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:771)
        at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:305)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5095)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 6 more
    
    Dec 07, 2014 7:49:30 PM org.apache.catalina.core.ContainerBase startInternal
    SEVERE: A child container failed during start
    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:917)
        at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:760)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: org.apache.catalina.LifecycleException: A child container failed during start
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:925)
        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:868)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 6 more
    
    Dec 07, 2014 7:49:30 PM org.apache.catalina.startup.Catalina start
    SEVERE: The required Server component failed to start so Tomcat is unable to start.
    org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:760)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 7 more
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 9 more
    Caused by: org.apache.catalina.LifecycleException: A child container failed during start
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:925)
        at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 11 more
    
    Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol pause
    INFO: Pausing ProtocolHandler ["http-nio-8080"]
    Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol pause
    INFO: Pausing ProtocolHandler ["ajp-nio-8009"]
    Dec 07, 2014 7:49:30 PM org.apache.catalina.core.StandardService stopInternal
    INFO: Stopping service Catalina
    Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol destroy
    INFO: Destroying ProtocolHandler ["http-nio-8080"]
    Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol destroy
    SEVERE: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"]
    java.lang.NullPointerException
        at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:307)
        at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:482)
        at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:795)
        at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:531)
        at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
        at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
        at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:588)
        at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
        at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:850)
        at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
    
    Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol destroy
    INFO: Destroying ProtocolHandler ["ajp-nio-8009"]
    Dec 07, 2014 7:49:30 PM org.apache.coyote.AbstractProtocol destroy
    SEVERE: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"]
    java.lang.NullPointerException
        at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:307)
        at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:482)
        at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:795)
        at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:531)
        at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
        at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
        at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:588)
        at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
        at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:850)
        at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
    

    RESOLVED: This is the crucial line:

     Caused by: java.lang.IllegalArgumentException: The servlets named [AppLifeServlet] and 
        [com.example.application_lifecycle_chapter_4_7.ApplicationLifecycleUI$Servlet] are both 
        mapped to the url-pattern [/AppLife/*] which is not permitted
    

    From the Book of Vaadin:

    You can use both a web.xml and WebServlet in the same application. Settings in the web.xml override the ones given in annotations.

    This is not true! In my case the error was due this phrase: I had a @WebServlet annotation in my ApplicationLifecycleUI$Servlet together with the servlet mapping inside the web.xml file.

    The two configurations can't coexist together, so you must choose whether to use web.xml or @WebServlet annotation for the URL mapping, or you will get this error when you are trying to start Tomcat.

    • Dror Bereznitsky
      Dror Bereznitsky over 9 years
      Do you have another exception(s) in the log before this one? this exception is related to destroying the protocol handler which happens after the application failed to start
    • tonix
      tonix over 9 years
      Yes, please check my edit! I checked the console in Eclipse and found out several other exceptions thrown before the one I posted
    • tonix
      tonix over 9 years
      I have found the problem, Annotations and web.xml cannot live together, Book of Vaadin is misleading cause it says that they they can coexist together and that web.xml overrides the configuration defined inside the annotations. Anyway thank you for telling me to look inside the console's exceptions better!