GoogleCloudPlatform / GoogleCloudPlatform/functions-framework-java

Incompatible conversion from Pub/Sub emulator to CloudEvent for `CloudEventsFunction`

Aperta
#375 1 commento 1 reazione 1 assegnatario Rivendicata da @taeold Vedi su GitHub
enhancement
Lingua principale
Java
Stelle
154
Fork
63
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

In [invoker/core/src/main/java/com/google/cloud/functions/invoker/Event.java](https://github.com/GoogleCloudPlatform/functions-framework-java/blob/1c4a01470cc4ee7b3de3c3d7ae4af24e47eb2810/invoker/core/src/main/java/com/google/cloud/functions/invoker/Event.java), the conditional check for messages originating from the Pub/Sub emulator strips the `name` field, which is incompatible with this repository's [conversion from legacy events to CloudEvent](https://github.com/GoogleCloudPlatform/functions-framework-java/blob/1c4a01470cc4ee7b3de3c3d7ae4af24e47eb2810/invoker/core/src/main/java/com/google/cloud/functions/invoker/GcfEvents.java#L143), throwing an exception when calling `Resource.from` because `Resource.name` [is not nullable](https://github.com/GoogleCloudPlatform/functions-framework-java/blob/1c4a01470cc4ee7b3de3c3d7ae4af24e47eb2810/invoker/core/src/main/java/com/google/cloud/functions/invoker/CloudFunctionsContext.java#L97). This makes use of `CloudEventFunction` incompatible with a Pub/Sub emulator setup for local development.

Example stack trace:
```
2026-02-23 17:25:21 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Missing required properties: name
2026-02-23 17:25:21 at com.google.gson.Gson.fromJson(Gson.java:1381)
2026-02-23 17:25:21 at com.google.gson.Gson.fromJson(Gson.java:1259)
2026-02-23 17:25:21 at com.google.gson.Gson.fromJson(Gson.java:1169)
2026-02-23 17:25:21 at com.google.gson.Gson.fromJson(Gson.java:1106)
2026-02-23 17:25:21 at com.google.cloud.functions.invoker.CloudFunctionsContext$Resource.from(CloudFunctionsContext.java:109)
2026-02-23 17:25:21 at com.google.cloud.functions.invoker.GcfEvents$EventAdapter.convertToCloudEvent(GcfEvents.java:143)
2026-02-23 17:25:21 at com.google.cloud.functions.invoker.GcfEvents.convertToCloudEvent(GcfEvents.java:116)
2026-02-23 17:25:21 at
com.google.cloud.functions.invoker.BackgroundFunctionExecutor$CloudEventFunctionExecutor.serviceLegacyEvent(BackgroundFunctionExecutor.java:325)
2026-02-23 17:25:21 at
com.google.cloud.functions.invoker.BackgroundFunctionExecutor.lambda$serviceLegacyEvent$8(BackgroundFunctionExecutor.java:402)
2026-02-23 17:25:21 at com.google.cloud.functions.invoker.BackgroundFunctionExecutor.runWithContextClassLoader(BackgroundFunctionExecutor.java:409)
2026-02-23 17:25:21 at com.google.cloud.functions.invoker.BackgroundFunctionExecutor.serviceLegacyEvent(BackgroundFunctionExecutor.java:402)
2026-02-23 17:25:21 at com.google.cloud.functions.invoker.BackgroundFunctionExecutor.handle(BackgroundFunctionExecutor.java:345)
2026-02-23 17:25:21 at org.eclipse.jetty.server.handler.EagerContentHandler.onConditionsMet(EagerContentHandler.java:155)
2026-02-23 17:25:21 at org.eclipse.jetty.server.handler.ConditionalHandler.handle(ConditionalHandler.java:378)
2026-02-23 17:25:21 at org.eclipse.jetty.server.Handler$Wrapper.handle(Handler.java:794)
2026-02-23 17:25:21 at com.google.cloud.functions.invoker.runner.Invoker$NotFoundHandler.handle(Invoker.java:498)
2026-02-23 17:25:21 at org.eclipse.jetty.server.Server.handle(Server.java:195)
2026-02-23 17:25:21 at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:680)
2026-02-23 17:25:21 at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:411)
2026-02-23 17:25:21 at org.eclipse.jetty.server.internal.HttpConnection$FillableCallback.succeeded(HttpConnection.java:1809)
2026-02-23 17:25:21 at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
2026-02-23 17:25:21 at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:54)
2026-02-23 17:25:21 at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:492)
2026-02-23 17:25:21 at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.epcRunTask(AdaptiveExecutionStrategy.java:428)
2026-02-23 17:25:21 at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:401)
2026-02-23 17:25:21 at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:255)
2026-02-23 17:25:21 at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204)
2026-02-23 17:25:21 at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:312)
2026-02-23 17:25:21 at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009)
2026-02-23 17:25:21 at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1239)
2026-02-23 17:25:21 at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194)
2026-02-23 17:25:21 at java.base/java.lang.Thread.run(Unknown Source)
2026-02-23 17:25:21 Caused by: java.lang.IllegalStateException: Missing required properties: name
2026-02-23 17:25:21 at
com.google.cloud.functions.invoker.$AutoValue_CloudFunctionsContext_Resource$Builder.build($AutoValue_CloudFunctionsContext_Resource.java:108)
2026-02-23 17:25:21 at
com.google.cloud.functions.invoker.AutoValue_CloudFunctionsContext_Resource$GsonTypeAdapter.read(AutoValue_CloudFunctionsContext_Resource.java:118)
2026-02-23 17:25:21 at
com.google.cloud.functions.invoker.AutoValue_CloudFunctionsContext_Resource$GsonTypeAdapter.read(AutoValue_CloudFunctionsContext_Resource.java:25)
2026-02-23 17:25:21 at com.google.gson.Gson.fromJson(Gson.java:1358)
2026-02-23 17:25:21 ... 31 more
2026-02-23 17:25:21
```

This issue does not affect `BackgroundFunction` as `Resource.from` is not called when servicing legacy events without conversion.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.