Decoding a class with type parameters (with KotlinX.Serialization)

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Unresolved
    • Priority: Unknown
    • None
    • Affects Version/s: 5.6.2
    • Component/s: BSON
    • None
    • None
    • Java Drivers
    • None
    • None
    • None
    • None
    • None
    • None

      Summary

      I want to deserialize a Kotlin class with type parameters, using the `org.mongodb:bson-kotlinx` (compile-time-based) driver.

      I have the following code:

       

      @Serializable
      data class BsonDocumentUser(
      	val a: String,
      	val b: Int,
      )
      
      @Serializable
      data class BsonDocumentTypeParameter<T>(
      	val value: T,
      )
      
      // This the default CodecRegistry but without KotlinCodecProvider
      val defaultCodecProvidersWithoutKotlin = CodecRegistries.fromProviders(
      	ValueCodecProvider(),
      	BsonValueCodecProvider(),
      	DBRefCodecProvider(),
      	DBObjectCodecProvider(),
      	DocumentCodecProvider(DocumentToDBRefTransformer()),
      	CollectionCodecProvider(DocumentToDBRefTransformer()),
      	IterableCodecProvider(DocumentToDBRefTransformer()),
      	MapCodecProvider(DocumentToDBRefTransformer()),
      GeoJsonCodecProvider(),
      	GridFSFileCodecProvider(),
      	Jsr310CodecProvider(),
      	JsonObjectCodecProvider(),
      	BsonCodecProvider(),
      	ExpressionCodecProvider(),
      	Jep395RecordCodecProvider(),
      	// KotlinCodecProvider(), // Do NOT include the KotlinCodecProvider! It uses classpath scanning to choose a serialization library, but we want to control it			EnumCodecProvider()
      )
      
      val codecRegistryWithKotlin = CodecRegistries.fromProviders(
      	KotlinSerializerCodecProvider(),
      	defaultCodecProvidersWithoutKotlin,
      )
      
      val codec = codecRegistryWithKotlin.get(
      	BsonDocumentTypeParameter::class.java,
      	listOf(BsonDocumentUser::class.java),
      )

       

      This code fails with:

      org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for CodecCacheKey{clazz=class opensavvy.ktmongo.bson.official.BsonDocumentTypeParameter, types=[class opensavvy.ktmongo.bson.official.BsonDocumentUser]}.
      	at org.bson.internal.ProvidersCodecRegistry.lambda$get$0(ProvidersCodecRegistry.java:86)
      	at java.base/java.util.Optional.orElseGet(Optional.java:368)
      	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:79)
      	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:58) 

      Please provide the version of the driver. If applicable, please provide the MongoDB server version and topology (standalone, replica set, or sharded cluster).

      org.mongodb:bson-kotlinx:5.6.2

            Assignee:
            Nabil Hachicha
            Reporter:
            Ivan Canet (EXT)
            None
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: