GH-3581: Address NPE in AbstractKafkaHeaderMapper
Fixes: #3581 https://github.com/spring-projects/spring-kafka/issues/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
This commit is contained in:
@@ -43,6 +43,7 @@ import org.springframework.util.PatternMatchUtils;
|
||||
*
|
||||
* @author Gary Russell
|
||||
* @author Artem Bilan
|
||||
* @author Soby Chacko
|
||||
*
|
||||
* @since 2.1.3
|
||||
*
|
||||
@@ -267,11 +268,11 @@ public abstract class AbstractKafkaHeaderMapper implements KafkaHeaderMapper {
|
||||
* @return the value to add.
|
||||
*/
|
||||
protected Object headerValueToAddIn(Header header) {
|
||||
Object mapped = mapRawIn(header.key(), header.value());
|
||||
if (mapped == null) {
|
||||
mapped = header.value();
|
||||
if (header == null || header.value() == null) {
|
||||
return null;
|
||||
}
|
||||
return mapped;
|
||||
String mapped = mapRawIn(header.key(), header.value());
|
||||
return mapped != null ? mapped : header.value();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -47,6 +47,10 @@ import org.springframework.util.MimeTypeUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.entry;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
/**
|
||||
* @author Gary Russell
|
||||
@@ -360,6 +364,20 @@ public class DefaultKafkaHeaderMapperTests {
|
||||
assertThat(headers.lastHeader(SerializationUtils.VALUE_DESERIALIZER_EXCEPTION_HEADER)).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void ensureNullHeaderValueHandledGraciously() {
|
||||
DefaultKafkaHeaderMapper mapper = new DefaultKafkaHeaderMapper();
|
||||
|
||||
Header mockHeader = mock(Header.class);
|
||||
given(mockHeader.value()).willReturn(null);
|
||||
|
||||
Object result = mapper.headerValueToAddIn(mockHeader);
|
||||
|
||||
assertThat(result).isNull();
|
||||
verify(mockHeader).value();
|
||||
verify(mockHeader, never()).key();
|
||||
}
|
||||
|
||||
public static final class Foo {
|
||||
|
||||
private String bar = "bar";
|
||||
|
||||
Reference in New Issue
Block a user