AutomaticPojoCodec detecting Date field as UNDEFINED

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<>());

UNDEFINED is actually a BSON type, it’s not the same as null (which is also a BSON type). My initial suspicion is that instead of ensuring that the field had a null value, the value of the field was actually set to UNDEFINED. To confirm this, try reading the document into an org.bson.BsonDocument and check the type.

Note that UNDEFINED has been deprecated for a long time: BSON (Binary JSON): Specification

Regards,
Jeff