[JAVA-5271] ClassCastException in DocumentToDBRefTransformer during listCollections Created: 15/Dec/23  Updated: 03/Jan/24  Resolved: 03/Jan/24

Status: Closed
Project: Java Driver
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor - P4
Reporter: Jon Savas Assignee: Jeffrey Yemin
Resolution: Gone away Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

Summary

When running MongoCollection#listCollections, the iterator fails with a ClassCastException in DocumentToDBRefTransformer.

Please provide the version of the driver. If applicable, please provide the MongoDB server version and topology (standalone, replica set, or sharded cluster).

 

   Mongo Java Driver: 4.7.0

   MongoDB Atlas: 4.4.26

How to Reproduce

  • Create a collection that uses DBRef
  • Run MongoClient#getDatabase#listCollections

Additional Background

This issue only occurs when DBRef is used in the database. It failed trying to transform a Document to a DBRef, expecting the fields $ref and $db to be Strings, but instead they were Documents. The Document that failed to transform is as follows:

 

{

    $ref: {type: "string", description: "$ref must be a string and is required"},

    $id: {bsonType: "objectId", description: "$id must be an objectId and is required"},

    $db: {type: "string", description: "$db must be a string and is required"}

}



 Comments   
Comment by PM Bot [ 03/Jan/24 ]

There hasn't been any recent activity on this ticket, so we're resolving it. Thanks for reaching out! Please feel free to reopen this ticket if you're still experiencing the issue, and add a comment if you're able to provide more information.

Comment by PM Bot [ 26/Dec/23 ]

Hi jonathan.savas@fivetran.com! JAVA-5271 is awaiting your response.

If this is still an issue for you, please open Jira to review the latest status and provide your feedback. Thanks!

Comment by Jeffrey Yemin [ 18/Dec/23 ]

OK, we will await your reply.

Comment by Jon Savas [ 18/Dec/23 ]

I will work on the sample app. I don't have access to the database that caused this issue so it might take a bit of time.

Comment by Jon Savas [ 18/Dec/23 ]

Hi jeff.yemin@mongodb.com thanks for the response. Here is the stack trace:

 
java.lang.ClassCastException: class org.bson.Document cannot be cast to class java.lang.String (org.bson.Document is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')
] 
at com.mongodb.DocumentToDBRefTransformer.transform(DocumentToDBRefTransformer.java:35)] at org.bson.codecs.ContainerCodecHelper.readValue(ContainerCodecHelper.java:61)] 
at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:180)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:44)
 at org.bson.internal.LazyCodec.decode(LazyCodec.java:48)
 at org.bson.codecs.ContainerCodecHelper.readValue(ContainerCodecHelper.java:61)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:180)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:44)
 at org.bson.internal.LazyCodec.decode(LazyCodec.java:48)
 at org.bson.codecs.ContainerCodecHelper.readValue(ContainerCodecHelper.java:61)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:180)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:44)
 at org.bson.internal.LazyCodec.decode(LazyCodec.java:48)
 at org.bson.codecs.ContainerCodecHelper.readValue(ContainerCodecHelper.java:61) 
at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:180)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:44)
 at org.bson.internal.LazyCodec.decode(LazyCodec.java:48)
 at org.bson.codecs.ContainerCodecHelper.readValue(ContainerCodecHelper.java:61)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:180)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:44)
 at org.bson.internal.LazyCodec.decode(LazyCodec.java:48)
 at org.bson.codecs.ContainerCodecHelper.readValue(ContainerCodecHelper.java:61)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:180)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:44)
at org.bson.internal.LazyCodec.decode(LazyCodec.java:48)
 at org.bson.codecs.ContainerCodecHelper.readValue(ContainerCodecHelper.java:61)
 at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:180) 
at org.bson.codecs.DocumentCodec.decode(DocumentCodec.java:44) 
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:48)
 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:51) 
at com.mongodb.internal.connection.InternalStreamConnection.getCommandResult(InternalStreamConnection.java:535) 
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:420)
 at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:337) 
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:240) 
at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:226)
 at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:126) 
at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:116)
 at com.mongodb.internal.connection.DefaultServer$OperationCountTrackingConnection.command(DefaultServer.java:345)
 at com.mongodb.internal.operation.CommandOperationHelper.createReadCommandAndExecute(CommandOperationHelper.java:232) 
at com.mongodb.internal.operation.ListCollectionsOperation.lambda$execute$1(ListCollectionsOperation.java:269)
 at com.mongodb.internal.operation.OperationHelper.lambda$withSourceAndConnection$2(OperationHelper.java:575) 
at com.mongodb.internal.operation.OperationHelper.withSuppliedResource(OperationHelper.java:600)
 at com.mongodb.internal.operation.OperationHelper.lambda$withSourceAndConnection$3(OperationHelper.java:574) 
at com.mongodb.internal.operation.OperationHelper.withSuppliedResource(OperationHelper.java:600) 
at com.mongodb.internal.operation.OperationHelper.withSourceAndConnection(OperationHelper.java:573) 
at com.mongodb.internal.operation.ListCollectionsOperation.lambda$execute$2(ListCollectionsOperation.java:264) 
at com.mongodb.internal.async.function.RetryingSyncSupplier.get(RetryingSyncSupplier.java:65)
 at com.mongodb.internal.operation.ListCollectionsOperation.execute(ListCollectionsOperation.java:284) 
at com.mongodb.internal.operation.ListCollectionsOperation.execute(ListCollectionsOperation.java:93) 
at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:191)
 at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:135) 
at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:92) 
at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:39) 
at java.base/java.lang.Iterable.spliterator(Iterable.java:101)

 

Comment by Jeffrey Yemin [ 18/Dec/23 ]

Hi jonathan.savas@fivetran.com this doesn't make a lot of sense to me, since listCollections doesn't actually read the content of the collection. Can you provide a small sample app that reproduces the issue, along with a full stack trace?

Comment by PM Bot [ 15/Dec/23 ]

Hi jonathan.savas@fivetran.com, thank you for reporting this issue! The team will look into it and get back to you soon.

Generated at Thu Feb 08 09:04:09 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.