Ran into another error while upgrading from MongoJack 2.x.
I get the following exception if I try to deserialize a document with undefined:
java.lang.RuntimeException: IOException encountered while parsing
at org.mongojack.internal.stream.JacksonDecoder.decode(JacksonDecoder.java:45)
at org.mongojack.internal.stream.JacksonCodec.decode(JacksonCodec.java:71)
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:540)
at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:425)
at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:342)
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:230)
at com.mongodb.internal.operation.FindOperation.lambda$execute$1(FindOperation.java:666)
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.FindOperation.lambda$execute$2(FindOperation.java:661)
at com.mongodb.internal.async.function.RetryingSyncSupplier.get(RetryingSyncSupplier.java:65)
at com.mongodb.internal.operation.FindOperation.execute(FindOperation.java:692)
at com.mongodb.internal.operation.FindOperation.execute(FindOperation.java:86)
at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:191)
at com.mongodb.client.internal.FindIterableImpl.first(FindIterableImpl.java:200)
at org.mongojack.internal.util.FindIterableDecorator.first(FindIterableDecorator.java:280)
at DeserializationTest.deserializingUndefined(DeserializationTest.java:102)
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.END_OBJECT`)
at [Source: (String); byte offset: #UNKNOWN] (through reference chain: Foo["name"])
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1741)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1515)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1420)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:73)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:313)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:176)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:2025)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1175)
at org.mongojack.internal.stream.JacksonDecoder.decode(JacksonDecoder.java:43)
... 63 more
Can be reproduced with the following code.
I'm using an old Mongo server: v3.6.23, but I'm fairly certain it'll fail with latest as well.
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Foo {
private String value;
public String getValue() {
return value;
}
public void setValue(String name) {
this.value = name;
}
}
@Test
public void deserializingNull() {
final MongoCollection<Document> collection = theDB.getCollection("foo");
collection.drop();
collection.insertOne(new Document("value", new BsonNull()));
final JacksonMongoCollection<Foo> jacksonCollection = JacksonMongoCollection.builder().build(theDB, "foo", Foo.class, UuidRepresentation.STANDARD);
final Foo foo = jacksonCollection.find().first();
assert foo.getValue() == null;
}
@Test
public void deserializingUndefined() {
final MongoCollection<Document> collection = theDB.getCollection("foo");
collection.drop();
collection.insertOne(new Document("value", new BsonUndefined()));
final JacksonMongoCollection<Foo> jacksonCollection = JacksonMongoCollection.builder().build(theDB, "foo", Foo.class, UuidRepresentation.STANDARD);
final Foo foo = jacksonCollection.find().first();
assert foo.getValue() == null;
}
Ran into another error while upgrading from MongoJack 2.x.
I get the following exception if I try to deserialize a document with
undefined:Can be reproduced with the following code.
I'm using an old Mongo server: v3.6.23, but I'm fairly certain it'll fail with latest as well.