vavr-io / vavr-jackson

Jackson datatype module for Vavr
Apache License 2.0
97 stars 35 forks source link

MapDeserializer fails on @JsonCreate #177

Closed chisui closed 3 years ago

chisui commented 3 years ago

The following Code fails:

static class SomeObject {
  @JsonCreator static SomeObject create(Map<String, String> someMap) {
    return new SomeObject();
  }
}

@Test
void shouldUseJsonCreator() throws Exception {
  new ObjectMapper()
      .registerModule(new VavrModule())
      .readValue("{}", SomeObject.class);
}
java.lang.NullPointerException
    at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:57)
    at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:10)
    at io.vavr.jackson.datatype.deserialize.MapDeserializer.deserialize(MapDeserializer.java:67)
    at io.vavr.jackson.datatype.deserialize.MapDeserializer.deserialize(MapDeserializer.java:35)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1315)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:331)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4524)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3466)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3434)

The issue seems to be that MapDeserializer doesn't ensure that the current token is a valid field name before invoking the KeyDeserializer.

chisui commented 3 years ago

resolved by #178