Skip to content

Commit fad8c58

Browse files
garyrussellartembilan
authored andcommitted
GH-1294: Fix mapping empty String header values
Fixes #1294
1 parent 0e039f1 commit fad8c58

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ private void populateJsonValueHeader(Header header, String requestedType, Map<St
293293
catch (Exception e) {
294294
logger.error(e, () -> "Could not load class for header: " + header.key());
295295
}
296-
if (String.class.equals(type) && header.value().length > 0 && header.value()[0] != '"') {
296+
if (String.class.equals(type) && (header.value().length == 0 || header.value()[0] != '"')) {
297297
headers.put(header.key(), new String(header.value(), getCharset()));
298298
}
299299
else {

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,34 +181,42 @@ public void testJsonStringConvert() {
181181
Map<String, Object> headersMap = new HashMap<>();
182182
headersMap.put("thisOnesAString", "foo");
183183
headersMap.put("thisOnesBytes", "bar");
184+
headersMap.put("thisOnesEmpty", "");
184185
headersMap.put("alwaysRaw", "baz".getBytes());
185186
MessageHeaders headers = new MessageHeaders(headersMap);
186187
Headers target = new RecordHeaders();
187188
mapper.fromHeaders(headers, target);
188189
assertThat(target).containsExactlyInAnyOrder(
189190
new RecordHeader(DefaultKafkaHeaderMapper.JSON_TYPES,
190-
"{\"thisOnesAString\":\"java.lang.String\"}".getBytes()),
191+
("{\"thisOnesEmpty\":\"java.lang.String\","
192+
+ "\"thisOnesAString\":\"java.lang.String\"}").getBytes()),
191193
new RecordHeader("thisOnesAString", "foo".getBytes()),
192194
new RecordHeader("alwaysRaw", "baz".getBytes()),
195+
new RecordHeader("thisOnesEmpty", "".getBytes()),
193196
new RecordHeader("thisOnesBytes", "bar".getBytes()));
194197
headersMap.clear();
195198
target.add(new RecordHeader(DefaultKafkaHeaderMapper.JSON_TYPES,
196-
("{\"thisOnesAString\":\"java.lang.String\","
199+
("{\"thisOnesEmpty\":\"java.lang.String\","
200+
+ "\"thisOnesAString\":\"java.lang.String\","
197201
+ "\"backwardCompatible\":\"java.lang.String\"}").getBytes()));
198202
target.add(new RecordHeader("backwardCompatible", "\"qux\"".getBytes()));
199203
mapper.toHeaders(target, headersMap);
200204
assertThat(headersMap).contains(
201205
entry("thisOnesAString", "foo"),
206+
entry("thisOnesEmpty", ""),
202207
entry("thisOnesBytes", "bar".getBytes()),
203208
entry("alwaysRaw", "baz".getBytes()),
204209
entry("backwardCompatible", "qux"));
210+
// Now with String encoding
205211
mapper.setEncodeStrings(true);
206212
target = new RecordHeaders();
207213
mapper.fromHeaders(headers, target);
208214
assertThat(target).containsExactlyInAnyOrder(
209215
new RecordHeader(DefaultKafkaHeaderMapper.JSON_TYPES,
210-
"{\"thisOnesAString\":\"java.lang.String\"}".getBytes()),
216+
("{\"thisOnesEmpty\":\"java.lang.String\","
217+
+ "\"thisOnesAString\":\"java.lang.String\"}").getBytes()),
211218
new RecordHeader("thisOnesAString", "\"foo\"".getBytes()),
219+
new RecordHeader("thisOnesEmpty", "\"\"".getBytes()),
212220
new RecordHeader("alwaysRaw", "baz".getBytes()),
213221
new RecordHeader("thisOnesBytes", "bar".getBytes()));
214222
}

0 commit comments

Comments
 (0)