|
5 | 5 | import com.fasterxml.jackson.databind.JavaType; |
6 | 6 | import com.fasterxml.jackson.databind.ObjectMapper; |
7 | 7 | import org.apache.http.Consts; |
| 8 | +import org.apache.http.Header; |
| 9 | +import org.apache.http.HttpResponse; |
8 | 10 | import org.apache.http.client.fluent.Content; |
9 | 11 | import org.apache.http.client.fluent.Executor; |
10 | 12 | import org.apache.http.client.fluent.Request; |
| 13 | +import org.apache.http.client.fluent.Response; |
11 | 14 | import org.apache.http.entity.ContentType; |
12 | 15 | import org.apache.http.message.BasicHeader; |
13 | 16 | import org.apache.http.message.BasicNameValuePair; |
14 | 17 | import org.restcomm.sdk.domain.Restful; |
15 | 18 |
|
| 19 | +import java.io.ByteArrayOutputStream; |
16 | 20 | import java.io.IOException; |
| 21 | +import java.io.InputStream; |
| 22 | +import java.io.StringReader; |
| 23 | +import java.io.StringWriter; |
| 24 | +import java.nio.charset.StandardCharsets; |
17 | 25 | import java.util.Map; |
18 | 26 | import java.util.stream.Collectors; |
19 | 27 |
|
@@ -66,6 +74,10 @@ public <T> T get(String url, Class<T> type) { |
66 | 74 | return executeRequest(Request.Get(url), type); |
67 | 75 | } |
68 | 76 |
|
| 77 | + public <T> ExtendedResponse<T> getWithHeaders(String url, Class<T> type) { |
| 78 | + return executeRequestWithHeaders(Request.Get(url), type); |
| 79 | + } |
| 80 | + |
69 | 81 | public <T> T put(String url, Object entity, Class<T> type) { |
70 | 82 | Request request = Request.Put(url); |
71 | 83 | addRequestBody(request, entity); |
@@ -146,4 +158,52 @@ private <T> T executeRequest(Request request, Class<T> type) { |
146 | 158 | throw new RestcommClientException(e); |
147 | 159 | } |
148 | 160 | } |
| 161 | + |
| 162 | + private <T> ExtendedResponse<T> executeRequestWithHeaders(Request request, Class<T> type) { |
| 163 | + try { |
| 164 | + request.addHeader(authoriztion); |
| 165 | + Response response = executor.execute(request); |
| 166 | + HttpResponse httpResponse = response.returnResponse(); |
| 167 | + |
| 168 | + InputStream inputStream = httpResponse.getEntity().getContent(); |
| 169 | + ByteArrayOutputStream result = new ByteArrayOutputStream(); |
| 170 | + byte[] buffer = new byte[1024]; |
| 171 | + for (int length; (length = inputStream.read(buffer)) != -1;) { |
| 172 | + result.write(buffer, 0, length); |
| 173 | + } |
| 174 | + String responseContent = result.toString(StandardCharsets.UTF_8.name()); |
| 175 | + if (responseContent.isEmpty()) { |
| 176 | + return null; |
| 177 | + } |
| 178 | + if (type.equals(String.class)) { |
| 179 | + return new ExtendedResponse<T>((T) response, new Header[0]); |
| 180 | + } |
| 181 | + T jsonRes = deserializer.readValue(responseContent, type); |
| 182 | + |
| 183 | + ExtendedResponse<T> res = new ExtendedResponse<T>(jsonRes, httpResponse.getAllHeaders()); |
| 184 | + return res; |
| 185 | + } catch (Exception e) { |
| 186 | + throw new RestcommClientException(e); |
| 187 | + } |
| 188 | + } |
| 189 | + |
| 190 | + public static class ExtendedResponse<T> { |
| 191 | + private T jsonResponse; |
| 192 | + private Header[] headers; |
| 193 | + |
| 194 | + public ExtendedResponse(T jsonResponse, Header[] headers) { |
| 195 | + this.jsonResponse = jsonResponse; |
| 196 | + this.headers = headers; |
| 197 | + } |
| 198 | + |
| 199 | + public T getJsonResponse() { |
| 200 | + return jsonResponse; |
| 201 | + } |
| 202 | + |
| 203 | + public Header[] getHeaders() { |
| 204 | + return headers; |
| 205 | + } |
| 206 | + |
| 207 | + } |
| 208 | + |
149 | 209 | } |
0 commit comments