Getting Started with JAX-WS
JAX-WS stands for Java API for XML Web Services. It is a Java
programming language API for creating web services and clients that
communicate using XML. This post is a quick start for JAX-WS.
Prerequisites
GlassFish integrated with Eclipse.
Creating the JAX-WS Web Service
Published at DZone with permission of Pavithra Gunasekara, author and DZone MVB. (source)Prerequisites
GlassFish integrated with Eclipse.
Creating the JAX-WS Web Service
-
In Eclipse create a Dynamic Web Project called "com.eviac.blog.jaxwsproj". Make GlassFish as the Target Runtime.
-
Create a new class called "SampleWS" in the created project. This will be the implementation class of the web service.
SampleWS.javapackage com.eviac.blog.jaxws.service; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class SampleWS { @WebMethod public int sum(int a, int b) { return a + b; } @WebMethod public int multiply(int a, int b) { return a * b; } } - Open a terminal and navigate to the root of the project directory.
Create a directory called wsdl inside WebContent/WEB-INF/. Use the
following command to create web service artifacts. Make sure your JAVA_
HOME is set properly or this command will not work. Also make sure to
build the project before running this command or it will complain class
not found.
wsgen -classpath build/classes/ -wsdl -r WebContent/WEB-INF/wsdl -s src -d build/classes/
com.eviac.blog.jaxws.service.SampleWS -
Refresh the project to discover created artifacts. Open the created
WSDL-file inside wsdl folder. Search for REPLACE_WITH_ACTUAL_URL and
replace it with the web service URL:
http://localhost:8080/com.eviac.blog.jaxwsproj/SampleWSService, and save
the file.
-
Deploy the project in Glassfish by right-clicking the project, click Run
As -> Run on Server and select the Glassfish server.
Creating the JAX-WS client
-
Create a Java project in eclipse called
"com.eviac.blog.jaxwsclientproj". Open up a new terminal and go to the
project root. Use the following command to generate the classes you need
to access the web service. Here you will need to use the URL of the
WSDL file.
wsimport -s src -d bin http://localhost:8080/com.eviac.blog.jaxwsproj/SampleWSService?wsdl

- Create a new class called "SampleWSClient" in the project.
SampleWSClient.javapackage com.eviac.blog.jaxws.client; import javax.xml.ws.WebServiceRef; import com.eviac.blog.jaxws.service.SampleWS; import com.eviac.blog.jaxws.service.SampleWSService; public class SampleWSClient { @WebServiceRef(wsdlLocation = "http://localhost:8080/com.eviac.blog.jaxwsproj/SampleWSService?wsdl") private static SampleWSService Samplews; public static void main(String[] args) { SampleWSClient wsClient = new SampleWSClient(); wsClient.run(); } public void run() { Samplews = new SampleWSService(); SampleWS port = Samplews.getSampleWSPort(); System.out.println("multiplication Result= "+ port.multiply(10, 20)); System.out.println("Addition Result= "+port.sum(10, 20)); } } - Right click on the project and click on Run As -> Java Application. This will result following.
multiplication Result= 200 Addition Result= 30
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)






Comments
Piotr Szaranski replied on Mon, 2012/09/03 - 7:28am
Hello,
This "@WebServiceRef(wsdlLocation = "http://localhost:8080/com.eviac.blog.jaxwsproj/SampleWSService?wsdl")" annotation is completely irrelevant and actually doesnt work here - it is dedicated for containers only. You didnt see any stacktrace just because you accessed your webservice with the same url that you used to generate webservice client. Change web service deployment path on server and you will see it doesnt work anymore. In this example, the only (probably) way to configure other endpoint is to pass new url and service QName to your client stub in constructor new SampleWSService(...).
Besides, what kind of naming convention you use?
Cheers!