Hi,
I have a codec provider for enum suggested by https://dev.to/harithay:
public class EnumCodecProvider implements CodecProvider {
@Override
public <T> Codec<T> get(Class<T> clazz, CodecRegistry registry) {
log.info("Inside EnumCodecProvider: {}", clazz.getSimpleName());
if (clazz == ShipmentStatus.class) {
return (Codec<T>) new ShipmentStatusCodec();
}
return null;
}
}
EnumCodecProvider was registered this way:
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(
CodecRegistries.fromProviders(new EnumCodecProvider()),
MongoClients.getDefaultCodecRegistry()
);
MongoClientSettings settings = MongoClientSettings.builder()
.uuidRepresentation(UuidRepresentation.STANDARD)
.retryReads(true)
.retryWrites(true)
.codecRegistry(codecRegistry)
.applyConnectionString(connectionString).build();
return MongoClients.create(settings);
During debugging I can see that all BSON types are processed by EnumCustomProvider except my
enum ShipmentStatus:
10:32:15.538 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Document
10:32:15.540 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: MaxKey
10:32:15.540 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: BsonRegularExpression
10:32:15.541 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Integer
10:32:15.541 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Date
10:32:15.541 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: BsonDbPointer
10:32:15.541 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Symbol
10:32:15.541 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: ObjectId
10:32:15.541 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: BsonTimestamp
10:32:15.541 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: MinKey
10:32:15.541 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: String
10:32:15.541 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: List
10:32:15.542 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Binary
10:32:15.542 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Double
10:32:15.543 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Code
10:32:15.543 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Long
10:32:15.543 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Boolean
10:32:15.543 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: Decimal128
10:32:15.543 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: CodeWithScope
10:32:15.544 INFO 6ad6a0f68e2d c.t.t.p.c.v.codec.EnumCodecProvider - Inside EnumCodecProvider: BsonUndefined
Could you give me an advice what is missing in the code? How we can force MongoDB to process the enums using custom ShipmentStatusCodec?
Thanks,
Elena