diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/PolicyTags.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/PolicyTags.java index a78fa92fb..a66be88e1 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/PolicyTags.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/PolicyTags.java @@ -60,6 +60,10 @@ com.google.api.services.bigquery.model.TableFieldSchema.PolicyTags toPb() { static PolicyTags fromPb( com.google.api.services.bigquery.model.TableFieldSchema.PolicyTags tagPb) { - return newBuilder().setNames(tagPb.getNames()).build(); + // Treat a PolicyTag message without a Names subfield as invalid. + if (tagPb.getNames() != null) { + return newBuilder().setNames(tagPb.getNames()).build(); + } + return null; } } diff --git a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/PolicyTagsTest.java b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/PolicyTagsTest.java index 2136b2dab..f23cb36c2 100644 --- a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/PolicyTagsTest.java +++ b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/PolicyTagsTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNull; import com.google.common.collect.ImmutableList; import java.util.List; @@ -46,6 +47,13 @@ public void testBuilder() { assertNotEquals(POLICY_TAGS, POLICIES); } + @Test + public void testWithoutNames() { + com.google.api.services.bigquery.model.TableFieldSchema.PolicyTags PARTIALTAG = + new com.google.api.services.bigquery.model.TableFieldSchema.PolicyTags(); + assertNull(PolicyTags.fromPb(PARTIALTAG)); + } + @Test public void testFromAndPb() { assertEquals(POLICY_TAGS, PolicyTags.fromPb(POLICY_TAGS.toPb()));