CodecConfigurationException for data class's type parameter since Kotlin v2.3.0

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Gone away
    • Priority: Unknown
    • None
    • Affects Version/s: None
    • Component/s: Kotlin
    • None
    • None
    • Java Drivers
    • Hide

      1. What would you like to communicate to the user about this feature?
      2. Would you like the user to see examples of the syntax and/or executable code and its output?
      3. Which versions of the driver/connector does this apply to?

      Show
      1. What would you like to communicate to the user about this feature? 2. Would you like the user to see examples of the syntax and/or executable code and its output? 3. Which versions of the driver/connector does this apply to?
    • None
    • None
    • None
    • None
    • None
    • None

      Consider the following MongoDb document represented with a Kotlin data class (DataDocument) with a field using generic (ResourceLink<String>):

      @Serializable
      data class DataDocument(
          val parent: ResourceLink<String>,
      )
      
      @Serializable
      data class ResourceLink<ID_TYPE>(
          val id: ID_TYPE,
      )
      

      With kotlin-reflect v2.3.0 the following code:

      val collection = db.getCollection<DataDocument>(collectionName)
      collection.find().forEach { println(it) }
      

      ... will fail with the following exception:

      Could not find codec for id with type ID_TYPE
      org.bson.codecs.configuration.CodecConfigurationException: Could not find codec for id with type ID_TYPE
      	at org.bson.codecs.kotlin.DataClassCodec$Companion.getCodec(DataClassCodec.kt:224)
      	at org.bson.codecs.kotlin.DataClassCodec$Companion.create$bson_kotlin(DataClassCodec.kt:152)
      	at org.bson.codecs.kotlin.DataClassCodecProvider.get(DataClassCodecProvider.kt:28)
      	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:69)
      	at com.mongodb.KotlinCodecProvider.get(KotlinCodecProvider.java:85)
      	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:69)
      	at org.bson.codecs.configuration.OverridableUuidRepresentationCodecProvider.get(OverridableUuidRepresentationCodecProvider.java:46)
      	at org.bson.internal.ProvidersCodecRegistry.lambda$get$0(ProvidersCodecRegistry.java:81)
      	at java.base/java.util.Optional.orElseGet(Optional.java:364)
      	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:79)
      	at org.bson.internal.ChildCodecRegistry.get(ChildCodecRegistry.java:81)
      	at org.bson.codecs.kotlin.DataClassCodec$Companion.getCodec(DataClassCodec.kt:243)
      	at org.bson.codecs.kotlin.DataClassCodec$Companion.getCodec(DataClassCodec.kt:203)
      	at org.bson.codecs.kotlin.DataClassCodec$Companion.create$bson_kotlin(DataClassCodec.kt:152)
      	at org.bson.codecs.kotlin.DataClassCodecProvider.get(DataClassCodecProvider.kt:28)
      	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:69)
      	at com.mongodb.KotlinCodecProvider.get(KotlinCodecProvider.java:85)
      	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:69)
      	at org.bson.codecs.configuration.OverridableUuidRepresentationCodecProvider.get(OverridableUuidRepresentationCodecProvider.java:46)
      	at org.bson.internal.ProvidersCodecRegistry.lambda$get$0(ProvidersCodecRegistry.java:81)
      	at java.base/java.util.Optional.orElseGet(Optional.java:364)
      	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:79)
      	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:49)
      	at com.mongodb.internal.operation.Operations.createFindOperation(Operations.java:268)
      	at com.mongodb.internal.operation.Operations.find(Operations.java:257)
      	at com.mongodb.client.internal.FindIterableImpl.asReadOperation(FindIterableImpl.java:248)
      	at com.mongodb.client.internal.FindIterableImpl.asReadOperation(FindIterableImpl.java:43)
      	at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:156)
      	at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:116)
      	at com.mongodb.client.internal.MongoIterableImpl.cursor(MongoIterableImpl.java:121)
      	at com.mongodb.kotlin.client.MongoIterable.cursor(MongoIterable.kt:35)
      	at com.mongodb.kotlin.client.MongoIterable.use(MongoIterable.kt:65)
      	at com.mongodb.kotlin.client.MongoIterable.forEach(MongoIterable.kt:77)
      	at MongoSerializationTest.throws CodecConfigurationExceptionWithKotlin v2-3-0(MongoSerializationTest.kt:20)

      The previous version of Kotlin v2.2.21 works just fine

            Assignee:
            Ross Lawley
            Reporter:
            Kirill Gavrilov
            None
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: