I’m trying to do a query using the AutomaticPojoCodec, which I have done before with no issues, but this time I’m getting the following error thrown when the codec attempts to decode one of the Date properties in the Document:
ConfigurationException: An exception occurred when decoding using the AutomaticPojoCodec.
Decoding into a 'UserAccount' failed with the following exception:
Failed to decode 'UserAccount'. Decoding 'fullVersionPurchaseDate' errored with: readDateTime can only be called when CurrentBSONType is DATE_TIME, not when CurrentBSONType is UNDEFINED.
A custom Codec or PojoCodec may need to be explicitly configured and registered to handle this type.] with root cause
org.bson.BsonInvalidOperationException: readDateTime can only be called when CurrentBSONType is DATE_TIME, not when CurrentBSONType is UNDEFINED.
at org.bson.AbstractBsonReader.verifyBSONType(AbstractBsonReader.java:690) ~[bson-4.2.3.jar!/:na]
at org.bson.AbstractBsonReader.checkPreconditions(AbstractBsonReader.java:722) ~[bson-4.2.3.jar!/:na]
at org.bson.AbstractBsonReader.readDateTime(AbstractBsonReader.java:310) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.DateCodec.decode(DateCodec.java:37) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.DateCodec.decode(DateCodec.java:29) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.pojo.LazyPropertyModelCodec.decode(LazyPropertyModelCodec.java:51) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.DecoderContext.decodeWithChildContext(DecoderContext.java:96) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:200) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.pojo.PojoCodecImpl.decodeProperties(PojoCodecImpl.java:179) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:103) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:107) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.pojo.AutomaticPojoCodec.decode(AutomaticPojoCodec.java:37) ~[bson-4.2.3.jar!/:na]
at com.mongodb.internal.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60) ~[mongodb-driver-core-4.0.5.jar!/:na]
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:87) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:42) ~[bson-4.2.3.jar!/:na]
at org.bson.internal.LazyCodec.decode(LazyCodec.java:48) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:104) ~[bson-4.2.3.jar!/:na]
at com.mongodb.internal.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:63) ~[mongodb-driver-core-4.0.5.jar!/:na]
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:87) ~[bson-4.2.3.jar!/:na]
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:42) ~[bson-4.2.3.jar!/:na]
at com.mongodb.internal.connection.ReplyMessage.<init>(ReplyMessage.java:51) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.InternalStreamConnection.getCommandResult(InternalStreamConnection.java:412) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:308) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:258) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:99) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:500) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:71) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:224) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:202) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:118) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:110) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.operation.QueryBatchCursor.getMore(QueryBatchCursor.java:260) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.internal.operation.QueryBatchCursor.hasNext(QueryBatchCursor.java:138) ~[mongodb-driver-core-4.0.5.jar!/:na]
at com.mongodb.client.internal.MongoBatchCursorAdapter.hasNext(MongoBatchCursorAdapter.java:54) ~[mongodb-driver-sync-4.0.5.jar!/:na]
at com.mongodb.client.internal.MongoIterableImpl.forEach(MongoIterableImpl.java:122) ~[mongodb-driver-sync-4.0.5.jar!/:na]
at com.mongodb.client.internal.MongoIterableImpl.into(MongoIterableImpl.java:130) ~[mongodb-driver-sync-4.0.5.jar!/:na]
I’m fairly sure I’ve had these types of Date properties in the other entities, where they can be null. I even went so far as to make sure every entity in the database had this fullVersionPurchaseDate field populated with at least null, instead of it just not existing. I don’t know how to move forward at this point. Has anyone else run into this? Loose code for the query:
MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(
new ConnectionString(mongoURL)
).applyToSocketSettings(
builder -> builder.connectTimeout(60, TimeUnit.SECONDS)//.readTimeout(60, TimeUnit.SECONDS)
).applyToClusterSettings(
builder -> builder.serverSelectionTimeout(60, TimeUnit.SECONDS)
).applyToConnectionPoolSettings(
builder -> builder.maxConnectionIdleTime(60, TimeUnit.SECONDS)//.maxConnectionLifeTime(60, TimeUnit.SECONDS)
).build();
MongoClient mongoClient = MongoClients.create(settings);
MongoDatabase mongoDatabase = null;
CodecRegistry pojoCodecRegistry = CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build()));
mongoDatabase = mongoClient.getDatabase("x").withCodecRegistry(pojoCodecRegistry);
MongoCollection<Document> collection = mongoDatabase.getCollection("userAccount");
Document query = new Document();
List<UserAccount> users = collection.find(query, UserAccount.class)
.into(new ArrayList<>());