cadence-java-client icon indicating copy to clipboard operation
cadence-java-client copied to clipboard

ZonedDateTime as parameter type for WorkflowMethod

Open eratolekov opened this issue 4 years ago • 0 comments

Hi

Is it possible to send ZonedDateTime type to WorkflowMethod?

Right now workflow:

public interface HelloWorld {
        @WorkflowMethod
        void sayHello(String name, java.time.ZonedDateTime at);
}

breaks down with error message: Failed to invoke java.time.ZoneId() with no args

Error details from Cadence UI:

{
  "detailMessage": "when parsing:\"[\"Peter\",{\"dateTime\":{\"date\":{\"year\":2020,\"month\":7,\"day\":16},\"time\":{\"hour\":15,\"minute\":38,\"second\":38,\"nano\":552000000}},\"offset\":{\"totalSeconds\":21600},\"zone\":{\"id\":\"Asia/Almaty\"}}]\" into following types: [class java.lang.String, class java.time.ZonedDateTime]",
  "cause": {
    "detailMessage": "Failed to invoke java.time.ZoneId() with no args",
    "cause": {
      "detailMessage": null,
      "stackTrace": "sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)\r\njava.lang.reflect.Constructor.newInstance(Constructor.java:423)\r\ncom.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:110)\r\ncom.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:212)\r\ncom.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)\r\ncom.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)\r\ncom.google.gson.Gson.fromJson(Gson.java:932)\r\ncom.google.gson.Gson.fromJson(Gson.java:1003)\r\ncom.uber.cadence.converter.JsonDataConverter.fromDataArray(JsonDataConverter.java:150)\r\ncom.uber.cadence.internal.sync.POJOWorkflowImplementationFactory$POJOWorkflowImplementation.execute(POJOWorkflowImplementationFactory.java:241)\r\ncom.uber.cadence.internal.sync.WorkflowRunnable.run(WorkflowRunnable.java:47)\r\ncom.uber.cadence.internal.sync.CancellationScopeImpl.run(CancellationScopeImpl.java:102)\r\ncom.uber.cadence.internal.sync.WorkflowThreadImpl$RunnableWrapper.run(WorkflowThreadImpl.java:99)\r\njava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\r\njava.util.concurrent.FutureTask.run(FutureTask.java:266)\r\njava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\r\njava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\r\njava.lang.Thread.run(Thread.java:745)\r\n",
      "suppressedExceptions": [],
      "class": "java.lang.InstantiationException"
    },
    "stackTrace": "com.google.gson.internal.ConstructorConstructor$3.construct(ConstructorConstructor.java:113)\r\ncom.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:212)\r\ncom.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)\r\ncom.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)\r\ncom.google.gson.Gson.fromJson(Gson.java:932)\r\ncom.google.gson.Gson.fromJson(Gson.java:1003)\r\ncom.uber.cadence.converter.JsonDataConverter.fromDataArray(JsonDataConverter.java:150)\r\ncom.uber.cadence.internal.sync.POJOWorkflowImplementationFactory$POJOWorkflowImplementation.execute(POJOWorkflowImplementationFactory.java:241)\r\ncom.uber.cadence.internal.sync.WorkflowRunnable.run(WorkflowRunnable.java:47)\r\ncom.uber.cadence.internal.sync.CancellationScopeImpl.run(CancellationScopeImpl.java:102)\r\ncom.uber.cadence.internal.sync.WorkflowThreadImpl$RunnableWrapper.run(WorkflowThreadImpl.java:99)\r\njava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\r\njava.util.concurrent.FutureTask.run(FutureTask.java:266)\r\njava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\r\njava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\r\njava.lang.Thread.run(Thread.java:745)\r\n",
    "suppressedExceptions": [],
    "class": "java.lang.RuntimeException"
  },
  "stackTrace": "com.uber.cadence.converter.JsonDataConverter.fromDataArray(JsonDataConverter.java:157)\r\ncom.uber.cadence.internal.sync.POJOWorkflowImplementationFactory$POJOWorkflowImplementation.execute(POJOWorkflowImplementationFactory.java:241)\r\ncom.uber.cadence.internal.sync.WorkflowRunnable.run(WorkflowRunnable.java:47)\r\ncom.uber.cadence.internal.sync.CancellationScopeImpl.run(CancellationScopeImpl.java:102)\r\ncom.uber.cadence.internal.sync.WorkflowThreadImpl$RunnableWrapper.run(WorkflowThreadImpl.java:99)\r\njava.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\r\njava.util.concurrent.FutureTask.run(FutureTask.java:266)\r\njava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\r\njava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\r\njava.lang.Thread.run(Thread.java:745)\r\n",
  "suppressedExceptions": [],
  "class": "com.uber.cadence.converter.DataConverterException"
}

Input of workflow from Cadence UI:

[ "Peter", { "dateTime": { "date": { "year": 2020, "month": 7, "day": 16 }, "time": { "hour": 15, "minute": 38, "second": 38, "nano": 552000000 } }, "offset": { "totalSeconds": 21600 }, "zone": { "id": "Asia/Almaty" } } ]

eratolekov avatar Jul 16 '20 10:07 eratolekov