Регистрация пользовательского кодека (mongo-java-driver-3.7.0-rc0) - PullRequest
0 голосов
/ 15 мая 2018

Я использую mongo-java-driver-3.7.0-rc0 и около двух дней бьюсь с регистрацией кодеков. Я попробовал два подхода (из провайдеров и из кодеков) - ни один не работал. Моя текущая реализация (на основе документации) выглядит так:

CodecRegistry cr = 
    fromRegistries(com.mongodb.MongoClient.getDefaultCodecRegistry(),
        CodecRegistries.fromProviders(new MongoCacheDocumentCodecProvider()));

MongoClientSettings mongoSettings = MongoClientSettings.builder()                                               
                                    .applyConnectionString(connectionString)                                                       
                                    .codecRegistry(cr)
                                    .build();
client = MongoClients.create(mongoSettings);

(...)

MongoCollection<MongoCacheDocument> collection = 
    db.getCollection(dbName, MongoCacheDocument.class);

После этого я вижу в отладчике, что он зарегистрирован, однако при попытке, например, получить этот объект

collection.find() 
OR
collection.find(MongoCacheDocument.class)

Я получаю ClassCastException HashMap -> MongoCacheDocument. Когда я делаю это для org.bson.Document, все идет хорошо. Насколько я понимаю, поиск кодеков, выполненный Монго, выполняется рекурсивно. Почему тогда это не решается правильно, в то время как кодек зарегистрирован (кстати, отладчик не показывает, что есть какая-либо активность в поставщике нестандартного кода / кодека).

Кто-нибудь сталкивался с подобными проблемами? Может быть, это ошибка в 3.7.0-rc0, о которой я не знаю?

PS. Причина, по которой я использую RC, заключается в том, что он поддерживает более широкий спектр кодеков POJO в автоматическом режиме и хочет быть как можно более актуальным, в основном потому, что Mongo API любит время от времени меняться:).

РЕДАКТИРОВАТЬ: я заметил, что он возвращает MapCodec (FYI: MongoCacheDocument расширяет org.bson.Document). Я вижу, что Document реализует Map, однако нет проблем с поиском кодека именно для Document.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...