arrow-kt / arrow-integrations

Λrrow Integrations is part of Λrrow, a functional companion to Kotlin's Standard Library
http://arrow-kt.io
Other
27 stars 6 forks source link

Bug report: Calling ObjectMapper().registerArrowModule() causes NonEmptyList deserialization to fail with NullPointerException #78

Closed vpeurala closed 2 years ago

vpeurala commented 2 years ago

See the failing minimal test case in Pull Request #77 (https://github.com/arrow-kt/arrow-integrations/pull/77).

vpeurala commented 2 years ago

This test code causes the deserialization failure:

val mapperWithSettings =
        ObjectMapper()
          .registerArrowModule()

val original = nonEmptyListOf("foo", "bar")
val serialized: String = mapperWithSettings.writeValueAsString(original)

// This line throws a NullPointerException
val deserialized: NonEmptyList<*> = mapperWithSettings.readValue(serialized, NonEmptyList::class.java)

Stack trace:

    java.lang.NullPointerException: type.bindings.getBoundType(0) must not be null
        at arrow.integrations.jackson.module.NonEmptyListDeserializerResolver.findCollectionDeserializer(NonEmptyListModule.kt:60)
        at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._findCustomCollectionDeserializer(BasicDeserializerFactory.java:2205)
        at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.createCollectionDeserializer(BasicDeserializerFactory.java:1370)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:403)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:350)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
        at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
        at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
        at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:642)
        at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:4805)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4675)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3629)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3597)
myuwono commented 2 years ago

thanks @vpeurala that's a good find 🙌