Tutorial Java SOAP WebServices JAS-WS with Eclipse J2EE IDE and Tomcat Server Part 1


Posted on : Tue, 22nd Sep 15 01:58 pm UTC
2314 votes

This is an easy, quick example to get started with Java Web-services (SOAP - Jax-ws) with Eclipse IDE and Tomcat server.

I have divided the Tutorial into two parts :

  1. Creating the WebService.
  2. Creating Client to utilize the WebService.

Before we start here are my configuration details,
  1. IDE : Eclipse Indigo J2EE version
  2. JRE : Java 1.7
  3. Web Server : Apache Tomcat ver. apache-tomcat-7.0.61
  4. Operating system : Mac OS X 10.10 Yosemite (We need to use Terminal/Command Prompt to execute WebServices commands to generate files)


Advertisements





List of jars required :
  1. jaxb-api.jar
  2. jaxb-impl.jar
  3. jaxws-rt.jar
  4. stax-ex.jar
  5. streambuffer.jar

Lets create a simple Web service that gives book title details based on the ISBN number provided as input.

  1. Create a Dynamic web Project : WebServicesWithTomcat
  2. Place the above mentioned jars under projects WebContent/WEB-INF/lib directory.
  3. Create package : org.code2care.webservices under projects Java Resources/src directory
  4. Create an Interface with name BookService that has a abstract method called getBookDetails,

    File : BookService.java Language : Java
    package org.code2care.webservices;
    
    import javax.jws.WebMethod;
    import javax.jws.WebService;
    
    @WebService
    public interface BookService {
    	
    	@WebMethod
    	String getBookDetails(int isbn);
    
    }
  5. Nows in the same package lets create the implementation class BookServiceImpl,

    File : BookServiceImpl.java Language : Java
    package org.code2care.webservices;
    
    import javax.jws.WebService;
    
    @WebService(endpointInterface ="org.code2care.webservices.BookService")
    public class BookServiceImpl implements BookService {
    
    	@Override
    	public String getBookDetails(int isbn) {
    
    		switch (isbn) {
    		case 101:
    			return "Java";
    		case 102:
    			return "PHP";
    		case 103:
    			return "AJAX";
    		case 104:
    			return "JavaScript";
    		case 105:
    			return "jQuery";
    		case 106:
    			return "XML";
    		case 107:
    			return "JSON";
    		case 108:
    			return "PERL";
    		case 109:
    			return ".NET";
    		case 110:
    			return "C#";
    		case 111:
    			return "RUBY";
    		case 112:
    			return "C++";
    		default:
    			return "Invalid ISBN Number!";
    		}
    
    	}
    
    }
  6. Now lets create web.xml file under WebContent/WEB-INF directory,

    File : web.xml Language : XML
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    	id="WebApp_ID" version="3.0">
    	<display-name>WebServicesWithTomcat</display-name>
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    
    	<listener>
    		<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
    	</listener>
    
    	<servlet>
    		<servlet-name>WebServicesWithTomcat</servlet-name>
    		<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>WebServicesWithTomcat</servlet-name>
    		<url-pattern>/WebServicesWithTomcat</url-pattern>
    	</servlet-mapping>
    
    </web-app>
  7. Create sun-jaxws.xml under directory WebContent/WEB-INF,

    File : sun-jaxws.xml Language : Java
    <?xml version="1.0" encoding="UTF-8"?>
    <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
    	version="2.0">
    	<endpoint name="WebServicesWithTomcat"
    		implementation="org.code2care.webservices.BookServiceImpl"
    		url-pattern="/WebServicesWithTomcat" />
    </endpoints>
  8. Right Click on the Project folder and Run on Server to genereate the .class files. Make sure that you have setup Apache Tomcat Server with Eclipse.
  9. The .class files for the project will be created, to get these files BookService.class and BookServiceImpl.class files, we need to move to Navigator view. If you cannot see this tab next to Project Explorer, Go to Window -> Show View -> Navigator.


    Eclipse Navigator view

    Go to build -> classes -> org and copy the org directory (with its sub directories) and paste this folder in some location say c:/wsfiles if on windows or /User/<user-name>/wsfiles.
  10. Now we have to execute the wsgen command to generate the webservices source files.

    wsgen -cp . -keep org.code2care.webservices.BookServiceImpl

    Move to the wsfiles directory from the command prompt/terminal (using cd command) and execute the above command. The WebService java files GetBookDetails.java and GetBookDetailsResponse.java files should be created under org/code2care/webservices/jaxws directory under wsfiles.
  11. Create a org.code2care.webservices.jaxws package under src directory and copy these two generated java files here (note not the .class file)
  12. Now to deploy the project (war) on Tomcat simply run the project by Right Click on Project -> Run on Server.
  13. Go to URL : http://localhost:8080/WebServicesWithTomcat/WebServicesWithTomcat, you should see something like :

    Web Services

    Port Name Status Information
    WebServicesWithTomcat ACTIVE
    Address:http://localhost:8080/WebServicesWithTomcat/WebServicesWithTomcat
    WSDL:http://localhost:8080/WebServicesWithTomcat/WebServicesWithTomcat?wsdl
    Port QName:{http://webservices.code2care.org/}BookServiceImplPort
    Implementation class:org.code2care.webservices.BookServiceImpl
  14. The service URL : http://localhost:8080/WebServicesWithTomcat/WebServicesWithTomcat?wsdl will return the xml WSDL description file :

    File : wsdl Language : Java
    <!--
     Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1-b03-. 
    -->
    <!--
     Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1-b03-. 
    -->
    <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:tns="http://webservices.code2care.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://webservices.code2care.org/" 
    name="BookServiceImplService">
    <types>
    <xsd:schema>
    <xsd:import namespace="http://webservices.code2care.org/" 
    schemaLocation="http://localhost:8080/WebServicesWithTomcat/WebServicesWithTomcat?xsd=1"/>
    </xsd:schema>
    </types>
    <message name="getBookDetails">
    <part name="parameters" element="tns:getBookDetails"/>
    </message>
    <message name="getBookDetailsResponse">
    <part name="parameters" element="tns:getBookDetailsResponse"/>
    </message>
    <portType name="BookService">
    <operation name="getBookDetails">
    <input message="tns:getBookDetails"/>
    <output message="tns:getBookDetailsResponse"/>
    </operation>
    </portType>
    <binding name="BookServiceImplPortBinding" type="tns:BookService">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="getBookDetails">
    <soap:operation soapAction=""/>
    <input>
    <soap:body use="literal"/>
    </input>
    <output>
    <soap:body use="literal"/>
    </output>
    </operation>
    </binding>
    <service name="BookServiceImplService">
    <port name="BookServiceImplPort" binding="tns:BookServiceImplPortBinding">
    <soap:address location="http://localhost:8080/WebServicesWithTomcat/WebServicesWithTomcat"/>
    </port>
    </service>
    </definitions>

Thats it! In the next part we will see how to utilize this Web Service.

HashTags : #WebServices #Java #WSDL #Eclipse #Tomcat #Tutorial

Code2care's mission is to share varied knowledge in technical and non-technical areas gathered during day-to-day learnings and development activities so that our visitors can leverage this portal to find solutions to their queries without re-inventing the wheel. Technical posts include Learnings, Tutorials, Video Tutorials, Code Snippets, Tips-n-tricks.

Follow us : Facebook - Twitter - Google +