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

StackOverflow https://stackoverflow.com/questions/22456236

Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

Tomcat 7 supports Servlet 3.0 that enables annotations to be used to configure various components of a web application including Servlets and Listeners.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top