Skip to content

Commit 57cc839

Browse files
committed
fix(eventarc): sets protojson to ignoreUnknownFields
1 parent 286dd44 commit 57cc839

File tree

6 files changed

+47
-10
lines changed

6 files changed

+47
-10
lines changed

eventarc/storage-handler/src/main/java/com/example/cloudrun/CloudEventController.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,20 @@ ResponseEntity<String> handleCloudEvent(@RequestBody CloudEvent cloudEvent)
4646

4747
String json = new String(cloudEvent.getData().toBytes());
4848
StorageObjectData.Builder builder = StorageObjectData.newBuilder();
49-
JsonFormat.parser().merge(json, builder);
49+
50+
// If you do not ignore unknown fields, then JsonFormat.Parser returns an
51+
// error when encountering a new or unknown field. Note that you might lose
52+
// some event data in the unmarshaling process by ignoring unknown fields.
53+
JsonFormat.Parser parser = JsonFormat.parser().ignoringUnknownFields();
54+
parser.merge(json, builder);
5055
StorageObjectData data = builder.build();
5156

5257
// Convert protobuf timestamp to java Instant
5358
Timestamp ts = data.getUpdated();
5459
Instant updated = Instant.ofEpochSecond(ts.getSeconds(), ts.getNanos());
5560
String msg =
5661
String.format(
57-
"Cloud Storage object changed: %s/%s modified at %s\n",
62+
"Cloud Storage object changed: %s/%s modified at %s%n",
5863
data.getBucket(), data.getName(), updated);
5964

6065
System.out.println(msg);

functions/v2/firebase/firestore-reactive/src/main/java/functions/FirebaseFirestoreReactive.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,15 @@ public void accept(CloudEvent event)
5959
return;
6060
}
6161

62-
DocumentEventData firestoreEventData = DocumentEventData
63-
.parseFrom(event.getData().toBytes());
62+
DocumentEventData.Builder builder = DocumentEventData.newBuilder();
63+
String json = new String(event.getData().toBytes());
64+
65+
// If you do not ignore unknown fields, then JsonFormat.Parser returns an
66+
// error when encountering a new or unknown field. Note that you might lose
67+
// some event data in the unmarshaling process by ignoring unknown fields.
68+
JsonFormat.Parser parser = JsonFormat.parser().ignoringUnknownFields();
69+
parser.merge(json, builder);
70+
DocumentEventData firestoreEventData = builder.build();
6471

6572
// Get the fields from the post-operation document snapshot
6673
// https://firebase.google.com/docs/firestore/reference/rest/v1/projects.databases.documents#Document

functions/v2/firebase/firestore/src/main/java/functions/FirebaseFirestore.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import com.google.cloud.functions.CloudEventsFunction;
2121
import com.google.events.cloud.firestore.v1.DocumentEventData;
2222
import com.google.protobuf.InvalidProtocolBufferException;
23+
import com.google.protobuf.util.JsonFormat;
24+
2325
import io.cloudevents.CloudEvent;
2426
import java.util.logging.Logger;
2527

@@ -28,16 +30,24 @@ public class FirebaseFirestore implements CloudEventsFunction {
2830

2931
@Override
3032
public void accept(CloudEvent event) throws InvalidProtocolBufferException {
31-
DocumentEventData firestorEventData = DocumentEventData.parseFrom(event.getData().toBytes());
33+
DocumentEventData.Builder builder = DocumentEventData.newBuilder();
34+
String json = new String(event.getData().toBytes());
35+
36+
// If you do not ignore unknown fields, then JsonFormat.Parser returns an
37+
// error when encountering a new or unknown field. Note that you might lose
38+
// some event data in the unmarshaling process by ignoring unknown fields.
39+
JsonFormat.Parser parser = JsonFormat.parser().ignoringUnknownFields();
40+
parser.merge(json, builder);
41+
DocumentEventData firestoreEventData = builder.build();
3242

3343
logger.info("Function triggered by event on: " + event.getSource());
3444
logger.info("Event type: " + event.getType());
3545

3646
logger.info("Old value:");
37-
logger.info(firestorEventData.getOldValue().toString());
47+
logger.info(firestoreEventData.getOldValue().toString());
3848

3949
logger.info("New value:");
40-
logger.info(firestorEventData.getValue().toString());
50+
logger.info(firestoreEventData.getValue().toString());
4151
}
4252
}
4353

functions/v2/hello-gcs/src/main/java/functions/HelloGcs.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,12 @@ public void accept(CloudEvent event) throws InvalidProtocolBufferException {
4040

4141
String cloudEventData = new String(event.getData().toBytes(), StandardCharsets.UTF_8);
4242
StorageObjectData.Builder builder = StorageObjectData.newBuilder();
43-
JsonFormat.parser().merge(cloudEventData, builder);
43+
44+
// If you do not ignore unknown fields, then JsonFormat.Parser returns an
45+
// error when encountering a new or unknown field. Note that you might lose
46+
// some event data in the unmarshaling process by ignoring unknown fields.
47+
JsonFormat.Parser parser = JsonFormat.parser().ignoringUnknownFields();
48+
parser.merge(cloudEventData, builder);
4449
StorageObjectData data = builder.build();
4550

4651
logger.info("Bucket: " + data.getBucket());

functions/v2/imagemagick/src/main/java/functions/ImageMagick.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,12 @@ private static StorageObjectData getEventData(CloudEvent event)
156156
// Extract Cloud Event data and convert to StorageObjectData
157157
String cloudEventData = new String(event.getData().toBytes(), StandardCharsets.UTF_8);
158158
StorageObjectData.Builder builder = StorageObjectData.newBuilder();
159-
JsonFormat.parser().merge(cloudEventData, builder);
159+
160+
// If you do not ignore unknown fields, then JsonFormat.Parser returns an
161+
// error when encountering a new or unknown field. Note that you might lose
162+
// some event data in the unmarshaling process by ignoring unknown fields.
163+
JsonFormat.Parser parser = JsonFormat.parser().ignoringUnknownFields();
164+
parser.merge(cloudEventData, builder);
160165
return builder.build();
161166
}
162167
// [START functions_imagemagick_setup]

functions/v2/ocr/ocr-process-image/src/main/java/functions/OcrProcessImage.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ public void accept(CloudEvent event) throws InvalidProtocolBufferException {
7171
// Unmarshal data from CloudEvent
7272
String cloudEventData = new String(event.getData().toBytes(), StandardCharsets.UTF_8);
7373
StorageObjectData.Builder builder = StorageObjectData.newBuilder();
74-
JsonFormat.parser().merge(cloudEventData, builder);
74+
75+
// If you do not ignore unknown fields, then JsonFormat.Parser returns an
76+
// error when encountering a new or unknown field. Note that you might lose
77+
// some event data in the unmarshaling process by ignoring unknown fields.
78+
JsonFormat.Parser parser = JsonFormat.parser().ignoringUnknownFields();
79+
parser.merge(cloudEventData, builder);
7580
StorageObjectData gcsEvent = builder.build();
7681

7782
String bucket = gcsEvent.getBucket();

0 commit comments

Comments
 (0)