Hello!
I’m working on a project with Java and MongoDb. I am using OpenJDK v. 11.0.18 and MongoDB Java driver 4.8.0. The following is the maven dependency from the MongoDB driver.
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.8.0</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.8.0</version>
<scope>compile</scope>
</dependency>
I modeled the data to use DBRef according to the following code
public class Recipe implements Comparable<Recipe> {
private String id;
private DBRef author;
// rest of the code omitted
}
So, at the moment that the POJO Recipe is deserialized, the MongoDB throw an UnsupportedOperationException
according to the following stack trace
java.lang.UnsupportedOperationException: DBRefCodec does not support decoding
at com.mongodb.DBRefCodec.decode(DBRefCodec.java:66)
at com.mongodb.DBRefCodec.decode(DBRefCodec.java:33)
at org.bson.codecs.pojo.LazyPropertyModelCodec.decode(LazyPropertyModelCodec.java:51)
at org.bson.codecs.DecoderContext.decodeWithChildContext(DecoderContext.java:96)
at org.bson.codecs.pojo.PojoCodecImpl.lambda$decodePropertyModel$2(PojoCodecImpl.java:224)
at org.bson.codecs.pojo.PojoCodecImpl.setPropertyValue(PojoCodecImpl.java:246)
at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:214)
at org.bson.codecs.pojo.PojoCodecImpl.decodeProperties(PojoCodecImpl.java:203)
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:112)
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:116)
at org.bson.codecs.pojo.AutomaticPojoCodec.decode(AutomaticPojoCodec.java:37)
at com.mongodb.internal.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52)
at com.mongodb.internal.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:87)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:42)
at org.bson.internal.LazyCodec.decode(LazyCodec.java:53)
at org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:104)
at com.mongodb.internal.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:63)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:87)
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:42)
at com.mongodb.internal.connection.ReplyMessage.<init>(ReplyMessage.java:50)
at com.mongodb.internal.connection.InternalStreamConnection.getCommandResult(InternalStreamConnection.java:538)
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:423)
at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:340)
at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:116)
at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:643)
at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:71)
at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:206)
at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:119)
at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:85)
at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:75)
at com.mongodb.internal.connection.DefaultServer$OperationCountTrackingConnection.command(DefaultServer.java:293)
at com.mongodb.internal.operation.CommandOperationHelper.createReadCommandAndExecute(CommandOperationHelper.java:233)
at com.mongodb.internal.operation.FindOperation.lambda$execute$1(FindOperation.java:332)
at com.mongodb.internal.operation.OperationHelper.lambda$withSourceAndConnection$0(OperationHelper.java:356)
at com.mongodb.internal.operation.OperationHelper.withSuppliedResource(OperationHelper.java:381)
at com.mongodb.internal.operation.OperationHelper.lambda$withSourceAndConnection$1(OperationHelper.java:355)
at com.mongodb.internal.operation.OperationHelper.withSuppliedResource(OperationHelper.java:381)
at com.mongodb.internal.operation.OperationHelper.withSourceAndConnection(OperationHelper.java:354)
at com.mongodb.internal.operation.FindOperation.lambda$execute$2(FindOperation.java:329)
at com.mongodb.internal.async.function.RetryingSyncSupplier.get(RetryingSyncSupplier.java:67)
at com.mongodb.internal.operation.FindOperation.execute(FindOperation.java:340)
at com.mongodb.internal.operation.FindOperation.execute(FindOperation.java:79)
at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:191)
at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:133)
at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:90)
at com.recipe.book.api.repositories.RecipeRepositoryImpl.findAll(RecipeRepositoryImpl.java:37)
I see that the com.mongodb.DBRefCodec throws it when the decode() method is called. Said that I ask how to make the driver deserialize/serialize the DBRef from/to POJO?