From b579e11dfdd9f29f49d169e1c8d96e59487abc99 Mon Sep 17 00:00:00 2001 From: Markus Mertens Date: Wed, 4 Aug 2021 16:25:42 +0200 Subject: [PATCH 1/4] fixed serialization problems for mime messages --- .../com/microsoft/graph/http/CoreHttpProvider.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/microsoft/graph/http/CoreHttpProvider.java b/src/main/java/com/microsoft/graph/http/CoreHttpProvider.java index 4b53f5bbe..3b50842c5 100644 --- a/src/main/java/com/microsoft/graph/http/CoreHttpProvider.java +++ b/src/main/java/com/microsoft/graph/http/CoreHttpProvider.java @@ -296,7 +296,15 @@ public Request getHttpRequest(@Nonnull final IHttpRequest request } } else { logger.logDebug("Sending " + serializable.getClass().getName() + " as request body"); - final String serializeObject = serializer.serializeObject(serializable); + + String serializeObject = null; + + if ("text/plain".equals(contenttype) && serializable instanceof String) { + serializeObject = (String)serializable; + } else { + serializeObject = serializer.serializeObject(serializable); + } + if(serializeObject == null) { throw new ClientException("Error during serialization of request body, the result was null", null); } From 2444ecaae4e34dd752c4e6f72a0494b0ae308ec4 Mon Sep 17 00:00:00 2001 From: Markus Mertens Date: Thu, 5 Aug 2021 08:08:53 +0200 Subject: [PATCH 2/4] added unit test for "text/plain" request bodies --- .../graph/http/CoreHttpProviderTests.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/test/java/com/microsoft/graph/http/CoreHttpProviderTests.java b/src/test/java/com/microsoft/graph/http/CoreHttpProviderTests.java index 001d9a080..84037798d 100644 --- a/src/test/java/com/microsoft/graph/http/CoreHttpProviderTests.java +++ b/src/test/java/com/microsoft/graph/http/CoreHttpProviderTests.java @@ -20,6 +20,7 @@ import com.microsoft.graph.serializer.DefaultSerializer; import com.microsoft.graph.serializer.ISerializer; +import okio.Buffer; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; @@ -39,6 +40,7 @@ import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; +import org.mockito.Mockito; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -49,6 +51,8 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class CoreHttpProviderTests { @@ -288,4 +292,34 @@ public void getHttpRequestSetsRetryOrRedirectOptionsOnNonDefaultValues() throws assertNotNull(retryOptions); } + + @Test + public void getHttpRequestWithTextPlainBodyDoesNotSerializeAsJson() throws IOException { + final IHttpRequest absRequest = mock(IHttpRequest.class); + when(absRequest.getRequestUrl()).thenReturn(new URL("https://graph.microsoft.com/v1.0/me")); + when(absRequest.getHttpMethod()).thenReturn(HttpMethod.POST); + final ISerializer serializer = mock(ISerializer.class); + final ILogger logger = mock(ILogger.class); + + mProvider = new CoreHttpProvider(serializer, + logger, + new OkHttpClient.Builder().build()); + + // GIVEN: A "text/plain" request body + HeaderOption option = new HeaderOption("Content-Type", "text/plain"); + when(absRequest.getHeaders()).thenReturn(Arrays.asList(option)); + String expectedBody = "Plain String Body"; + + //WHEN: getHttpRequest is called + Request request = mProvider.getHttpRequest(absRequest, String.class, expectedBody); + + // THEN: The serializer must not be called + verify(serializer, never()).serializeObject(Mockito.any()); + + // AND: We expect the request body to contain the plain String, not serialized as Json + Buffer buffer = new Buffer(); + request.body().writeTo(buffer); + String actualRequestBody = buffer.readUtf8(); + assertEquals(expectedBody, actualRequestBody); + } } From 8debce9318f2f57944331d8cccde3f41351f2253 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 5 Aug 2021 07:54:47 -0400 Subject: [PATCH 3/4] - fixes a linting issue for null check --- .../graph/http/CoreHttpProviderTests.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/microsoft/graph/http/CoreHttpProviderTests.java b/src/test/java/com/microsoft/graph/http/CoreHttpProviderTests.java index 84037798d..ef5035482 100644 --- a/src/test/java/com/microsoft/graph/http/CoreHttpProviderTests.java +++ b/src/test/java/com/microsoft/graph/http/CoreHttpProviderTests.java @@ -40,6 +40,7 @@ import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; +import okhttp3.RequestBody; import org.mockito.Mockito; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -306,20 +307,22 @@ public void getHttpRequestWithTextPlainBodyDoesNotSerializeAsJson() throws IOExc new OkHttpClient.Builder().build()); // GIVEN: A "text/plain" request body - HeaderOption option = new HeaderOption("Content-Type", "text/plain"); + final HeaderOption option = new HeaderOption("Content-Type", "text/plain"); when(absRequest.getHeaders()).thenReturn(Arrays.asList(option)); - String expectedBody = "Plain String Body"; + final String expectedBody = "Plain String Body"; //WHEN: getHttpRequest is called - Request request = mProvider.getHttpRequest(absRequest, String.class, expectedBody); + final Request request = mProvider.getHttpRequest(absRequest, String.class, expectedBody); // THEN: The serializer must not be called verify(serializer, never()).serializeObject(Mockito.any()); // AND: We expect the request body to contain the plain String, not serialized as Json - Buffer buffer = new Buffer(); - request.body().writeTo(buffer); - String actualRequestBody = buffer.readUtf8(); + final Buffer buffer = new Buffer(); + final RequestBody requestBody = request.body(); + assertNotNull(requestBody); + requestBody.writeTo(buffer); + final String actualRequestBody = buffer.readUtf8(); assertEquals(expectedBody, actualRequestBody); } } From bb3f95407557fed7a63a3c46d7f46991b625eb71 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 5 Aug 2021 07:58:25 -0400 Subject: [PATCH 4/4] - adds missing javadoc comments --- .../microsoft/graph/serializer/DerivedClassIdentifier.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/microsoft/graph/serializer/DerivedClassIdentifier.java b/src/main/java/com/microsoft/graph/serializer/DerivedClassIdentifier.java index 6fbe1a4ba..e01346a02 100644 --- a/src/main/java/com/microsoft/graph/serializer/DerivedClassIdentifier.java +++ b/src/main/java/com/microsoft/graph/serializer/DerivedClassIdentifier.java @@ -8,12 +8,16 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; +/** This class provides methods to get the derived class corresponding to the OData type when deserializing payloads. */ public class DerivedClassIdentifier { private final static String ODATA_TYPE_KEY = "@odata.type"; private final ILogger logger; - + /** + * Creates a new instance of the dereived class identifier. + * @param logger The logger to use. + */ public DerivedClassIdentifier(@Nonnull ILogger logger) { this.logger = Objects.requireNonNull(logger, "logger parameter cannot be null");; }