Skip to content

Commit ee17968

Browse files
author
Caitlin Bales (MSFT)
committed
Access response headers
1 parent 00944b6 commit ee17968

File tree

8 files changed

+56
-4
lines changed

8 files changed

+56
-4
lines changed

src/main/java/com/microsoft/graph/http/DefaultHttpProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ private <Result, Body, DeserializeType> Result sendRequestInternal(final IHttpRe
313313
final String contentType = headers.get(CONTENT_TYPE_HEADER_NAME);
314314
if (contentType.contains(JSON_CONTENT_TYPE)) {
315315
logger.logDebug("Response json");
316-
return handleJsonResponse(in, resultClass);
316+
return handleJsonResponse(in, connection.getResponseHeaders(), resultClass);
317317
} else {
318318
logger.logDebug("Response binary");
319319
isBinaryStreamInput = true;
@@ -377,13 +377,13 @@ private InputStream handleBinaryStream(final InputStream in) {
377377
* @param <Result> The type of the response object.
378378
* @return The JSON object.
379379
*/
380-
private <Result> Result handleJsonResponse(final InputStream in, final Class<Result> clazz) {
380+
private <Result> Result handleJsonResponse(final InputStream in, Map<String, List<String>> responseHeaders, final Class<Result> clazz) {
381381
if (clazz == null) {
382382
return null;
383383
}
384384

385385
final String rawJson = streamToString(in);
386-
return getSerializer().deserializeObject(rawJson, clazz);
386+
return getSerializer().deserializeObject(rawJson, clazz, responseHeaders);
387387
}
388388

389389
/**

src/main/java/com/microsoft/graph/http/GraphServiceException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ public static <T> GraphServiceException createFromConnection(final IHttpRequest
283283
final String rawOutput = DefaultHttpProvider.streamToString(connection.getInputStream());
284284
GraphErrorResponse error;
285285
try {
286-
error = serializer.deserializeObject(rawOutput, GraphErrorResponse.class);
286+
error = serializer.deserializeObject(rawOutput, GraphErrorResponse.class, connection.getResponseHeaders());
287287
} catch (final Exception ex) {
288288
error = new GraphErrorResponse();
289289
error.error = new GraphError();

src/main/java/com/microsoft/graph/http/IConnection.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.io.IOException;
2626
import java.io.InputStream;
2727
import java.io.OutputStream;
28+
import java.util.List;
2829
import java.util.Map;
2930

3031
/**
@@ -90,6 +91,8 @@ public interface IConnection {
9091
* @return The map of headers.
9192
*/
9293
Map<String, String> getHeaders();
94+
95+
Map<String, List<String>> getResponseHeaders();
9396

9497
/**
9598
* Gets the HTTP request method.

src/main/java/com/microsoft/graph/http/UrlConnection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.net.HttpURLConnection;
3131
import java.net.ProtocolException;
3232
import java.util.HashMap;
33+
import java.util.List;
3334
import java.util.Map;
3435

3536
/**
@@ -107,6 +108,10 @@ public int getContentLength() {
107108
public int getResponseCode() throws IOException {
108109
return connection.getResponseCode();
109110
}
111+
112+
public Map<String, List<String>> getResponseHeaders() {
113+
return connection.getHeaderFields();
114+
}
110115

111116
@Override
112117
public String getResponseMessage() throws IOException {

src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ public DefaultSerializer(final ILogger logger) {
6464
*/
6565
@Override
6666
public <T> T deserializeObject(final String inputString, final Class<T> clazz) {
67+
return deserializeObject(inputString, clazz, null);
68+
}
69+
70+
@Override
71+
public <T> T deserializeObject(final String inputString, final Class<T> clazz, Map<String, java.util.List<String>> responseHeaders) {
6772
final T jsonObject = gson.fromJson(inputString, clazz);
6873

6974
// Populate the json backed fields for any annotations that are not in the object model
@@ -72,6 +77,12 @@ public <T> T deserializeObject(final String inputString, final Class<T> clazz) {
7277
final IJsonBackedObject jsonBackedObject = (IJsonBackedObject) jsonObject;
7378
final JsonObject rawObject = gson.fromJson(inputString, JsonObject.class);
7479
jsonBackedObject.setRawObject(this, rawObject);
80+
81+
if (responseHeaders != null) {
82+
JsonElement convertedHeaders = gson.toJsonTree(responseHeaders);
83+
jsonBackedObject.additionalDataManager().put("graphResponseHeaders", convertedHeaders);
84+
}
85+
7586
jsonBackedObject.additionalDataManager().setAdditionalData(rawObject);
7687
} else {
7788
logger.logDebug("Deserializing a non-IJsonBackedObject type " + clazz.getSimpleName());

src/main/java/com/microsoft/graph/serializer/ISerializer.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222

2323
package com.microsoft.graph.serializer;
2424

25+
import java.util.List;
26+
import java.util.Map;
27+
2528
/**
2629
* Serializes and deserializes items from strings into their types.
2730
*/
@@ -35,6 +38,15 @@ public interface ISerializer {
3538
* @return The deserialized item from the input string.
3639
*/
3740
<T> T deserializeObject(final String inputString, Class<T> clazz);
41+
42+
/**
43+
* Deserialize an object from the input string.
44+
* @param inputString The string that stores the representation of the item.
45+
* @param clazz The .class of the item to be deserialized.
46+
* @param <T> The type of the item to be deserialized.
47+
* @return The deserialized item from the input string.
48+
*/
49+
<T> T deserializeObject(final String inputString, Class<T> clazz, Map<String, List<String>> responseHeaders);
3850

3951
/**
4052
* Serializes an object into a string.

src/test/java/com/microsoft/graph/http/MockConnection.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import java.io.IOException;
66
import java.io.InputStream;
77
import java.io.OutputStream;
8+
import java.util.ArrayList;
89
import java.util.HashMap;
10+
import java.util.List;
911
import java.util.Map;
1012

1113
/**
@@ -76,4 +78,14 @@ public void setContentLength(int length) {
7678
// noop
7779
}
7880

81+
@Override
82+
public Map<String, List<String>> getResponseHeaders() {
83+
Map<String, List<String>> headers = new HashMap<String, List<String>>();
84+
ArrayList<String> headerValues = new ArrayList<String>();
85+
headerValues.add("value1");
86+
headers.put("header1", headerValues);
87+
88+
return headers;
89+
}
90+
7991
}

src/test/java/com/microsoft/graph/serializer/MockSerializer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222

2323
package com.microsoft.graph.serializer;
2424

25+
import java.util.List;
26+
import java.util.Map;
27+
2528
/**
2629
* Mock instance of the {@see ISerializer}
2730
*/
@@ -56,4 +59,10 @@ public <T> T deserializeObject(final String inputString, final Class<T> clazz) {
5659
public <T> String serializeObject(final T serializableObject) {
5760
return mSerializeReturn;
5861
}
62+
63+
@Override
64+
public <T> T deserializeObject(String inputString, Class<T> clazz, Map<String, List<String>> responseHeaders) {
65+
// TODO Auto-generated method stub
66+
return (T) mDeserializeReturn;
67+
}
5968
}

0 commit comments

Comments
 (0)