-
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