Skip to content

Commit e872cb3

Browse files
author
Caitlin Bales (MSFT)
authored
Merge pull request #54 from microsoftgraph/empty-post-body-bugfix
Set empty body on POST instead of null
2 parents 9085378 + 07836b1 commit e872cb3

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ private <Result, Body, DeserializeType> Result sendRequestInternal(final IHttpRe
212212
final IStatefulResponseHandler<Result, DeserializeType> handler)
213213
throws ClientException {
214214
final int defaultBufferSize = 4096;
215-
final String contentLengthHeaderName = "Content-Length";
216215
final String binaryContentType = "application/octet-stream";
217216

218217
try {
@@ -234,7 +233,14 @@ private <Result, Body, DeserializeType> Result sendRequestInternal(final IHttpRe
234233
final byte[] bytesToWrite;
235234
connection.addRequestHeader("Accept", "*/*");
236235
if (serializable == null) {
237-
bytesToWrite = null;
236+
// Send an empty body through with a POST request
237+
// This ensures that the Content-Length header is properly set
238+
if (request.getHttpMethod() == HttpMethod.POST) {
239+
bytesToWrite = new byte[0];
240+
}
241+
else {
242+
bytesToWrite = null;
243+
}
238244
} else if (serializable instanceof byte[]) {
239245
logger.logDebug("Sending byte[] as request body");
240246
bytesToWrite = (byte[]) serializable;

src/test/java/com/microsoft/graph/functional/OutlookTests.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.microsoft.graph.models.extensions.Message;
55
import com.microsoft.graph.models.extensions.Recipient;
66
import com.microsoft.graph.models.extensions.User;
7+
import com.microsoft.graph.options.QueryOption;
8+
import com.microsoft.graph.requests.extensions.IMessageCollectionPage;
79
import com.microsoft.graph.requests.extensions.IUserCollectionPage;
810

911
import org.junit.Test;
@@ -18,7 +20,6 @@
1820

1921
import javax.xml.datatype.DatatypeFactory;
2022
import javax.xml.datatype.Duration;
21-
import java.lang.reflect.Array;
2223

2324
import java.util.ArrayList;
2425

@@ -72,4 +73,36 @@ public void testGetFindMeetingTimes() {
7273
}
7374

7475
}
76+
77+
@Test
78+
public void testSendDraft() {
79+
TestBase testBase = new TestBase();
80+
81+
//Attempt to identify the sent message via randomly generated subject
82+
String draftSubject = "Draft Test Message " + Double.toString(Math.random()*1000);
83+
84+
User me = testBase.graphClient.me().buildRequest().get();
85+
Recipient r = new Recipient();
86+
EmailAddress address = new EmailAddress();
87+
address.address = me.mail;
88+
r.emailAddress = address;
89+
Message message = new Message();
90+
message.subject = draftSubject;
91+
ArrayList<Recipient> recipients = new ArrayList<Recipient>();
92+
recipients.add(r);
93+
message.toRecipients = recipients;
94+
message.isDraft = true;
95+
96+
//Save the message as a draft
97+
Message newMessage = testBase.graphClient.me().messages().buildRequest().post(message);
98+
//Send the drafted message
99+
testBase.graphClient.me().mailFolders("Drafts").messages(newMessage.id).send().buildRequest().post();
100+
101+
java.util.List<QueryOption> options = new ArrayList<QueryOption>();
102+
QueryOption o = new QueryOption("$filter", "subject eq '" + draftSubject + "'");
103+
options.add(o);
104+
//Check that the sent message exists on the server
105+
IMessageCollectionPage mcp = testBase.graphClient.me().messages().buildRequest(options).get();
106+
assertFalse(mcp.getCurrentPage().isEmpty());
107+
}
75108
}

0 commit comments

Comments
 (0)