RESTful Java client with RESTEasy client framework
This tutorial show you how to create a RESTful Java client with RESTEasy client framework, to perform “GET” and “POST” requests to REST service that created in last “Jackson + JAX-RS” tutorial.
1. RESTEasy Client Framework
RESTEasy client framework is included in RESTEasy core module, so, you just need to declares the “resteasy-jaxrs.jar” in your pom.xml file.
File : pom.xml
<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>2.2.1.GA</version> </dependency>
2. GET Request
Review last REST service.
@Path("/json/product") public class JSONService { @GET @Path("/get") @Produces("application/json") public Product getProductInJSON() { Product product = new Product(); product.setName("iPad 3"); product.setQty(999); return product; } //...
RESTEasy client to send a “GET” request.
import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import org.apache.http.client.ClientProtocolException; import org.jboss.resteasy.client.ClientRequest; import org.jboss.resteasy.client.ClientResponse; public class RESTEasyClientGet { public static void main(String[] args) { try { ClientRequest request = new ClientRequest( "http://localhost:8080/RESTfulExample/json/product/get"); request.accept("application/json"); ClientResponse<String> response = request.get(String.class); if (response.getStatus() != 200) { throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } BufferedReader br = new BufferedReader(new InputStreamReader( new ByteArrayInputStream(response.getEntity().getBytes()))); String output; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println(output); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
Output…
Output from Server .... {"qty":999,"name":"iPad 3"}
3. POST Request
Review last REST service also.
@Path("/json/product") public class JSONService { @POST @Path("/post") @Consumes("application/json") public Response createProductInJSON(Product product) { String result = "Product created : " + product; return Response.status(201).entity(result).build(); } //...
RESTEasy client to send a “POST” request.
import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import org.jboss.resteasy.client.ClientRequest; import org.jboss.resteasy.client.ClientResponse; public class RESTEasyClientPost { public static void main(String[] args) { try { ClientRequest request = new ClientRequest( "http://localhost:8080/RESTfulExample/json/product/post"); request.accept("application/json"); String input = "{\"qty\":100,\"name\":\"iPad 4\"}"; request.body("application/json", input); ClientResponse<String> response = request.post(String.class); if (response.getStatus() != 201) { throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } BufferedReader br = new BufferedReader(new InputStreamReader( new ByteArrayInputStream(response.getEntity().getBytes()))); String output; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println(output); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
Output…
Output from Server .... Product created : Product [name=iPad 4, qty=100]
Download Source Code
References
- Jackson Official Website
- RESTful Java client with java.net.URL
- RESTful Java client with Apache HttpClient







while running post code i’m getting below error. any clue? I have added all required jars to build path as well.
Exception in thread “main” java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.jboss.resteasy.core.LoggerCategories.getLogger(LoggerCategories.java:64)
at org.jboss.resteasy.core.LoggerCategories.getProviderLogger(LoggerCategories.java:86)
at org.jboss.resteasy.plugins.providers.RegisterBuiltin.(RegisterBuiltin.java:22)
at org.jboss.resteasy.spi.ResteasyProviderFactory.getInstance(ResteasyProviderFactory.java:324)
at org.jboss.resteasy.client.ClientRequest.(ClientRequest.java:135)
at org.jboss.resteasy.client.ClientRequest.(ClientRequest.java:130)
at org.jboss.resteasy.client.ClientRequest.(ClientRequest.java:125)
at com.ca.saas.deployment.deployment.main(deployment.java:18)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
… 8 more
Reading the JSON string seems to work ok but RESTEasy stumbles with unmarshaling the response even for a simple POJO. When I tried, I got the following:
<pre lang="java"
org.jboss.resteasy.client.ClientResponseFailure: Unable to find a MessageBodyReader of content-type text/html and type null
at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:522)
at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:513)
at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:414)
at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:376)
at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:337)
at name.app.abhi.imdb.api.accessor.IMDBAPIClient.getMovieInfo(IMDBAPIClient.java:37)
at name.app.abhi.imdb.api.accessor.IMDBAPIClientTest.testSendRequestByProxy(IMDBAPIClientTest.java:19)
What is your last error caused by?
It was caused by RESTEasy. I figured it out as below:
where res is a reference to ClientResponse and genericType is a subclass of Movie.