Skip to content

Commit 6b65ab4

Browse files
authored
fix ClientOverrideConfiguration.Builder empty headers throwing NPE (#4726)
fix ClientOverrideConfiguration.Builder empty headers throwing NullPointerException
1 parent ac15f07 commit 6b65ab4

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,9 @@ public void setHeaders(Map<String, List<String>> additionalHttpHeaders) {
705705

706706
@Override
707707
public Map<String, List<String>> headers() {
708-
return CollectionUtils.unmodifiableMapOfLists(config.option(ADDITIONAL_HTTP_HEADERS));
708+
Map<String, List<String>> option = Validate
709+
.getOrDefault(config.option(ADDITIONAL_HTTP_HEADERS), Collections::emptyMap);
710+
return CollectionUtils.unmodifiableMapOfLists(option);
709711
}
710712

711713
@Override

core/sdk-core/src/test/java/software/amazon/awssdk/core/client/config/ClientOverrideConfigurationTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package software.amazon.awssdk.core.client.config;
1717

1818
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1920
import static org.junit.jupiter.api.Assertions.assertFalse;
2021
import static org.junit.jupiter.api.Assertions.assertTrue;
2122
import static org.junit.jupiter.api.Assertions.fail;
@@ -278,4 +279,17 @@ public void executionAttributes_listPreviouslyAdded_appendedToList() {
278279
ClientOverrideConfiguration overrideConfig = builder.build();
279280
assertThat(overrideConfig.executionAttributes().getAttribute(addedAttribute)).isEqualTo(addedValue);
280281
}
282+
283+
@Test
284+
void builder_headersWithEmptyAdditionalHeaders_shouldReturnEmptyMap_shouldNotThrowNullPointerException() {
285+
ClientOverrideConfiguration.Builder builder = ClientOverrideConfiguration.builder();
286+
Map<String, List<String>> headers = builder.headers();
287+
assertDoesNotThrow(() -> headers.isEmpty());
288+
assertThat(headers).isNotNull();
289+
Map<String, List<String>> newHeaders = new HashMap<>();
290+
newHeaders.put("my-key", Collections.singletonList("my-value"));
291+
assertDoesNotThrow(() -> newHeaders.putAll(headers));
292+
assertThat(newHeaders).containsEntry("my-key", Collections.singletonList("my-value"))
293+
.hasSize(1);
294+
}
281295
}

utils/src/main/java/software/amazon/awssdk/utils/UnmodifiableMapOfLists.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class UnmodifiableMapOfLists<T, U> implements Map<T, List<U>>, Serializable {
4040
private final Map<T, List<U>> delegate;
4141

4242
UnmodifiableMapOfLists(Map<T, List<U>> delegate) {
43-
this.delegate = delegate;
43+
this.delegate = Validate.paramNotNull(delegate, "delegate");
4444
}
4545

4646
@Override

0 commit comments

Comments
 (0)