-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Labels
P3Priority 3Priority 3bugSomething isn't workingSomething isn't workingneed investigationNeed investigation from a maintainerNeed investigation from a maintainer
Milestone
Description
When returning an object containing a LocalDate, I get the following error.
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)
at [Source: (String)"{"date":{"year":2023,"month":5,"day":13},"value":"foo"}"; line: 1, column: 1]
...
at com.microsoft.durabletask.JacksonDataConverter.deserialize(JacksonDataConverter.java:40)
I believe this date format is coming from protobuf?
I can solve this problem by writing my own custom Jackson deserializer but shouldn't this be handled for us?
Maybe it's possible to return { "date": "2023-05-13" }
instead? This way I can add jackson-datatype-jsr310
to the class path and com.microsoft.durabletask.JacksonDataConverter
will pick it up.
Example code:
public class ExampleFunction {
@FunctionName("StartOrchestration")
public HttpResponseMessage startOrchestration(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET, HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS) final HttpRequestMessage<Optional<String>> request,
@DurableClientInput(name = "durableContext") final DurableClientContext durableContext,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request");
final DurableTaskClient client = durableContext.getClient();
final String instanceId = client.scheduleNewOrchestrationInstance("ExampleProcess");
return durableContext.createCheckStatusResponse(request, instanceId);
}
@FunctionName("ExampleProcess")
public String exampleOrchestrator(
@DurableOrchestrationTrigger(name = "taskOrchestrationContext") final TaskOrchestrationContext context,
final ExecutionContext functionContext) {
return context.callActivity("ToLower", "Foo", String.class).await() +
" " +
context.callActivity("ToLower", "Bar", String.class).await();
}
@FunctionName("ToLower")
public ExampleResponse toLower(@DurableActivityTrigger(name = "value") final String value, final ExecutionContext context) {
return new ExampleResponse(LocalDate.now(), value.toLowerCase());
}
}
public class ExampleResponse {
private LocalDate date;
private String value;
...
}
Metadata
Metadata
Assignees
Labels
P3Priority 3Priority 3bugSomething isn't workingSomething isn't workingneed investigationNeed investigation from a maintainerNeed investigation from a maintainer