This is an automated email from the ASF dual-hosted git repository. penghui pushed a commit to branch branch-2.7 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit e9e415fe7cd1dcb0c00ff29eb0de5a9413041d06 Author: Enrico Olivelli <[email protected]> AuthorDate: Thu Dec 10 06:28:51 2020 +0100 Issue 8882: GenericJsonReader converts the null value to string "null" (#8883) Describe the bug It looks like GenericJsonReader is not handling correctly null values Expected behavior The null value is not converted to a string, but it is still a null value Changes - Handle correctly null values - add test case Additional context The problem affects Pulsar Functions/Pulsar IO Fixes #8882 (cherry picked from commit d9f3710006749c73471a80e1150a2d2d61c154f8) --- .../client/impl/schema/generic/GenericJsonRecord.java | 2 ++ .../client/impl/schema/generic/GenericJsonRecordTest.java | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecord.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecord.java index 708b10e..85d3e8e 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecord.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecord.java @@ -90,6 +90,8 @@ public class GenericJsonRecord extends VersionedGenericRecord { } catch (IOException e) { return fn.asText(); } + } else if (fn.isNull()) { + return null; } else { return fn.asText(); } diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecordTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecordTest.java index 0de3e3e..6486a24 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecordTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecordTest.java @@ -25,13 +25,26 @@ import org.testng.annotations.Test; import java.util.Collections; import static java.nio.charset.StandardCharsets.UTF_8; +import org.apache.pulsar.client.api.schema.Field; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; public class GenericJsonRecordTest { @Test + public void decodeNullValue() throws Exception{ + byte[] json = "{\"somefield\":null}".getBytes(UTF_8); + GenericJsonRecord record + = new GenericJsonReader(Collections.singletonList(new Field("somefield", 0))) + .read(json, 0, json.length); + assertTrue(record.getJsonNode().get("somefield").isNull()); + assertNull(record.getField("somefield")); + } + + + @Test public void decodeLongField() throws Exception{ String jsonStr = "{\"timestamp\":1585204833128, \"count\":2, \"value\": 1.1, \"on\":true}"; byte[] jsonStrBytes = jsonStr.getBytes();
