I have a sample REST service with GET method running in my local system. This method is used to fetch user details..
The URL is 'http://127.0.0.1:8080/camel-rest-0.0.1-SNAPSHOT/user/details/123'
Response is
{ "status": "Success", "id": "123", "name": "kswaughs" }
Create a model object to parse JSON response into java object.
Response Object - User
package com.example.cxfrs.beans; public class User { private String status; private String id; private String name; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("User [status="); builder.append(status); builder.append(", id="); builder.append(id); builder.append(", name="); builder.append(name); builder.append("]"); return builder.toString(); } }
A simple stand-alone client code using WebClient and JacksonJsonProvider.
Sample Client code to call get Method
package com.example.cxfrs; import java.util.ArrayList; import java.util.List; import com.example.cxfrs.beans.User; import org.apache.cxf.jaxrs.client.WebClient; import org.codehaus.jackson.jaxrs.JacksonJsonProvider; public class CXFRestClient { public static void main(String[] args) { List<Object> providers = new ArrayList<Object>(); providers.add(new JacksonJsonProvider()); WebClient client = WebClient .create("http://127.0.0.1:8080/camel-rest-0.0.1-SNAPSHOT/user/details", providers); User user = client.accept("application/json").type("application/json") .path("123").get(User.class); System.out.println(user); } }
Output is
User [status=Success, id=123, name=kswaughs]
Use Below maven dependency in your pom.xml to use CXF Client
<!-- To use WebClient API --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-client</artifactId> <version>3.1.2</version> </dependency> <!-- To parse JSON String to Java objects --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-jaxrs</artifactId> <version>1.9.0</version> </dependency>
If you dont provide JacksonJsonProvider to WebClient, You will get below error while parsing the JSON response.
org.apache.cxf.jaxrs.utils.JAXRSUtils logMessageHandlerProblem SEVERE: No message body reader has been found for class com.example.cxfrs.beans.User, ContentType: application/json Exception in thread "main" javax.ws.rs.client.ResponseProcessingException: No message body reader has been found for class org.apache.camel.example.cxfrs.beans.User, ContentType: application/json at org.apache.cxf.jaxrs.impl.ResponseImpl.reportMessageHandlerProblem(ResponseImpl.java:433) at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:384) at org.apache.cxf.jaxrs.client.AbstractClient.readBody(AbstractClient.java:512) at org.apache.cxf.jaxrs.client.WebClient.handleResponse(WebClient.java:1173) at org.apache.cxf.jaxrs.client.WebClient.doResponse(WebClient.java:1156) at org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1092) at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:894) at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:865) at org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:428) at org.apache.cxf.jaxrs.client.WebClient.get(WebClient.java:611) at com.example.cxfrs.CXFRestClient.main(CXFRestClient.java:21)
Thanks for the article. It helped me a lot.
ReplyDeleteThis helped me as well. Thanks for posting.
ReplyDeleteGreat read thaanks
ReplyDelete