Skip to content

Commit d391a88

Browse files
sobychackospring-builds
authored andcommitted
GH-3581: Address NPE in AbstractKafkaHeaderMapper
Fixes: #3581 #3581 - Optimize headerValueToAddIn method by adding better null checks - Add unit test to verify # Conflicts: # spring-kafka/src/main/java/org/springframework/kafka/support/AbstractKafkaHeaderMapper.java (cherry picked from commit cb8740d)
1 parent 88aaf5f commit d391a88

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

spring-kafka/src/main/java/org/springframework/kafka/support/AbstractKafkaHeaderMapper.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
*
4444
* @author Gary Russell
4545
* @author Artem Bilan
46+
* @author Soby Chacko
4647
*
4748
* @since 2.1.3
4849
*
@@ -267,11 +268,11 @@ else if (value instanceof String) {
267268
* @return the value to add.
268269
*/
269270
protected Object headerValueToAddIn(Header header) {
270-
Object mapped = mapRawIn(header.key(), header.value());
271-
if (mapped == null) {
272-
mapped = header.value();
271+
if (header == null || header.value() == null) {
272+
return null;
273273
}
274-
return mapped;
274+
String mapped = mapRawIn(header.key(), header.value());
275+
return mapped != null ? mapped : header.value();
275276
}
276277

277278
@Nullable

spring-kafka/src/test/java/org/springframework/kafka/support/DefaultKafkaHeaderMapperTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646

4747
import static org.assertj.core.api.Assertions.assertThat;
4848
import static org.assertj.core.api.Assertions.entry;
49+
import static org.mockito.BDDMockito.given;
50+
import static org.mockito.Mockito.mock;
51+
import static org.mockito.Mockito.never;
52+
import static org.mockito.Mockito.verify;
4953

5054
/**
5155
* @author Gary Russell
@@ -358,6 +362,20 @@ void deserializationExceptionHeadersAreMappedAsNonByteArray() {
358362
assertThat(headers.lastHeader(SerializationUtils.VALUE_DESERIALIZER_EXCEPTION_HEADER)).isNull();
359363
}
360364

365+
@Test
366+
void ensureNullHeaderValueHandledGraciously() {
367+
DefaultKafkaHeaderMapper mapper = new DefaultKafkaHeaderMapper();
368+
369+
Header mockHeader = mock(Header.class);
370+
given(mockHeader.value()).willReturn(null);
371+
372+
Object result = mapper.headerValueToAddIn(mockHeader);
373+
374+
assertThat(result).isNull();
375+
verify(mockHeader).value();
376+
verify(mockHeader, never()).key();
377+
}
378+
361379
public static final class Foo {
362380

363381
private String bar = "bar";

0 commit comments

Comments
 (0)