Tutorial Java SOAP Webservices JAS-WS with Eclipse J2EE IDE and Tomcat Server Part 1
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 :
- Creating the WebService.
- Creating Client to utilize the WebService.
Before we start here are my configuration details,
- IDE : Eclipse Indigo J2EE version
- JRE : Java 1.7
- Web Server : Apache Tomcat ver. apache-tomcat-7.0.61
- Operating system : Mac OS X 10.10 Yosemite (We need to use Terminal/Command Prompt to execute WebServices commands to generate files)
jaxb-api.jar
jaxb-impl.jar
jaxws-rt.jar
stax-ex.jar
streambuffer.jar
Let's create a simple Web service that gives book title details based on the ISBN number provided as input.
- Create a Dynamic web Project: WebServicesWithTomcat
- Place the above-mentioned jars under projects WebContent/WEB-INF/lib directory.
- Create package : org.code2care.webservices under projects Java Resources/src directory
- Create an Interface with name BookService that has an abstract method called getBookDetails, BookService.java
- Nows in the same package lets create the implementation class BookServiceImpl, BookServiceImpl.java
- Now let's create web.xml file under WebContent/WEB-INF directory, web.xml
- Create sun-jaxws.xml under directory WebContent/WEB-INF,
- Right Click on the Project folder and Run on Server to generate the .class files. Make sure that you have setup Apache Tomcat Server with Eclipse.
- 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.
- Go to build -> classes -> org and copy the org directory (with its subdirectories) and paste this folder in some location say c:/wsfiles if on windows or /User/<user-name>/wsfiles.
- Now we have to execute the wsgen command to generate the web services source files.
- Create a org.code2care.webservices.jaxws package under src directory and copy these two generated java files here (note not the .class file)
- Now to deploy the project (war) on Tomcat simply run the project by Right Click on Project -> Run on Server.
- Go to URL: http://localhost:8080/WebServicesWithTomcat/WebServicesWithTomcat, you should see something like :
- The service URL: http://localhost:8080/WebServicesWithTomcat/WebServicesWithTomcat?wsdl will return the xml WSDL description file
package org.code2care.webservices;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface BookService {
@WebMethod
String getBookDetails(int isbn);
}
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!";
}
}
}
<?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>
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.
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
<!--
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>
That's it! In the next part, we will see how to utilize this Web Service.
HashTags : #WebServices #Java #WSDL #Eclipse #Tomcat #TutorialMore Posts related to Java,
- [Fix] java.time.zone.ZoneRulesException: Unknown time-zone ID
- Parse XML file in Java using DOM Parser
- Java equals method - Tutorial
- [Program] How to read three different values using Scanner in Java
- Java: The value of the local variable string is not used
- Display Output in Java Console as a Table
- How to detect Operating System using Java code
- Java 8 Streams map() with examples
- [Fix] java: incompatible types: incompatible parameter types in lambda expression error
- Add newline character Java code example (\r \n \r\n)
- List of Java Major Minor Version Numbers
- IntelliJ Keyboard Shortcut to remove unused imports [Java]
- Java - Check if array contains the value
- [Fix] Java Exception with Lambda - Cannot invoke because object is null
- How to declare and initialize Array in Java Programming
- [Solved] com.sun.xml.ws.transport.http.servlet.WSServletContextListener ClassNotFoundException
- XmlRpcException ConnectException connection refused error
- Create a Zip file using Java Code programmatically
- List of jar files for Jax-ws (SOAP) based Java Web Services
- How to fix Java HTTP java.net.UnknownHostException
- List of jars required for Struts2 project
- [fix] java: incompatible types: double cannot be converted to java.lang.Integer Generics
- Maven BUILD FAILURE: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin
- Get the current timestamp in Java
- java: unclosed string literal [Error]
More Posts:
- 12 August - International Youth Day celebrated worldwide - News
- Your JBoss Application Server 7 is running However you have not yet added any users to be able to access the admin console - Java
- airbnb website and mobile App is down worldwide - clear browser cache or reinstall app to fix error - News
- Mac (macos) startup keyboard boot sequence combinations - MacOS
- Test internet speed using macOS Terminal command - MacOS
- zsh: command not found [fix] macOS - zsh
- How to install Postman natively on a Mac - HowTos
- Add blank lines after each lines using Notepad++ text editor - NotepadPlusPlus