View Javadoc
1   package it.com.atlassian.refapp.rest;
2   
3   import com.sun.jersey.api.client.Client;
4   import com.sun.jersey.api.client.ClientResponse;
5   import com.sun.jersey.api.client.WebResource;
6   import com.sun.jersey.api.client.config.ClientConfig;
7   import com.sun.jersey.api.client.config.DefaultClientConfig;
8   import org.codehaus.jackson.JsonNode;
9   import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
10  import org.codehaus.jackson.map.ObjectMapper;
11  import org.eclipse.jetty.util.MultiPartWriter;
12  
13  import javax.annotation.Nonnull;
14  import java.io.IOException;
15  
16  /**
17   * Rest/Jersey utils, simplified from Confluence com.atlassian.confluence.it.RestHelper and com.atlassian.confluence.rest.client.RestClientFactory
18   */
19  public final class RestUtils {
20      private RestUtils() {}
21  
22      @Nonnull
23      public static WebResource newResource(@Nonnull String url) {
24          return newClient().resource(url);
25      }
26  
27      public static JsonNode getJsonResponse(WebResource resource) {
28          final String responseString = getJsonResponseString(resource);
29          try {
30              return new ObjectMapper().readTree(responseString);
31          } catch (IOException e) {
32              throw new RuntimeException("Could not parse json response from json string : " + responseString, e);
33          }
34      }
35  
36      public static String getJsonResponseString(WebResource resource) {
37          final ClientResponse response = resource.get(ClientResponse.class);
38          try {
39              return response.hasEntity() ? response.getEntity(String.class) : null;
40          } finally {
41              response.close();
42          }
43      }
44  
45      private static Client newClient() {
46          ClientConfig clientConfig = new DefaultClientConfig();
47          clientConfig.getSingletons().add(new JacksonJaxbJsonProvider());
48          clientConfig.getClasses().add(MultiPartWriter.class);
49          return Client.create(clientConfig);
50      }
51  }