microsoft / microsoft/durabletask-java
Deserialize problem on LocalDate
Aberta
@kamperiadis já está trabalhando nisso.
Desde 13/6/2023.
bug
need investigation
P3
- Linguagem predominante
- Java
- Estrelas
- 29
- Forks
- 18
- Merge médio
- 1d 10h
- PRs com merge (30d)
- 2
Descrição
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;
...
}
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Avaliação
Esta issue ainda não foi avaliada.