From b900dc6c092ad851172fc9f17b6da548a221f966 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 17 May 2019 10:02:36 +0200 Subject: [PATCH] DATAMONGO-2275 - Fix NPE when mapping MongoJsonSchema used in query. We fixed a NPE when reading raw Document from a collection using a query matching against a JSON schema. Original pull request: #752. --- .../data/mongodb/core/convert/QueryMapper.java | 2 +- .../data/mongodb/core/JsonSchemaQueryTests.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java index cc860c7dc..ff7ce6ea5 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java @@ -286,7 +286,7 @@ public class QueryMapper { } if (keyword.isJsonSchema()) { - return schemaMapper.mapSchema(new Document(keyword.getKey(), keyword.getValue()), entity.getType()); + return schemaMapper.mapSchema(new Document(keyword.getKey(), keyword.getValue()), entity != null ? entity.getType() : Object.class); } return new Document(keyword.getKey(), convertSimpleOrDocument(keyword.getValue(), entity)); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/JsonSchemaQueryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/JsonSchemaQueryTests.java index 6ea40326e..0ad43dfb2 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/JsonSchemaQueryTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/JsonSchemaQueryTests.java @@ -21,6 +21,7 @@ import static org.springframework.data.mongodb.core.query.Query.*; import static org.springframework.data.mongodb.core.schema.JsonSchemaProperty.*; import lombok.Data; +import org.bson.Document; import reactor.test.StepVerifier; import org.junit.AfterClass; @@ -199,6 +200,15 @@ public class JsonSchemaQueryTests { .containsExactlyInAnyOrder(jellyBelly, kazmardBoombub); } + @Test // DATAMONGO-1835 + public void findsWithSchemaReturningRawDocument() { + + MongoJsonSchema schema = MongoJsonSchema.builder().required("address").build(); + + assertThat(template.find(query(matchingDocumentStructure(schema)), Document.class, template.getCollectionName(Person.class))) + .hasSize(2); + } + @Data static class Person {