Details
-
Bug
-
Resolution: Works as Designed
-
Major - P3
-
None
-
3.5.0
-
None
-
macOS Sierra (10.12.6)
Description
GridFSFileCodec throws an exception when the file's "metadata" field is null. GridFSFileCodec.java#73
Underlying problem in the BsonDocument class (containsKey("metadata") return true when the value is BsonNull.
public BsonDocument getDocument(final Object key, final BsonDocument defaultValue) { |
if (!containsKey(key)) { |
return defaultValue; |
}
|
return get(key).asDocument(); |
}
|
Full stacktrace:
Exception in thread "main" org.bson.BsonInvalidOperationException: Value expected to be of type DOCUMENT is of unexpected type NULL |
at org.bson.BsonValue.throwIfInvalidType(BsonValue.java:419) |
at org.bson.BsonValue.asDocument(BsonValue.java:47) |
at org.bson.BsonDocument.getDocument(BsonDocument.java:506) |
at com.mongodb.client.gridfs.codecs.GridFSFileCodec.decode(GridFSFileCodec.java:73) |
at com.mongodb.client.gridfs.codecs.GridFSFileCodec.decode(GridFSFileCodec.java:48) |
at com.mongodb.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52) |
at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60) |
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84) |
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41) |
at org.bson.codecs.configuration.LazyCodec.decode(LazyCodec.java:47) |
at org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:101) |
at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:63) |
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84) |
at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41) |
at com.mongodb.connection.ReplyMessage.<init>(ReplyMessage.java:50) |
at com.mongodb.connection.CommandProtocol.getResponseDocument(CommandProtocol.java:132) |
at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:111) |
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:159) |
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289) |
at com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:176) |
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:216) |
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:207) |
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:113) |
at com.mongodb.operation.FindOperation$1.call(FindOperation.java:715) |
at com.mongodb.operation.FindOperation$1.call(FindOperation.java:709) |
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:433) |
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:406) |
at com.mongodb.operation.FindOperation.execute(FindOperation.java:709) |
at com.mongodb.operation.FindOperation.execute(FindOperation.java:81) |
at com.mongodb.Mongo.execute(Mongo.java:810) |
at com.mongodb.Mongo$2.execute(Mongo.java:797) |
at com.mongodb.OperationIterable.iterator(OperationIterable.java:47) |
at com.mongodb.FindIterableImpl.iterator(FindIterableImpl.java:200) |
at com.mongodb.client.gridfs.GridFSFindIterableImpl.iterator(GridFSFindIterableImpl.java:88) |