Skip to content

Commit a401657

Browse files
authored
Merge pull request #1501 from microsoftgraph/dev
V3.1.2 release
2 parents 9ab7cb2 + 3400523 commit a401657

File tree

6 files changed

+82
-13
lines changed

6 files changed

+82
-13
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
### Changed
1313

14+
## [3.1.2] - 2024-02-12
15+
16+
### Changed
17+
18+
- Fixes bug where 'Authorization' header was being added leading to long delays in writing BatchRequests. [#1483](https://github.com/microsoftgraph/msgraph-sdk-java-core/issues/1483)
19+
1420
## [3.1.1] - 2024-02-09
1521

1622
### Changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ mavenGroupId = com.microsoft.graph
2525
mavenArtifactId = microsoft-graph-core
2626
mavenMajorVersion = 3
2727
mavenMinorVersion = 1
28-
mavenPatchVersion = 1
28+
mavenPatchVersion = 2
2929
mavenArtifactSuffix =
3030

3131
#These values are used to run functional tests

gradle/dependencies.gradle

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ dependencies {
44
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.2'
55
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.2'
66
testImplementation 'org.mockito:mockito-inline:5.2.0'
7-
testImplementation 'io.opentelemetry:opentelemetry-api:1.34.1'
8-
testImplementation 'io.opentelemetry:opentelemetry-context:1.34.1'
7+
testImplementation 'io.opentelemetry:opentelemetry-api:1.35.0'
8+
testImplementation 'io.opentelemetry:opentelemetry-context:1.35.0'
99
testImplementation 'io.opentelemetry.semconv:opentelemetry-semconv:1.23.1-alpha'
10-
testImplementation 'io.github.std-uritemplate:std-uritemplate:0.0.50'
10+
testImplementation 'io.github.std-uritemplate:std-uritemplate:0.0.52'
1111

1212
implementation 'com.google.code.gson:gson:2.10.1'
1313

@@ -16,11 +16,11 @@ dependencies {
1616
api 'com.squareup.okhttp3:okhttp:4.12.0'
1717
api 'com.azure:azure-core:1.46.0'
1818

19-
api 'com.microsoft.kiota:microsoft-kiota-abstractions:1.0.0'
20-
implementation 'com.microsoft.kiota:microsoft-kiota-authentication-azure:1.0.0'
21-
implementation 'com.microsoft.kiota:microsoft-kiota-http-okHttp:1.0.0'
22-
implementation 'com.microsoft.kiota:microsoft-kiota-serialization-json:1.0.0'
23-
implementation 'com.microsoft.kiota:microsoft-kiota-serialization-text:1.0.0'
24-
implementation 'com.microsoft.kiota:microsoft-kiota-serialization-form:1.0.0'
25-
implementation 'com.microsoft.kiota:microsoft-kiota-serialization-multipart:1.0.0'
19+
api 'com.microsoft.kiota:microsoft-kiota-abstractions:1.0.1'
20+
implementation 'com.microsoft.kiota:microsoft-kiota-authentication-azure:1.0.1'
21+
implementation 'com.microsoft.kiota:microsoft-kiota-http-okHttp:1.0.1'
22+
implementation 'com.microsoft.kiota:microsoft-kiota-serialization-json:1.0.1'
23+
implementation 'com.microsoft.kiota:microsoft-kiota-serialization-text:1.0.1'
24+
implementation 'com.microsoft.kiota:microsoft-kiota-serialization-form:1.0.1'
25+
implementation 'com.microsoft.kiota:microsoft-kiota-serialization-multipart:1.0.1'
2626
}

src/main/java/com/microsoft/graph/core/CoreConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ private CoreConstants() {}
1414
private static class VersionValues {
1515
private static final int MAJOR = 3;
1616
private static final int MINOR = 1;
17-
private static final int PATCH = 0;
17+
private static final int PATCH = 2;
1818
}
1919

2020
/**

src/main/java/com/microsoft/graph/core/content/BatchRequestContent.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ public InputStream getBatchRequestContent() throws IOException {
178178
return in;
179179
}
180180
}
181+
private static final String AUTHORIZATION_HEADER_KEY = "authorization";
181182
private void writeBatchRequestStep(BatchRequestStep requestStep, JsonWriter writer) throws IOException {
182183
Request request = requestStep.getRequest();
183184
writer.beginObject();
@@ -208,10 +209,13 @@ private void writeBatchRequestStep(BatchRequestStep requestStep, JsonWriter writ
208209
writer.value(rawBodyContent);
209210
}
210211
}
212+
//Remove the header if it is some version of 'authorization'
213+
//RemoveAll utilizes ignoreCase natively
214+
headers = headers.newBuilder().removeAll(AUTHORIZATION_HEADER_KEY).build();
211215
if(headers.size() != 0 || requestBody != null) {
212216
writer.name(CoreConstants.BatchRequest.HEADERS);
213217
writer.beginObject();
214-
for(int i = 0; i < headers.size(); i++) {
218+
for (int i = 0; i < headers.size(); i++) {
215219
writer.name(headers.name(i)).value(headers.value(i));
216220
}
217221
writer.endObject();

src/test/java/com/microsoft/graph/core/content/BatchRequestContentTest.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import com.microsoft.kiota.RequestInformation;
1010
import com.microsoft.kiota.authentication.AnonymousAuthenticationProvider;
1111

12+
import com.microsoft.kiota.authentication.AuthenticationProvider;
13+
import com.microsoft.kiota.http.OkHttpRequestAdapter;
1214
import com.microsoft.kiota.http.middleware.UrlReplaceHandler;
1315
import okhttp3.*;
1416
import org.junit.jupiter.api.Assertions;
@@ -25,6 +27,7 @@
2527

2628
import static com.microsoft.graph.core.CoreConstants.ReplacementConstants.USERS_ENDPOINT_WITH_REPLACE_TOKEN;
2729
import static org.junit.jupiter.api.Assertions.*;
30+
import static org.mockito.Mockito.mock;
2831

2932
class BatchRequestContentTest {
3033
static final String requestUrl = "https://graph.microsoft.com/v1.0"+USERS_ENDPOINT_WITH_REPLACE_TOKEN;
@@ -234,6 +237,61 @@ void BatchRequestContent_GetBatchRequestContentFromStepDoesNotModifyDateTimes()
234237
assertEquals(expectedJson, requestContentString);
235238
}
236239
@Test
240+
void BatchRequestContent_DoNotAddAuthorizationHeader() throws Exception {
241+
OkHttpRequestAdapter adapter = new OkHttpRequestAdapter(mock(AuthenticationProvider.class));
242+
243+
String expectedJson = "{\n" +
244+
" \"requests\": [\n" +
245+
" {\n" +
246+
" \"id\": \"1\",\n" +
247+
" \"url\": \"/me\",\n" +
248+
" \"method\": \"GET\",\n" +
249+
" \"headers\": {\n" +
250+
" \"accept\": \"application/json\"\n" +
251+
" }\n" +
252+
" },\n" +
253+
" {\n" +
254+
" \"id\": \"2\",\n" +
255+
" \"url\": \"/me\",\n" +
256+
" \"method\": \"GET\"\n" +
257+
" }\n" +
258+
" ]\n" +
259+
"}";
260+
//The following string is the same size as a token
261+
String longBearerString = "bbcbbbcbccbbabbacbccccbccabbcacacaaabccbccbbbbaabbabcccccbcbcacbbccbcbcaaacaacccacccbabacccabbccbccacccabcbbbbbacaacccabaaacaabcbacbaabcacabcbaaaccaccbbaaaabbbabbcaabbacccccaabbcabbbbbbbaaababaaabbbbcbbbcacbaaccaccabbcbabbabacbcccacbaccacaacaaacbacbaaaacbcbbacbcaaaaabcababbbcaabaaaabaaccbaccaababcbccbbacbaaabcbcbcbaaabcccabcacbbcbbabcccaccbacaaccaaaabcaacaccababbcbcabbccbaaaaaacccbcbccbaaccabbacbaaaacaccabcbbbcaabccccbbabbccaaaccbbbabbabcbcabcbccabbaabaacaaabbacaaccbcabaaaabcaabbabccabbcabcabbbaaaacccbcbcbbaacbbbbbcbbabcbabcbbcbbbaacccaababaccbaabcccccabbcabcababacbcaacbbaabaaacaabbacabcbcabcaabcccccacbaaacccbcabacbcbbbcccaaabacccaabcbcaababaabbacacabcbccacbbcacbbcaaccbbbcccbaaaacbcacabbcaaaacbcaacaccccbbaaabcccaacbabbbcbbccbacabccabaabacbbbbbcbaaaaaccabcbccabcccbcccabababbbbcbbcbbcbcabaabaabccbabcbbbabaaacaaaabcbcabaccaaaaacbaaabcbaccbaccbabacbcabbcbcbbaabbbbccaacccaabacacbabbcacabcbaccbcacbccaabcbbacbacbacbbaaccaaaaccacbcababccccccbbcbacacaaabaaaccbaabaacccbaaabcbcaabaaaaabcabacbabcbbccccbacbaabccaaabcccbbacbbacacaccabbcaacbbbbcbcbbcaabaacbbbcbbcbaaacccbacbaabacacbbabcaaaacaabacbaacaaaabbcacbacbcccacbcabcccacacaaccbbbcaacabcccaaacbabaaccbcbaacacbacaababcabcbccabcabcccaacabacabccaacbbcabbcaacbccaababacccaccabacbbbaabaccbcabcaabbcccacccbcbcabbccabbabaaaccacccbcbacabcaabcaccbbcbaaacbaabbbbcbccbbcccaababababaabacccbbbcabbaaacbcaaabccbbbccabbbcccbcacacaaabbabcacbacaacbbbcbbbbbccabbbabcabbcbacccaaabaaacbaabbacabbabcbcbcacbbaabbabcbcaacbabbcccbabaaccabbacbcaaacabbbbcaacbccbbbbacbcabbbaabcacaaabaabbaaccabbcabcabbacaaaacacabbabccacbbabbbbcabbaaccabcccaabbaaaacaabcbacabbaacaccbbbbaaaaacbcbacbbaaaabbabcaacaaacbbaabcccbbcbaacabbbbcaccaaaabcacbcbaaabbbcabcabcbbbbacbaccaacbccaacbbcaccaaaaacbabbbcbcbacbacbaccaacbcbcbbcaaaabaaabaabccaaaabbcabaaabcbcccbbcbaacacbbacacbabbcbaccabacbabcbcaabbbaabccccccaaccbcbccccbbbbcabaaacbbbaacbbaccaabcbcaacaacaacacaababcccbacbbccccbcacbcbcaacaaaacccccccaccaababaacbaabbcbbbccaacbabbcbcaaabbccacbbaabbbbcbbccbcccbbcacabaaacbacacbcaaabcbccacacccbbaacbacbbcbabbcbbbbcaccbaaccbcbcaabcababcbbbcccbcbaababcacbacbbbacacacabbccabbbaaaaacaccbbccbccbabaababcbbccabcaaacaccacabbaabacacabaccabacbacabbccbabaccbabcccbbcbbbaaabbccabbcbbbacacbbbabbcbbacbcabacaccabbbcbabbcbcacbcbbabbbbcabcbbabbbcaaccbaaaaccbababbbaabcbbbaacabbbbcabcabbcabbacabbccccaabaaaaabbcbabacbacbabcabcccabbbccbbcccaacacaabbcbabcbabaaaababbbacabaacbabbabcbbbcbccbacbcbccbbbccccbacaccbaccaaabbaacbbaaabbbcaccbabbcccbbbbccacbbaaacabbbbaabbabcccabcbcbbccccbacccabbbaaabcacccaabbabaccccbbbcccccaacbbbccbcabbbcccababbbcacccccccabccbbcaabccbbbaaccabbcaabcacabbcbbabcccaccccaaacbbbccaaabcbacabbbacbaccaabcbabababbcbcacaabcaabcbcbbcaaacaacabaaababbbacaccababaccbacacacacacbcccbabcbabcabccbaabcccababcbacbccccccacacbbacccccbaccbacaacbacacbcccccaaaacbaaaaccbacbbcacccbbbaabaaaccaccbcabcccccacaaaabcbabbacbbbcaaababcbacccbabcbaaabbcbaaacaabbcaaccaaccbacbaaaaaaabbaacaaabacbbcaacaacabbcabaccaaacbaccccbcccbcbcaaacbacaacccaccaacabacaaaabbbbbbbcacacbabccacacabbbababbbbcbabaaacaaacbacbcabbccacaacccbbbcbbacaccbbbaaabababbcbaacbcabcabaaccbcaaacbbbaacacccbbcaabcbacabbccbcbbbabbbaabacacaccaabbcbbaccbaaabcabbababaccca";
262+
RequestInformation requestInfo = new RequestInformation();
263+
requestInfo.urlTemplate = "{+baseurl}/users/{user%2Did}{?%24expand,%24select}";
264+
HashMap<String, Object> pathParameters = new HashMap<>();
265+
pathParameters.put("baseurl", "https://graph.microsoft.com/v1.0");
266+
pathParameters.put("user%2Did", "TokenToReplace");
267+
requestInfo.pathParameters = pathParameters;
268+
requestInfo.httpMethod = HttpMethod.GET;
269+
// Only one header should be present in the headers object of the Json Body
270+
requestInfo.headers.add("accept", "application/json");
271+
requestInfo.headers.add("authorization", longBearerString);
272+
RequestInformation requestInfo2 = new RequestInformation();
273+
requestInfo2.urlTemplate = "{+baseurl}/users/{user%2Did}{?%24expand,%24select}";
274+
HashMap<String, Object> pathParameters2 = new HashMap<>();
275+
pathParameters2.put("baseurl", "https://graph.microsoft.com/v1.0");
276+
pathParameters2.put("user%2Did", "TokenToReplace");
277+
requestInfo2.pathParameters = pathParameters2;
278+
requestInfo2.httpMethod = HttpMethod.GET;
279+
// No headers object should be present in the Json body
280+
requestInfo2.headers.add("AuthoriZation", longBearerString); // Test with strange casing
281+
282+
BatchRequestContent batchRequestContent = new BatchRequestContent(client);
283+
batchRequestContent.addBatchRequestStep(new BatchRequestStep("1",adapter.convertToNativeRequest(requestInfo)));
284+
batchRequestContent.addBatchRequestStep(new BatchRequestStep("2",adapter.convertToNativeRequest(requestInfo2)));
285+
286+
InputStream stream = batchRequestContent.getBatchRequestContent();
287+
String requestContentString = readInputStream(stream);
288+
requestContentString = requestContentString.replace("\n", "").replaceAll("\\s", "");
289+
expectedJson = expectedJson.replace("\n", "").replaceAll("\\s", "");
290+
291+
assertNotNull(requestContentString);
292+
assertEquals(expectedJson, requestContentString);
293+
}
294+
@Test
237295
void BatchRequestContent_AddBatchRequestStepWithHttpRequestMessage() {
238296
BatchRequestContent batchRequestContent = new BatchRequestContent(client);
239297
assertTrue(batchRequestContent.getBatchRequestSteps().isEmpty());
@@ -248,6 +306,7 @@ void BatchRequestContent_AddBatchRequestStepWithHttpRequestMessage() {
248306
Assertions.assertEquals(batchRequestContent.getBatchRequestSteps().get(requestId).getRequest().url().uri().toString(), request.url().uri().toString());
249307
Assertions.assertEquals(batchRequestContent.getBatchRequestSteps().get(requestId).getRequest().method(), request.method());
250308
}
309+
251310
@Test
252311
void BatchRequestContent_AddBatchRequestStepWithHttpRequestMessageToBatchRequestContentWithMaxSteps() {
253312
BatchRequestContent batchRequestContent = new BatchRequestContent(client);

0 commit comments

Comments
 (0)