View Javadoc
1   package info.ejava.examples.jaxrs.todos.client;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.junit.Assert.assertNotEquals;
5   
6   import java.net.URI;
7   
8   import javax.naming.NamingException;
9   import javax.ws.rs.client.Client;
10  import javax.ws.rs.client.ClientBuilder;
11  import javax.ws.rs.client.WebTarget;
12  import javax.ws.rs.core.MediaType;
13  import javax.ws.rs.core.Response;
14  import javax.ws.rs.core.Response.Status;
15  import javax.ws.rs.core.UriBuilder;
16  
17  import org.junit.Before;
18  import org.junit.Test;
19  import org.slf4j.Logger;
20  import org.slf4j.LoggerFactory;
21  
22  public class GreetingsIT {
23      private static final Logger logger = LoggerFactory.getLogger(GreetingsIT.class);
24      private static final String baseHttpUrlString = TodoListsIT.getITProperty("url.base.http", "http://localhost:8080"); 
25      
26      URI baseTodosUrl = UriBuilder.fromPath(baseHttpUrlString).path("ejavaTodos/api").build();
27      Client client;
28  
29      @Before
30      public void setUp() throws NamingException {
31          client = ClientBuilder.newClient();
32      }
33      
34      @Test
35      public void clientBasics() {
36              //determine the baseUrl for the application
37          String baseHttpUrlString = TodoListsIT.getITProperty("url.base.http", "http://localhost:8080");
38              //build a URL to the specific resource  
39          URI resourceUrl = javax.ws.rs.core.UriBuilder.fromUri(baseHttpUrlString)
40                  //.path("") //using root resource - no need for extra path
41                  .build();
42          
43              //construct a JAX-RS client 
44          javax.ws.rs.client.Client client = javax.ws.rs.client.ClientBuilder.newClient();
45          {
46              //create the WebTarget to represent intended resource
47          javax.ws.rs.client.WebTarget target = client.target(resourceUrl);
48              //create an overall request, indicating Acceptable response types
49          javax.ws.rs.client.Invocation.Builder request = target.request(MediaType.TEXT_HTML_TYPE);
50              //create a method-specific request
51          javax.ws.rs.client.Invocation method = request.buildGet();
52              //invoke the request and get an actual response from remote resource
53          javax.ws.rs.core.Response response = method.invoke();
54              //interpret response
55          javax.ws.rs.core.Response.StatusType status = response.getStatusInfo();
56          int statusCode = response.getStatus();
57              //get response entity
58          String content = response.readEntity(String.class);
59          
60          logger.debug("GET {} => {}/{}", target.getUri(), response.getStatus(), response.getStatusInfo());
61          
62          assertEquals("unexpected statusType", Status.OK, status);
63          assertEquals("unexpected statusCode", 200, statusCode);
64          assertNotEquals("unexpected size", 0, content.length());
65          }
66          
67              //with a little short-hand
68          {
69          WebTarget target = client.target(resourceUrl);
70          Response response = target.request(MediaType.TEXT_HTML_TYPE)
71                  .buildGet()
72                  .invoke();
73          logger.debug("GET {} => {}/{}", target.getUri(), response.getStatus(), response.getStatusInfo());
74          
75          String content = response.readEntity(String.class);
76          
77          assertEquals("unexpected statusType", Status.Family.SUCCESSFUL, response.getStatusInfo().getFamily());
78          assertEquals("unexpected statusType", Status.OK, response.getStatusInfo());
79          assertNotEquals("unexpected size", 0, content.length());
80          }
81               
82      }
83      
84      @Test
85      public void sayHi() {
86          URI uri = UriBuilder.fromUri(baseTodosUrl)
87                              .path("greetings")
88                              .path("hi")
89                              .build();
90          WebTarget target = client.target(uri);
91          Response response = target.request(MediaType.TEXT_PLAIN_TYPE)
92                                    .get();
93          logger.info("GET {} => {}", target.getUri(), response.getStatusInfo());
94          String greeting = response.readEntity(String.class);
95          logger.info("{}", greeting);
96          assertEquals("unexpected status", Status.OK, response.getStatusInfo());
97          assertEquals("unexpected greeting", "hi", greeting);
98      }
99      
100     @Test
101     public void greetBadRequest() {
102         URI uri = UriBuilder.fromUri(baseTodosUrl)
103                 .path("greetings")
104                 .path("greet")
105                 .build();
106         WebTarget target = client.target(uri);
107         Response response = target.request(MediaType.TEXT_PLAIN_TYPE)
108                       .get();
109         logger.info("GET {} => {}/{}", target.getUri(), response.getStatus(), response.getStatusInfo());
110         String greeting = response.readEntity(String.class);
111         logger.info("{}", greeting);
112         assertEquals("unexpected status", Status.BAD_REQUEST, response.getStatusInfo());        
113     }
114     
115     @Test
116     public void greetOK() {
117         URI uri = UriBuilder.fromUri(baseTodosUrl)
118                 .path("greetings")
119                 .path("greet")
120                 .build();
121         WebTarget target = client.target(uri)
122                 .queryParam("name", "ejava");
123         Response response = target.request(MediaType.TEXT_PLAIN_TYPE)
124                       .get();
125         logger.info("GET {} => {}", target.getUri(), response.getStatusInfo());
126         String greeting = response.readEntity(String.class);
127         logger.info("{}", greeting);
128         assertEquals("unexpected status", Status.OK, response.getStatusInfo());        
129         assertEquals("unexpected greeting", "hello ejava", greeting);        
130     }
131 }