Skip to content

Commit c55ac30

Browse files
Merge pull request #258 from mmertens93/dev
fixed serialization problems for mime messages
2 parents c9c2f8c + bb3f954 commit c55ac30

File tree

3 files changed

+51
-2
lines changed

3 files changed

+51
-2
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,15 @@ public <Result, Body> Request getHttpRequest(@Nonnull final IHttpRequest request
296296
}
297297
} else {
298298
logger.logDebug("Sending " + serializable.getClass().getName() + " as request body");
299-
final String serializeObject = serializer.serializeObject(serializable);
299+
300+
String serializeObject = null;
301+
302+
if ("text/plain".equals(contenttype) && serializable instanceof String) {
303+
serializeObject = (String)serializable;
304+
} else {
305+
serializeObject = serializer.serializeObject(serializable);
306+
}
307+
300308
if(serializeObject == null) {
301309
throw new ClientException("Error during serialization of request body, the result was null", null);
302310
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,16 @@
88
import javax.annotation.Nonnull;
99
import javax.annotation.Nullable;
1010

11+
/** This class provides methods to get the derived class corresponding to the OData type when deserializing payloads. */
1112
public class DerivedClassIdentifier {
1213

1314
private final static String ODATA_TYPE_KEY = "@odata.type";
1415

1516
private final ILogger logger;
16-
17+
/**
18+
* Creates a new instance of the dereived class identifier.
19+
* @param logger The logger to use.
20+
*/
1721
public DerivedClassIdentifier(@Nonnull ILogger logger) {
1822
this.logger = Objects.requireNonNull(logger, "logger parameter cannot be null");;
1923
}

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.microsoft.graph.serializer.DefaultSerializer;
2121
import com.microsoft.graph.serializer.ISerializer;
2222

23+
import okio.Buffer;
2324
import org.junit.jupiter.api.Test;
2425

2526
import java.io.ByteArrayInputStream;
@@ -39,6 +40,8 @@
3940
import okhttp3.Request;
4041
import okhttp3.Response;
4142
import okhttp3.ResponseBody;
43+
import okhttp3.RequestBody;
44+
import org.mockito.Mockito;
4245

4346
import static org.junit.jupiter.api.Assertions.assertEquals;
4447
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -49,6 +52,8 @@
4952
import static org.mockito.ArgumentMatchers.any;
5053
import static org.mockito.ArgumentMatchers.anyString;
5154
import static org.mockito.Mockito.mock;
55+
import static org.mockito.Mockito.never;
56+
import static org.mockito.Mockito.verify;
5257
import static org.mockito.Mockito.when;
5358

5459
public class CoreHttpProviderTests {
@@ -288,4 +293,36 @@ public void getHttpRequestSetsRetryOrRedirectOptionsOnNonDefaultValues() throws
288293

289294
assertNotNull(retryOptions);
290295
}
296+
297+
@Test
298+
public void getHttpRequestWithTextPlainBodyDoesNotSerializeAsJson() throws IOException {
299+
final IHttpRequest absRequest = mock(IHttpRequest.class);
300+
when(absRequest.getRequestUrl()).thenReturn(new URL("https://graph.microsoft.com/v1.0/me"));
301+
when(absRequest.getHttpMethod()).thenReturn(HttpMethod.POST);
302+
final ISerializer serializer = mock(ISerializer.class);
303+
final ILogger logger = mock(ILogger.class);
304+
305+
mProvider = new CoreHttpProvider(serializer,
306+
logger,
307+
new OkHttpClient.Builder().build());
308+
309+
// GIVEN: A "text/plain" request body
310+
final HeaderOption option = new HeaderOption("Content-Type", "text/plain");
311+
when(absRequest.getHeaders()).thenReturn(Arrays.asList(option));
312+
final String expectedBody = "Plain String Body";
313+
314+
//WHEN: getHttpRequest is called
315+
final Request request = mProvider.getHttpRequest(absRequest, String.class, expectedBody);
316+
317+
// THEN: The serializer must not be called
318+
verify(serializer, never()).serializeObject(Mockito.any());
319+
320+
// AND: We expect the request body to contain the plain String, not serialized as Json
321+
final Buffer buffer = new Buffer();
322+
final RequestBody requestBody = request.body();
323+
assertNotNull(requestBody);
324+
requestBody.writeTo(buffer);
325+
final String actualRequestBody = buffer.readUtf8();
326+
assertEquals(expectedBody, actualRequestBody);
327+
}
291328
}

0 commit comments

Comments
 (0)