Skip to content

Commit d90abfe

Browse files
committed
GH-4205: Allow serializing/deserializing null values in Kotlin
- Replaced byte[] with byte @nullable [] to be able to return and receive null values Signed-off-by: Trond Ziarkowski <[email protected]>
1 parent 28b92a7 commit d90abfe

File tree

4 files changed

+61
-6
lines changed

4 files changed

+61
-6
lines changed

spring-kafka/src/main/java/org/springframework/kafka/support/serializer/JacksonJsonDeserializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ private void doAddTrustedPackages(String... packages) {
566566
}
567567

568568
@Override
569-
public @Nullable T deserialize(String topic, Headers headers, byte[] data) {
569+
public @Nullable T deserialize(String topic, Headers headers, byte @Nullable [] data) {
570570
if (data == null) {
571571
return null;
572572
}
@@ -597,7 +597,7 @@ private void doAddTrustedPackages(String... packages) {
597597
}
598598

599599
@Override
600-
public @Nullable T deserialize(String topic, byte[] data) {
600+
public @Nullable T deserialize(String topic, byte @Nullable [] data) {
601601
if (data == null) {
602602
return null;
603603
}

spring-kafka/src/main/java/org/springframework/kafka/support/serializer/JacksonJsonSerializer.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,8 @@ protected static Map<String, Class<?>> createMappings(String mappings) {
202202
return mappingsMap;
203203
}
204204

205-
@SuppressWarnings("NullAway") // Dataflow analysis limitation
206205
@Override
207-
public byte[] serialize(String topic, Headers headers, @Nullable T data) {
206+
public byte @Nullable [] serialize(String topic, Headers headers, @Nullable T data) {
208207
if (data == null) {
209208
return null;
210209
}
@@ -214,9 +213,8 @@ public byte[] serialize(String topic, Headers headers, @Nullable T data) {
214213
return serialize(topic, data);
215214
}
216215

217-
@SuppressWarnings("NullAway") // Dataflow analysis limitation
218216
@Override
219-
public byte[] serialize(String topic, @Nullable T data) {
217+
public byte @Nullable [] serialize(String topic, @Nullable T data) {
220218
if (data == null) {
221219
return null;
222220
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.springframework.kafka.support.serializer
2+
3+
import org.junit.jupiter.api.Assertions.assertEquals
4+
import org.junit.jupiter.api.Test
5+
import org.junit.jupiter.api.assertNull
6+
import tools.jackson.core.type.TypeReference
7+
import kotlin.text.Charsets.UTF_8
8+
9+
class JacksonJsonDeserializerTests {
10+
private val targetType = object : TypeReference<DeserializedData>() {}
11+
private val deserializer = JacksonJsonDeserializer(targetType).ignoreTypeHeaders()
12+
13+
@Test
14+
fun `Expect deserializing a non-null value to work`() {
15+
val dataToDeserialize = """{"value":"test-data"}""".toByteArray(UTF_8)
16+
val deserializedData = deserializer.deserialize("topic", dataToDeserialize)
17+
18+
assertEquals(DeserializedData("test-data"), deserializedData)
19+
}
20+
21+
@Test
22+
fun `Expect deserializing a null value to work`() {
23+
val deserializedData = deserializer.deserialize("topic", null)
24+
assertNull(deserializedData)
25+
}
26+
27+
private data class DeserializedData(val value: String)
28+
29+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.springframework.kafka.support.serializer
2+
3+
import org.junit.jupiter.api.Assertions.assertEquals
4+
import org.junit.jupiter.api.Test
5+
import org.junit.jupiter.api.assertNull
6+
import tools.jackson.core.type.TypeReference
7+
import kotlin.text.Charsets.UTF_8
8+
9+
class JacksonJsonSerializerTests {
10+
private val targetType = object : TypeReference<DataToSerialize>() {}
11+
private val serializer = JacksonJsonSerializer(targetType).noTypeInfo()
12+
13+
@Test
14+
fun `Expect serializing a non-null value to work`() {
15+
val dataToSerialize = DataToSerialize("test-data")
16+
val bytes = serializer.serialize("topic", dataToSerialize)
17+
18+
assertEquals("""{"value":"test-data"}""", bytes?.toString(UTF_8))
19+
}
20+
21+
@Test
22+
fun `Expect serializing a null value to work`() {
23+
val bytes = serializer.serialize("topic", null)
24+
assertNull(bytes)
25+
}
26+
27+
private data class DataToSerialize(val value: String)
28+
}

0 commit comments

Comments
 (0)