/** * Copyright (C) 2010 Talend Inc. - www.talend.com */ package client; import java.util.Map; import javax.ws.rs.WebApplicationException; import junit.framework.Assert; import com.talend.camel.examples.springsecurity.common.HelloWorld; import com.talend.camel.examples.springsecurity.common.User; import com.talend.camel.examples.springsecurity.common.UserImpl; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxrs.client.JAXRSClientFactory; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.log4j.Logger; /** * <p> * Uses a JAX-RS proxy to access a jaxrs server with several users and credentials. * Depending on the user's roles the operation should work or be denied. * </p> */ public final class RESTClient { private final Logger logger = Logger.getLogger(JaxWsClient.class); private String address; public RESTClient(int port) { address = "http://localhost:" + port + "/spring-security/HelloWorld"; } public void sayHelloAsAdmin() throws Exception { HelloWorld service = createServiceProxy("jim", "jimspassword"); System.out.println("Using HelloServiceRest with admin priviliges"); System.out.println("Asking the service to add a new user and also say hi"); try { System.out.println(service.sayHi("Barry")); System.out.println(service.sayHiToUser(new UserImpl("Barry"))); } catch (WebApplicationException ex) { throw new RuntimeException("Should be able to sayHi", ex); } System.out.println("Getting the list of existing users"); try { Map<Integer, User> users = service.getUsers(); printUsers(users); } catch (WebApplicationException ex) { throw new RuntimeException("Admin should be able to invoke getUsers", ex); } } public void sayHelloAsUser() throws Exception { HelloWorld service = createServiceProxy("bob", "bobspassword"); System.out.println("Using HelloServiceRest with user priviliges"); System.out.println("Getting the list of existing users"); try { Map<Integer, User> users = service.getUsers(); printUsers(users); throw new RuntimeException("Only admin should be able to invoke getUsers"); } catch (WebApplicationException ex) { Assert.assertEquals("403 response code is expected", 403, ex.getResponse().getStatus()); System.out.println("Access was denied for user bob"); } System.out.println("Asking the service to add a new user Barry and also say hi"); try { System.out.println(service.sayHi("Barry")); System.out.println(service.sayHiToUser(new UserImpl("Barry"))); } catch (WebApplicationException ex) { throw new RuntimeException("Should be able to sayHi"); } } public HelloWorld createServiceProxy(String username, String password) { HelloWorld service = JAXRSClientFactory.create(address, HelloWorld.class, username, password, null); WebClient.getConfig(service).getHttpConduit().getClient().setReceiveTimeout(100000000); WebClient.getConfig(service).getOutInterceptors().add(new LoggingOutInterceptor()); return service; } private void printUsers(Map<Integer, User> users) { if (users.size() == 0) { System.out.println("No information about users is available"); } for (Map.Entry<Integer, User> entry : users.entrySet()) { System.out.println(entry.getValue().getName()); } } public static void main(String[] args) throws Exception { int port = args.length == 2 && "http.port".equals(args[0]) ? Integer.valueOf(args[1]) : 8080; System.out.println("Using CXF JAX-RS proxy to invoke on HelloWorld service"); RESTClient client = new RESTClient(port); client.sayHelloAsAdmin(); client.sayHelloAsUser(); } }