From e47ac791765486f02f027d3c440645ef2a379ba9 Mon Sep 17 00:00:00 2001 From: Yiru Tang Date: Thu, 23 Dec 2021 08:40:35 -0800 Subject: [PATCH] fix: allow all fields to be null values (#1450) Fixes b/197450141 https://sfstory.googleplex.com/29256923 --- .../storage/v1/JsonToProtoMessage.java | 3 --- .../storage/v1/JsonToProtoMessageTest.java | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessage.java b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessage.java index 88b32d5a3c..6f5c0cf10b 100644 --- a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessage.java +++ b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessage.java @@ -154,9 +154,6 @@ private static DynamicMessage convertJsonToProtoMessageImpl( String.format( "JSONObject does not have the required field %s.%s.", jsonScope, missingFieldName)); } - if (topLevel && msg.getSerializedSize() == 0) { - throw new IllegalArgumentException("The created protobuf message is empty."); - } return msg; } diff --git a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessageTest.java b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessageTest.java index 14c2d3763b..7b5c6bcfad 100644 --- a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessageTest.java +++ b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessageTest.java @@ -1035,13 +1035,9 @@ public void testEmptyProtoMessage() throws Exception { JSONObject json = new JSONObject(); json.put("test_repeated", new JSONArray(new int[0])); - try { - DynamicMessage protoMsg = - JsonToProtoMessage.convertJsonToProtoMessage(RepeatedInt64.getDescriptor(), json); - Assert.fail("Should fail"); - } catch (IllegalArgumentException e) { - assertEquals("The created protobuf message is empty.", e.getMessage()); - } + DynamicMessage protoMsg = + JsonToProtoMessage.convertJsonToProtoMessage(RepeatedInt64.getDescriptor(), json); + assertEquals(protoMsg.getAllFields().size(), 0); } @Test @@ -1123,4 +1119,15 @@ public void testJsonNullValue() throws Exception { JsonToProtoMessage.convertJsonToProtoMessage(TestInt64.getDescriptor(), json); assertEquals(expectedProto, protoMsg); } + + @Test + public void testJsonAllFieldsNullValue() throws Exception { + TestInt64 expectedProto = TestInt64.newBuilder().build(); + JSONObject json = new JSONObject(); + json.put("long", JSONObject.NULL); + json.put("int", JSONObject.NULL); + DynamicMessage protoMsg = + JsonToProtoMessage.convertJsonToProtoMessage(TestInt64.getDescriptor(), json); + assertEquals(expectedProto, protoMsg); + } }