You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by si...@apache.org on 2021/05/05 23:06:45 UTC
[pulsar] branch master updated: [CLIENT] fixed NPE in
GenericJsonRecord (#10482)
This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new ff076e3 [CLIENT] fixed NPE in GenericJsonRecord (#10482)
ff076e3 is described below
commit ff076e3830b1dcd2d2a56c23681e8129c4fcddd2
Author: Abhilash Mandaliya <ab...@gmail.com>
AuthorDate: Thu May 6 04:35:53 2021 +0530
[CLIENT] fixed NPE in GenericJsonRecord (#10482)
Fixes #10472
### Motivation
GenericJsonRecord should not error out if the non-existent field is queried.
### Modifications
Added a null check and returning null if the field does not exist.
### Verifying this change
Extended one of the tests for GenericJsonRecord.
---
.../main/java/org/apache/pulsar/client/api/schema/GenericRecord.java | 2 +-
.../apache/pulsar/client/impl/schema/generic/GenericJsonRecord.java | 3 +++
.../java/org/apache/pulsar/client/impl/schema/JSONSchemaTest.java | 5 +++++
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/schema/GenericRecord.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/schema/GenericRecord.java
index 23665eb..f83c01f 100644
--- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/schema/GenericRecord.java
+++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/schema/GenericRecord.java
@@ -58,7 +58,7 @@ public interface GenericRecord extends GenericObject {
* Retrieve the value of the provided <tt>fieldName</tt>.
*
* @param fieldName the field name
- * @return the value object
+ * @return the value object, or null if field doesn't exist
*/
Object getField(String fieldName);
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 2395439..8564703 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
@@ -60,6 +60,9 @@ public class GenericJsonRecord extends VersionedGenericRecord {
@Override
public Object getField(String fieldName) {
JsonNode fn = jn.get(fieldName);
+ if (fn == null) {
+ return null;
+ }
if (fn.isContainerNode()) {
AtomicInteger idx = new AtomicInteger(0);
List<Field> fields = Lists.newArrayList(fn.fieldNames())
diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/JSONSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/JSONSchemaTest.java
index b8e8e0d..0dd11ad 100644
--- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/JSONSchemaTest.java
+++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/JSONSchemaTest.java
@@ -47,9 +47,11 @@ import org.apache.pulsar.client.impl.schema.SchemaTestUtils.DerivedFoo;
import org.apache.pulsar.client.impl.schema.SchemaTestUtils.Foo;
import org.apache.pulsar.client.impl.schema.SchemaTestUtils.NestedBar;
import org.apache.pulsar.client.impl.schema.SchemaTestUtils.NestedBarList;
+import org.apache.pulsar.client.impl.schema.generic.GenericJsonRecord;
import org.apache.pulsar.client.impl.schema.generic.GenericSchemaImpl;
import org.apache.pulsar.common.schema.SchemaInfo;
import org.apache.pulsar.common.schema.SchemaType;
+import org.assertj.core.api.Assertions;
import org.json.JSONException;
import org.skyscreamer.jsonassert.JSONAssert;
import org.testng.Assert;
@@ -448,5 +450,8 @@ public class JSONSchemaTest {
assertEquals("USA", seller3Record.getField("state"));
assertEquals("oakstreet", seller3Record.getField("street"));
assertEquals(9999, seller3Record.getField("zipCode"));
+
+ assertTrue(pc3Record instanceof GenericJsonRecord);
+ Assertions.assertThatCode(() -> pc3Record.getField("I_DO_NOT_EXIST")).doesNotThrowAnyException();
}
}