Skip to content

Commit cb8740d

Browse files
sobychackoartembilan
authored andcommitted
GH-3581: Address NPE in AbstractKafkaHeaderMapper
Fixes: #3581 #3581 - Optimize headerValueToAddIn method by adding better null checks - Add unit test to verify **Auto-cherry-pick to `3.1.x`** # Conflicts: # spring-kafka/src/main/java/org/springframework/kafka/support/AbstractKafkaHeaderMapper.java
1 parent dbaf9fd commit cb8740d

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
@@ -47,6 +47,10 @@
4747

4848
import static org.assertj.core.api.Assertions.assertThat;
4949
import static org.assertj.core.api.Assertions.entry;
50+
import static org.mockito.BDDMockito.given;
51+
import static org.mockito.Mockito.mock;
52+
import static org.mockito.Mockito.never;
53+
import static org.mockito.Mockito.verify;
5054

5155
/**
5256
* @author Gary Russell
@@ -360,6 +364,20 @@ void deserializationExceptionHeadersAreMappedAsNonByteArray() {
360364
assertThat(headers.lastHeader(SerializationUtils.VALUE_DESERIALIZER_EXCEPTION_HEADER)).isNull();
361365
}
362366

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

365383
private String bar = "bar";

0 commit comments

Comments
 (0)