Consuming REST APIs with RESTEasy Client

So far in this blog, we have been learning about building RESTful webservices which are server side components. In this post, we will learn to build a RESTful client for consuming the webservices written in previous posts.

I will be re-using the code base written for RESTEasy + JAXB xml example.

The APIs which I will be accessing are as defined.

@GET
@Path("/users/{id}")
public User getUserById (@PathParam("id") Integer id) 
{
	User user = new User();
	user.setId(id);
	user.setFirstName("demo");
	user.setLastName("user");
	return user;
}

@POST
@Path("/users")
public User addUser() 
{
   //Some code
}

To build a RESTful client using client capabilities of JAX-RS RESTEasy, follow given instruction.

1) Verify following RESTEasy dependencies

<!-- core library -->
<dependency>
	<groupId>org.jboss.resteasy</groupId>
	 <artifactId>resteasy-jaxrs</artifactId>
	<version>2.3.1.GA</version>
</dependency>
<dependency>
	<groupId>net.sf.scannotation</groupId>
	<artifactId>scannotation</artifactId>
	<version>1.0.2</version>
</dependency>
<!-- JAXB provider -->
<dependency>
	<groupId>org.jboss.resteasy</groupId>
	<artifactId>resteasy-jaxb-provider</artifactId>
	<version>2.3.1.GA</version>
</dependency>	

2) Write the client code to access the GET API as below

public static void sampleResteasyClientGETRequest() throws Exception 
{
	//Define the API URI where API will be accessed
	ClientRequest request = new ClientRequest("http://localhost:8080/RESTfulDemoApplication/user-management/users/10");
	
	//Set the accept header to tell the accepted response format
	request.accept("application/xml");
	
	//RESTEasy client automatically converts the response to desired objects.
	//This is how it is done.
	//Populate the response in user object
	ClientResponse<User> response = request.get(User.class);
	
	//First validate the api status code
	int apiResponseCode = response.getResponseStatus().getStatusCode();
	if(response.getResponseStatus().getStatusCode() != 200)
	{
		throw new RuntimeException("Failed with HTTP error code : " + apiResponseCode);
	}
	
	//Get the user object from entity
	User user = response.getEntity();
	
	//verify the user object
	System.out.println(user.getId());
	System.out.println(user.getFirstName());
	System.out.println(user.getLastName());
}

3) Write the client code to access the POST API as below

public static void sampleResteasyClientPostRequest() throws Exception 
{
	User user = new User();
	user.setId(100);
	user.setFirstName("Lokesh");
	user.setLastName("Gupta");
	
	StringWriter writer = new StringWriter();
	JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
	Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
	jaxbMarshaller.marshal(user, writer);
	
	//Define the API URI where API will be accessed
	ClientRequest request = new ClientRequest("http://localhost:8080/RESTfulDemoApplication/user-management/users");
	
	//Set the accept header to tell the accepted response format
	request.body("application/xml", writer.getBuffer().toString());
	
	//Send the request
	ClientResponse response = request.post();
	
	//First validate the api status code
	int apiResponseCode = response.getResponseStatus().getStatusCode();
	if(response.getResponseStatus().getStatusCode() != 201)
	{
		throw new RuntimeException("Failed with HTTP error code : " + apiResponseCode);
	}
}
Source code download

Happy Learning !!

Leave a Reply

11 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments

About Us

HowToDoInJava provides tutorials and how-to guides on Java and related technologies.

It also shares the best practices, algorithms & solutions, and frequently asked interview questions.

Our Blogs

REST API Tutorial