View Javadoc

1   package com.atlassian.sal.core.net;
2   
3   import com.atlassian.sal.api.net.Response;
4   import com.atlassian.sal.api.net.ResponseException;
5   import org.apache.http.Header;
6   import org.apache.http.client.methods.CloseableHttpResponse;
7   import org.apache.http.entity.ContentType;
8   import org.apache.http.util.EntityUtils;
9   
10  import java.io.ByteArrayInputStream;
11  import java.io.IOException;
12  import java.io.InputStream;
13  import java.nio.charset.Charset;
14  import java.util.Collections;
15  import java.util.HashMap;
16  import java.util.Map;
17  
18  public class HttpClientResponse implements Response
19  {
20  
21      private final int statusCode;
22      private final String statusText;
23      private final byte[] body;
24      private final Charset bodyCharset;
25      private final Map<String, String> headers;
26  
27      public HttpClientResponse(final CloseableHttpResponse response) throws IOException
28      {
29          statusCode = response.getStatusLine().getStatusCode();
30          statusText = response.getStatusLine().getReasonPhrase();
31  
32          body = EntityUtils.toByteArray(response.getEntity());
33          bodyCharset = ContentType.getOrDefault(response.getEntity()).getCharset();
34  
35          Map<String, String> extractedHeaders = new HashMap<>();
36          for (Header header : response.getAllHeaders())
37          {
38              extractedHeaders.put(header.getName(), header.getValue());
39          }
40          headers = Collections.unmodifiableMap(extractedHeaders);
41      }
42  
43      @Override
44      public int getStatusCode()
45      {
46          return statusCode;
47      }
48  
49      @Override
50      public String getStatusText()
51      {
52          return statusText;
53      }
54  
55      @Override
56      public boolean isSuccessful()
57      {
58          return statusCode >= 200 && statusCode < 400;
59      }
60  
61      @Override
62      public String getHeader(final String name)
63      {
64          return headers.get(name);
65      }
66  
67      @Override
68      public Map<String, String> getHeaders()
69      {
70          return headers;
71      }
72  
73      @Override
74      public String getResponseBodyAsString() throws ResponseException
75      {
76          Charset decodeCharset = (bodyCharset != null) ? bodyCharset : Charset.defaultCharset();
77          return new String(body, decodeCharset);
78      }
79  
80      @Override
81      public InputStream getResponseBodyAsStream() throws ResponseException
82      {
83          return new ByteArrayInputStream(body);
84      }
85  
86      @Override
87      public <T> T getEntity(final Class<T> entityClass) throws ResponseException
88      {
89          throw new UnsupportedOperationException("Not implemented");
90      }
91  
92  }