Did anyone face this exception? ```org.bson.codecs...
# ktor
a
Did anyone face this exception?
Copy code
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for CodecCacheKey{clazz=class kotlinx.datetime.Instant, types=null}.
	at org.bson.internal.ProvidersCodecRegistry.lambda$get$0(ProvidersCodecRegistry.java:87)
...
? It's while trying to insert a instance of data class (that has Instant from kotlinx.datetime) using the new Kotlin MongoDb driver
Copy code
Full log:

org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for CodecCacheKey{clazz=class kotlinx.datetime.Instant, types=null}.
	at org.bson.internal.ProvidersCodecRegistry.lambda$get$0(ProvidersCodecRegistry.java:87)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:80)
	at org.bson.internal.ChildCodecRegistry.get(ChildCodecRegistry.java:68)
	at org.bson.codecs.kotlin.DataClassCodec$Companion.getCodec(DataClassCodec.kt:226)
	at org.bson.codecs.kotlin.DataClassCodec$Companion.getCodec(DataClassCodec.kt:199)
	at org.bson.codecs.kotlin.DataClassCodec$Companion.create$bson_kotlin(DataClassCodec.kt:148)
	at org.bson.codecs.kotlin.DataClassCodecProvider.get(DataClassCodecProvider.kt:28)
	at org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider(ProvidersCodecRegistry.java:95)
	at com.mongodb.KotlinCodecProvider.get(KotlinCodecProvider.java:83)
	at org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider(ProvidersCodecRegistry.java:95)
	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:70)
	at org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider(ProvidersCodecRegistry.java:95)
	at org.bson.codecs.configuration.OverridableUuidRepresentationCodecProvider.get(OverridableUuidRepresentationCodecProvider.java:47)
	at org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider(ProvidersCodecRegistry.java:95)
	at org.bson.internal.ProvidersCodecRegistry.lambda$get$0(ProvidersCodecRegistry.java:82)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:80)
	at org.bson.internal.ChildCodecRegistry.get(ChildCodecRegistry.java:68)
	at org.bson.codecs.kotlin.DataClassCodec$Companion.getCodec(DataClassCodec.kt:226)
	at org.bson.codecs.kotlin.DataClassCodec$Companion.getCodec(DataClassCodec.kt:199)
	at org.bson.codecs.kotlin.DataClassCodec$Companion.create$bson_kotlin(DataClassCodec.kt:148)
	at org.bson.codecs.kotlin.DataClassCodecProvider.get(DataClassCodecProvider.kt:28)
	at org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider(ProvidersCodecRegistry.java:95)
	at com.mongodb.KotlinCodecProvider.get(KotlinCodecProvider.java:83)
	at org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider(ProvidersCodecRegistry.java:95)
	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:70)
	at org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider(ProvidersCodecRegistry.java:95)
	at org.bson.codecs.configuration.OverridableUuidRepresentationCodecProvider.get(OverridableUuidRepresentationCodecProvider.java:47)
	at org.bson.internal.ProvidersCodecRegistry.getFromCodecProvider(ProvidersCodecRegistry.java:95)
	at org.bson.internal.ProvidersCodecRegistry.lambda$get$0(ProvidersCodecRegistry.java:82)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:80)
	at org.bson.internal.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:50)
	at com.mongodb.internal.operation.Operations.getCodec(Operations.java:746)
	at com.mongodb.internal.operation.Operations.bulkWrite(Operations.java:466)
	at com.mongodb.internal.operation.Operations.insertOne(Operations.java:392)
	at com.mongodb.internal.operation.AsyncOperations.insertOne(AsyncOperations.java:202)
	at com.mongodb.reactivestreams.client.internal.MongoOperationPublisher.lambda$insertOne$6(MongoOperationPublisher.java:261)
	at com.mongodb.reactivestreams.client.internal.MongoOperationPublisher.createWriteOperationMono(MongoOperationPublisher.java:446)
	at com.mongodb.reactivestreams.client.internal.MongoOperationPublisher.createSingleWriteRequestMono(MongoOperationPublisher.java:454)
	at com.mongodb.reactivestreams.client.internal.MongoOperationPublisher.insertOne(MongoOperationPublisher.java:261)
	at com.mongodb.reactivestreams.client.internal.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:367)
	at com.mongodb.kotlin.client.coroutine.MongoCollection.insertOne(MongoCollection.kt:627)
	at com.mongodb.kotlin.client.coroutine.MongoCollection.insertOne$default(MongoCollection.kt:626)

? It's while trying to insert a instance of data class (that has Instant from kotlinx.datetime) using the new Kotlin MongoDb driver
c
All data mappers do not support JSR310 out of the box, they still use old java date. So, you should search for a codec library that support the new java date/time api (jsr310). Add it as a dependency to your project and configure BSON to use it.
👍 1
a
I'm using Kotlinx date time
c
Then you should find a codec for kotlinx instant, maybe there is one around. Otherwise you'll need to implement it yourself.
a
But Kotlin mongodb driver uses Serializable, should it already support that? because Instant from Kotlinx date time
Can you send me a link of the docs to show how can I create a codec for it?
Or give me basic and simple example?
I found a workaround
c
I'd suggest to check out: https://github.com/agcom/bson
a
Thanks
c
Bson serialization format implementation for Kotlinx serialization, based on The BSON library (org.mongodb.bson).
319 Views