From 859776ae03f44e5442d73f5801c103fa46645e49 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 26 May 2021 12:54:56 -0400 Subject: [PATCH 1/2] - fixes #209 a bug where batch errors would not respect configured log level --- .../microsoft/graph/content/BatchResponseStep.java | 13 +++++++++++-- .../graph/serializer/DefaultSerializer.java | 1 - 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/microsoft/graph/content/BatchResponseStep.java b/src/main/java/com/microsoft/graph/content/BatchResponseStep.java index feb1d13a1..659761385 100644 --- a/src/main/java/com/microsoft/graph/content/BatchResponseStep.java +++ b/src/main/java/com/microsoft/graph/content/BatchResponseStep.java @@ -33,6 +33,9 @@ import com.microsoft.graph.http.GraphErrorResponse; import com.microsoft.graph.http.GraphFatalServiceException; import com.microsoft.graph.http.GraphServiceException; +import com.microsoft.graph.logger.ILogger; +import com.microsoft.graph.logger.LoggerLevel; +import com.microsoft.graph.serializer.DefaultSerializer; import com.microsoft.graph.serializer.ISerializer; /** Response for the batch step */ @@ -61,7 +64,13 @@ public T2 getDeserializedBody(@Nonnull final Class resultClass) throws final GraphErrorResponse error = serializer.deserializeObject((JsonElement)body, GraphErrorResponse.class); if(error == null || error.error == null) { return serializer.deserializeObject((JsonElement)body, resultClass); - } else - throw GraphServiceException.createFromResponse("", "", new ArrayList<>(), "", headers, "", status, error, false); + } else { + boolean verboseError = false; + if(serializer instanceof DefaultSerializer) { + final ILogger logger = ((DefaultSerializer)serializer).getLogger(); + verboseError = logger != null && logger.getLoggingLevel() == LoggerLevel.DEBUG; + } + throw GraphServiceException.createFromResponse("", "", new ArrayList<>(), "", headers, "", status, error, verboseError); + } } } diff --git a/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java b/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java index bf520e224..ec9f7999c 100644 --- a/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java +++ b/src/main/java/com/microsoft/graph/serializer/DefaultSerializer.java @@ -393,7 +393,6 @@ public Class getDerivedClass(@Nonnull final JsonObject jsonObject, @Nullable * * @return a logger */ - @VisibleForTesting @Nullable public ILogger getLogger() { return logger; From 96ac49f93bda13862fe914b2a1e737f907f59e21 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 26 May 2021 14:58:22 -0400 Subject: [PATCH 2/2] - adds unit tests for batch response steps exception verbosity --- .../content/BatchResponseContentTest.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/test/java/com/microsoft/graph/content/BatchResponseContentTest.java b/src/test/java/com/microsoft/graph/content/BatchResponseContentTest.java index 6414b7252..a39b9255b 100644 --- a/src/test/java/com/microsoft/graph/content/BatchResponseContentTest.java +++ b/src/test/java/com/microsoft/graph/content/BatchResponseContentTest.java @@ -14,7 +14,9 @@ import com.google.gson.JsonElement; import com.microsoft.graph.http.GraphErrorResponse; import com.microsoft.graph.http.GraphServiceException; +import com.microsoft.graph.logger.DefaultLogger; import com.microsoft.graph.logger.ILogger; +import com.microsoft.graph.logger.LoggerLevel; import com.microsoft.graph.serializer.DefaultSerializer; import com.microsoft.graph.serializer.ISerializer; @@ -114,4 +116,52 @@ public void deserializesErrorsProperly() { } else fail("batch response was null"); } + @Test + public void includeVerboseInformation() { + String responsebody = "{\"responses\":[{\"id\":\"1\",\"status\":400,\"headers\":{\"Cache-Control\":\"no-cache\",\"x-ms-resource-unit\":\"1\",\"Content-Type\":\"application/json\"},\"body\":{\"error\":{\"code\":\"Request_BadRequest\",\"message\":\"Avalueisrequiredforproperty'displayName'ofresource'User'.\",\"innerError\":{\"date\":\"2021-02-02T19:19:38\",\"request-id\":\"408b8e64-4047-4c97-95b6-46e9f212ab48\",\"client-request-id\":\"102910da-260c-3028-0fb3-7d6903a02622\"}}}}]}"; + ISerializer serializer = new DefaultSerializer(new DefaultLogger() {{ + setLoggingLevel(LoggerLevel.DEBUG); + }}); + BatchResponseContent batchresponse = serializer.deserializeObject(responsebody, BatchResponseContent.class); + if(batchresponse != null) { + if(batchresponse.responses != null) // this is done by the batch request in the fluent API + for(final BatchResponseStep step : batchresponse.responses) { + step.serializer = serializer; + } + try { + batchresponse.getResponseById("1").getDeserializedBody(BatchRequestContent.class); + } catch(GraphServiceException ex) { + final GraphErrorResponse response = ex.getError(); + assertNotNull(response); + assertNotNull(response.error); + assertNotNull(response.error.message); + assertEquals(ex.getMessage(true), ex.getMessage()); + } + } else + fail("batch response was null"); + } + @Test + public void doesNotIncludeVerboseInformation() { + String responsebody = "{\"responses\":[{\"id\":\"1\",\"status\":400,\"headers\":{\"Cache-Control\":\"no-cache\",\"x-ms-resource-unit\":\"1\",\"Content-Type\":\"application/json\"},\"body\":{\"error\":{\"code\":\"Request_BadRequest\",\"message\":\"Avalueisrequiredforproperty'displayName'ofresource'User'.\",\"innerError\":{\"date\":\"2021-02-02T19:19:38\",\"request-id\":\"408b8e64-4047-4c97-95b6-46e9f212ab48\",\"client-request-id\":\"102910da-260c-3028-0fb3-7d6903a02622\"}}}}]}"; + ISerializer serializer = new DefaultSerializer(new DefaultLogger() {{ + setLoggingLevel(LoggerLevel.ERROR); + }}); + BatchResponseContent batchresponse = serializer.deserializeObject(responsebody, BatchResponseContent.class); + if(batchresponse != null) { + if(batchresponse.responses != null) // this is done by the batch request in the fluent API + for(final BatchResponseStep step : batchresponse.responses) { + step.serializer = serializer; + } + try { + batchresponse.getResponseById("1").getDeserializedBody(BatchRequestContent.class); + } catch(GraphServiceException ex) { + final GraphErrorResponse response = ex.getError(); + assertNotNull(response); + assertNotNull(response.error); + assertNotNull(response.error.message); + assertEquals(ex.getMessage(false), ex.getMessage()); + } + } else + fail("batch response was null"); + } }