user68883 user68883 - 4 months ago 25
Java Question

why doesn't Tomcat 7x require WSServletContextListener and WSServlet configured in web.xml for Jax-ws service deployment?

I'm deploying and testing a simple

Jax-ws service
in both
Tomcat6x
and
Tomcat7x
with the
jaxws-ri-2.2.8
added to both the server lib directories .

Tomcat6x
requires the
WSServletContextListener
and
WSServlet
and configured in
web.xml
whereas in
Tomcat 7x
the webservices gets deployed without the
WSServletContextListener
and
WSServlet
configuration.
Whats different in
Tomcat7
that makes the
web.xml
configuration optional?

Answer

If you are using Tomcat 7.x and Servlet 3.0, the listener com.sun.xml.ws.transport.http.servlet.WSServletContextListener is dynamically loaded. Since Java EE 6, a new component was added: javax.servlet.ServletContainerInitializer

Interface which allows a library/runtime to be notified of a web application's startup phase and perform any required programmatic registration of servlets, filters, and listeners in response to it.

The file jaxws-rt.jar contains in \META-INF\services a simple file text named javax.servlet.ServletContainerInitializer with one line:

com.sun.xml.ws.transport.http.servlet.WSServletContainerInitializer

This is the fully qualified class name which loads the required listener.

See also Using Servlets 3.0 ServletContainerInitializer.