Technical Blog Of JackCHAN

August 4, 2010

Create web service (4) — JAX-RS and JAX-RS Client

Filed under: java, myeclipse, webservice — Tags: , , , — kaisechen @ 1:19 am

It is becoming more and more popular using rest-style web service.

1. create a new web service project, which name is TestWS_RS.

Chose Web Service Framework: REST(JAX-RS)

It automatically produces J2EE structure, and check the web.xml.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <servlet>
 <display-name>JAX-RS REST Servlet</display-name>
 <servlet-name>JAX-RS REST Servlet</servlet-name>
 <servlet-class>
 com.sun.jersey.spi.container.servlet.ServletContainer
 </servlet-class>
 <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>JAX-RS REST Servlet</servlet-name>
 <url-pattern>/services/*</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

2.Add JAX-RS libraries into the project

chose JAX-RS 1.0.2 Core Libraries(Project Jersey 1.0.2)

JAXB supports the transform between Class and XML.

3. Create a POJO class User and add @XmlRootElement above it

package com.jack.ws;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class User {
private int id;
private String preferedname;
private String firstname;
private String lastname;
private String gender;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getPreferedname() {
return preferedname;
}

public void setPreferedname(String preferedname) {
this.preferedname = preferedname;
}

public String getFirstname() {
return firstname;
}

public void setFirstname(String firstname) {
this.firstname = firstname;
}

public String getLastname() {
return lastname;
}

public void setLastname(String lastname) {
this.lastname = lastname;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

@Override
public String toString() {
return “Id:”+id+” , FirstName:”+firstname+” , LastName:”+lastname+” , PreferedName:”+preferedname+” , Gender:”+gender;
}

}

4.Build a web service, UserResource

Chose Framework: REST(JAX-RS), Tick ‘Create new Java bean’

In java class field,input ‘UserResource’; chose Produces: application/xml; in URL path field, input ‘users’.

Then click finish button, it produces a ‘UserResource’ Class

5. Now begin to add REST methods in UserResource Class.

Chose UserResource Class,right click ,chose ‘MyEclipse’,chose ‘Add REST Method…’.

Firstly, add ‘getUsers’ method.

Secondly,add ‘getUser’ method.

Thirdly,add ‘addUser’ method.

6. Modify UserResource Class

package com.jack.ws;

import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import com.sun.jersey.spi.resource.Singleton;

@Produces("application/xml")
@Path("users")
@Singleton
public class UserResource {
 private TreeMap<Integer, User> userMap = new TreeMap<Integer, User>();

 public UserResource(){
 User user = new User();
 user.setFirstname("Jackie");
 user.setLastname("Chan");
 user.setPreferedname("Jack");
 user.setGender("Male");
 addUser(user);
 }

 @GET
 public List<User> getUsers() {
 List<User> users = new ArrayList<User>();
 users.addAll(userMap.values());
 return users;
 }

 @GET
 @Path("{id}")
 public User getUser(@PathParam("id") int cId) {
 return userMap.get(cId);
 }

 @POST
 @Path("add")
 @Produces("text/plain")
 @Consumes("application/xml")
 public String addUser(User user) {
 int id = userMap.size();
 user.setId(id);
 userMap.put(id, user);
 return "Added a new User and Its info is "+user.toString();
 }
}

7.Deploy the web service into tomcat 6 server.

8.Start Tomcat server

Some information about the web service in tomcat6server console.

04/08/2010 11:57:18 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Reloading context [/TestWS_RS]
04/08/2010 11:57:20 AM com.sun.jersey.api.core.ClasspathResourceConfig init
INFO: Scanning for root resource and provider classes in the paths:
 D:\tomcat\webapps\TestWS_RS\WEB-INF\lib
 D:\tomcat\webapps\TestWS_RS\WEB-INF\classes
04/08/2010 11:57:21 AM com.sun.jersey.api.core.ClasspathResourceConfig init
INFO: Root resource classes found:
 class com.jack.ws.CustomersResource
 class com.jack.ws.UserResource
04/08/2010 11:57:21 AM com.sun.jersey.api.core.ClasspathResourceConfig init
INFO: Provider classes found:

9.Now begin to test the web service

chose this project, right click, chose ‘MyEclipse’,then chose ‘Test with web service explore’.


10.click id,input 0 in id field, then click Test button.

It gets a Response

<?xml version="1.0" encoding="UTF-8"?>
 <user>
 <firstname>Jackie</firstname>
 <gender>Male</gender>
 <id>0</id>
 <lastname>Chan</lastname>
 <preferedname>Jack</preferedname>
 </user>

11. Click add,in the content field, input

<user>
 <firstname>Jeanny</firstname>
 <lastname>Shery</lastname>
 <preferedname>Jean</preferedname>
 <gender>Female</gender>
</user>

click test button, get a response

Added a new User and Its info is Id:1 , FirstName:Jeanny , LastName:Shery , PreferedName:Jean , Gender:Female

12. Click User,Click Test Button, it gets a response.

<?xml version="1.0" encoding="UTF-8"?>     
 <users> 
 <user> 
 <firstname>Jackie</firstname> 
 <gender>Male</gender> 
 <id>0</id> 
 <lastname>Chan</lastname> 
 <preferedname>Jack</preferedname> 
 </user> 
 <user> 
 <firstname>Jeanny</firstname> 
 <gender>Female</gender> 
 <id>1</id> 
 <lastname>Shery</lastname> 
 <preferedname>Jean</preferedname> 
 </user> 
 </users>

13. Now begin to use other browser to test the web server, open firefox, input

http://localhost:8080/TestWS_RS/services/users/0

It will invoke getUser method in UserResource Class, and return xml of a user object

http://localhost:8080/TestWS_RS/services/users/1

It will invoke getUser method in UserResource Class, and return xml of another user object

14. Install poster plugin in firefox, use poster to test addUser method of the web service

Open poster

In URL field, input ‘http://localhost:8080/TestWS_RS/services/users/add&#8217;

In Content Type field, input ‘application/xml’

In Content field,input:

<user>
 <firstname>Hilly</firstname>
 <lastname>Paris</lastname>
 <preferedname>Hill</preferedname>
 <gender>Male</gender>
</user>

Click post button, it will get a response quickly.

Added a new User and Its info is Id:2 , FirstName:Hilly , LastName:Paris , PreferedName:Hill , Gender:Male

15. Open firefox, input the url

http://localhost:8080/TestWS_RS/services/users

It will invoke getUsers method in UserResource Class and return a user list.

<users>
−
<user>
<firstname>Jackie</firstname>
<gender>Male</gender>
<id>0</id>
<lastname>Chan</lastname>
<preferedname>Jack</preferedname>
</user>
−
<user>
<firstname>Jeanny</firstname>
<gender>Female</gender>
<id>1</id>
<lastname>Shery</lastname>
<preferedname>Jean</preferedname>
</user>
−
<user>
<firstname>Hilly</firstname>
<gender>Male</gender>
<id>2</id>
<lastname>Paris</lastname>
<preferedname>Hill</preferedname>
</user>
</users>

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Blog at WordPress.com.