Engineering Full Stack Apps with Java and JavaScript
We did not had to do any extra configurations for deploying our web service class in Glassfish server. This is because Java EE 5 and above compliant application servers such as Glassfish, comply to JSR 109 (Web services 1.2/1.3) and JSR 224 (JAX-WS 2.0/2.1/2.2).
However, to deploy web service on a web container like tomcat, you will need to do some additional steps. These additional steps include creating a a proprietary deployment descriptor file called sun-jaxws.xml, making some entries in the standard deployment descriptor web.xml and placing some JAX-WS jars in the lib folder of Apache Tomcat.
Before trying out this example, you will need to configure Tomcat to work with eclipse as given @ http://javajee.com/configuring-apache-tomcat-with-eclipse.
Start the Eclipse (Java EE eclipse configured with Glassfish server)
Create a Dynamic Web Project selecting Glassfish server as the Target runtime.
Screenshot: Dynamic Web Project
package com.javajee.webservices.soap;
import javax.jws.WebService;
@WebService
public class MyWebService {
public String myServiceMethod() {
return "Message From myServiceMethod";
}
}
Note: This is the same class used for the Glassfish example.
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint name="MyWebService"
implementation="com.javajee.webservices.soap.MyWebService"
url-pattern="/mws" />
</endpoints>
Notes:
Place the file under WEB-INF folder.
The <endpoints> element of sun-jaxws.xml contains one or more <endpoint> elements.
Each endpoint represents a port in the WSDL.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>Sample</display-name>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
</web-app>
Notes:
This file has to be present under WEB-INF folder.
The WSServletContextListener configured in the web.xml as a listener class parses sun-jaxws.xml and sets up all deployed endpoints.
Download JAX-WS RI from https://jax-ws.java.net and copy below jars to the lib folder of Tomcat:
jaxws-rt.jar
jaxb-core.jar
jaxb-impl.jar
streambuffer.jar
policy.jar
stax-ex.jar
gmbal-api-only.jar
management-api.jar
ha-api.jar
Note: You may also copy all jars from jaxws-ri\lib into tomcat lib directory to save time.
Once the war (with above contents) is deployed, you can access the url as specified in your sun-jaxws.xml.
In this case it will be: http://localhost:8080/WebServiceTomcatDemo/mws
You should get the result as below.
You may also look into the note on common issues while deploying JAX-WS services in Tomcat.