/** * Copyright (C) 2010 Talend Inc. - www.talend.com */ package client; import java.util.ArrayList; import java.util.List; import java.util.Properties; import javax.ws.rs.core.Response; import common.intro.Person; import org.apache.cxf.jaxrs.client.WebClient; public final class RESTClient { private static final String PORT_PROPERTY = "http.port"; private static final int DEFAULT_PORT_VALUE = 8080; private static final String HTTP_PORT; static { Properties props = new Properties(); try { props.load(RESTClient.class.getResourceAsStream("/client.properties")); } catch (Exception ex) { throw new RuntimeException("client.properties resource is not available"); } HTTP_PORT = props.getProperty(PORT_PROPERTY); } private String urlStem; public RESTClient() { this(getPort()); } public RESTClient(int port) { urlStem = "http://localhost:" + port + "/services/membership/members/"; } public void run() throws Exception { Person p = getMember(1); System.out.println("Updating person name using PUT and .../members/1/name URL:"); WebClient wc = WebClient.create(urlStem); wc.path("1"); wc.path("name").type("text/plain"); Response resp = wc.put("George".equals(p.getName()) ? "Sam" : "George"); // for PUTS, resp.getStatus() returns 204 if success, 404 if ID couldn't // be found p = getMember(1); System.out.println("Updating multiple fields of the person using PUT and .../members/1 URL:"); p.setName("Bob"); p.setAge(p.getAge() == 40 ? 30 : 40); resp = wc.reset().path("1").put(p); p = getMember(1); System.out.println("Creating a new member using POST and .../members/1 URL:"); Person newMember = new Person(); newMember.setName("Harry"); newMember.setAge(30); resp = wc.reset().post(newMember); if (resp.getStatus() != Response.Status.CREATED.getStatusCode()) { throw new RuntimeException("Could not add new member."); } // POSTS (creates) return the new item's URL (containing the // server-generated ID) // in the HTTP Location header String location = resp.getMetadata().getFirst("Location").toString(); System.out.println("New Member location returned from POST: " + location); System.out.println("Requerying newly added data using above URL:"); int maxID = new Integer(location.substring(location.lastIndexOf("/") + 1)).intValue(); getMember(location); // GET with the .../members/ URI retrieves all members getAllMembers(wc); if (maxID > -1) { System.out.println("Removing member with ID of " + maxID); // resp.getStatus() returns 410 returned on successful DELETE, 404 if item not found resp = wc.path("all").path(new Integer(maxID).toString()).delete(); } // reprint of list with latest member removed wc.reset(); getAllMembers(wc); } private Person getMember(int memberNo) throws Exception { WebClient wc = WebClient.create(urlStem); wc.path(memberNo); Person p = wc.get(Person.class); System.out.println("person ID/Name/Age = " + p.getId() + " / " + p.getName() + " / " + p.getAge()); return p; } private Person getMember(String locationURL) throws Exception { WebClient wc = WebClient.create(locationURL); Person p = wc.get(Person.class); System.out.println("person ID/Name/Age = " + p.getId() + " / " + p.getName() + " / " + p.getAge()); return p; } private void getAllMembers(WebClient webClient) { System.out.println("Retrieving list of all members:"); List<Person> persons = new ArrayList<Person>(webClient.getCollection(Person.class)); for (Person person : persons) { System.out .println("ID " + person.getId() + ": " + person.getName() + ", age: " + person.getAge()); } } public static void main(String[] args) throws Exception { new RESTClient().run(); System.out.println("\n"); System.exit(0); } private static int getPort() { try { return Integer.valueOf(HTTP_PORT); } catch (NumberFormatException ex) { // ignore } return DEFAULT_PORT_VALUE; } }