Tuesday, May 29, 2012

JAX-RS With Jersey Example

JAX-RS is an  api that supports REST style of web services.  Following's are some of the implementation of the JAX-RS api
1) Jersey
2) RestEasy
3) Apache CXF

Following example demonstrate a simple Calculator Web service  and it's client using Jersey.

I have used the following tools and libraries
1) Eclipse 3.7 with WTP
2) Tomcat 6
3) Jersey

Full source code with more examples are available on Google Code at Sidd JAX-RS Code.

To start with  created a Java Web project and created some packages in that.
The package com.sidd.aschema contains all XSD, wsdl  etc files.  We also have a shchema file named SiddSimpleCalculator.xsd in the same package.
The project structure in eclipse looks like

Use the xjc command to generate the service classes from the  XSD as follows.

$  xjc -p com.sidd.rs.gent -d ../../../ -xmlschema SiddCalculatorSimple.xsd
where  com.sidd.rs is the package name and -d (directory) is the relative location where the classes should be generated.

The xjc coomand generates  the follwoing files.

Service Class
Now write the service class.

public class CalculatorRSImpl implements CalculatorService {
 String operator;
 Integer numA;
 Integer numB;
 @Produces("application/json") //"application/json"
 public MathOperationRS addTwoNumbers(@PathParam("opt") String opt,
@PathParam("numa") String numa, @PathParam("numb") String numb) {
  Integer result = doCalculateCoreLogic(opt,numa,numb);
  MathOperationRQ rq = new MathOperationRQ();
  MathOperationRS rs = new MathOperationRS();
  rq.setOperandA(new BigInteger(numa));
  rq.setOperandB(new BigInteger(numb));
  return rs;

The above class defines a webservice whose with path matched to "/calculate" at class level and also path "({opt}/{numa}/{numb}) at method level. So the Context path to invoke this method would be something like http://localhost:8080/MyJRS2/rest/calculate/add/10/20/

web.xml entry
The following declaration in web.xml will make the jersey to be deployed and make all root resources or provider classes in package com.sidd.rs

    [servlet-name]Jersey REST Service[/servlet-name]

Library Put the required lib's under the web-inf/lib folder. Start Application Deploy the application into your tomcat and start the tomcat installation. You should be able to access the application using the following URL http://{SERVERNAME:PORTNUM}/MyJRS2/rest/calculate/add/10/20/ Result: Upon successful deployement we should be getting json response as follows


No comments :

Post a Comment