Webservices in JDK 6
- JAXWS Tools wsimport and wsgen part of JDK
- Simplified deployment using Endpoint API and light-weight HTTP Server in JDK
- Uses JAXB 2.0, also part of JDK6, for all data binding needs.
- Also uses Stax, SAAJ 1.3 for message processing. Both these jars are part of JDK 6.
Web service Endpoint
Lets start with a POJO annotated with @WebService annotation. This annotation tells JAXWS that its a Web Service endpoint. You may like to annotate the methods that will be exposed as web services method with @WebMethod annotation. You dont need to specify it if all the methods will be exposed as web services method.
Calculator.java
package example;
import javax.jws.WebService;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class Calculator {
@WebMethod
public int add(int a, int b) {
return a+b;
}
public static void main(String[] args){
// create and publish an endpoint
Calculator calculator = new Calculator();
Endpoint endpoint = Endpoint.publish("http://localhost:8080/calculator", calculator);
}
}
Now you need to do 2 things to build and publish this endpoint:
- Run apt to compile and generate required wrapper classes
- apt -d sample example/Calculator.java
- Publish
- java -cp sample example.Calculator
Thats it! You have deployed your web services endpoint. Now, try accessing
the deployed WSDL by typing
http://localhost:8080/calculator?wsdl
in your web browser to see the published WSDL. No need to provide deployment
descriptor, starting a container etc. Its all done for you internally by JAXWS
using light-weight HTTP server available in JDK 6. In short - extremely fast
prototyping!
Web Services Client
Lets see how we develop a client based on proxy.
Run wsimport
You would run wsimport on the deployed WSDL URL:
wsimport -p client -keep
http://localhost:8080/calculator?wsdl
This step will generates and compile some classes. Notice -keep switch, you need it to keep the generated Java source files. By default wsimport only leaves behind the compiled class files. In this example the classes that matters are
Calculator.java- Service Endpoint Interface or SEICalculatorService- Generated Service, instantiate it to get the proxy
Invoke the endpoint
CalculatorApp.java
package client;
class CalculatorApp {
public static void main(String args[]){
/**
* Instantiate the generated Service
*/
CalculatorService service = new CalculatorService();
/**
* Get the port using port getter method generated in CaculatorService
*/
Calculator calculatorProxy = service.getCalculatorPort();
/**
* Invoke the remote method
*/
int result = calculatorProxy.add(10, 20);
System.out.println("Sum of 10+20 = "+result);
}
}
Now that you have your client code is ready simply compile it:
javac -cp . CalculatorApp.java
and run:
java -cp . client.CalculatorAppIt will print:
Sum of 10+20 = 30
Running latest JAXWS RI on JDK6
The obvious question might be that how would you use latest JAXWS 2.1 RI on top of JDK6. JAXWS 2.1 RI is feature complete and we are busy fixing bug. For list of JAXWS 2.1 features and plan refer to the JAXWS 2.1 roadmap.
All you need to do is to use Endorsed Directory Mechanism to point to the lib directory in JAXWS intallation:
Runtime
- java -cp . -Djava.endorsed.dirs=$JAXWS_HOME/lib client.CalculatorApp
Tools
- Run the tools from JAXWS distribution
- export JAXWS_HOME to your JAXWS distribution installation
- $JAXWS_HOME/bin/wsimport
- $JAXWS_HOME/bin/wsgen
- For wsimport set WSIMPORT_OPTS="-Djava.endorsed.dirs=$JAXWS_HOME/lib"
- For wsgen set WSGEN_OPTS="-Djava.endorsed.dirs=$JAXWS_HOME/lib"
Use JDK 6 to develop your web services application and continue providing feedback to users@jax-ws.dev.java.net and if you find an issue report them at IssueTracker.
- Login or register to post comments
- Printer-friendly version
- vivekp's blog
- 17996 reads






Comments
Deploying Webservice Provider as a web application on server
by pareshwankhede - 2010-08-18 08:44
Hi Vivek, This tutorial is really useful for beginners like me. I have one doubt. How to create web application (.war) and deploy it on the appliaction server. In above tutorial, we are running the provider class as server only. But if i want to deploy this as a web service provider on a app server, how shall I do that. Thanks, Paresh