From eeb37e91044559090ee1fcbb4ddc662fa7ddaf6c Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 25 Nov 2015 17:23:15 +0100 Subject: [PATCH] DATAMONGO-1342 - Fixed potential NullPointerException in MongoQueryCreator. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MongoQueryCreator.nextAsArray(…) now returns a single element object array in case null is handed to the method. It previously failed with a NullPointerException. --- .../repository/query/MongoQueryCreator.java | 2 +- .../query/MongoQueryCreatorUnitTests.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java index bef1c2165..d2d355e19 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java @@ -382,7 +382,7 @@ class MongoQueryCreator extends AbstractQueryCreator { if (next instanceof Collection) { return ((Collection) next).toArray(); - } else if (next.getClass().isArray()) { + } else if (next != null && next.getClass().isArray()) { return (Object[]) next; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java index 40be393cb..4d8fd0b3a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java @@ -661,6 +661,20 @@ public class MongoQueryCreatorUnitTests { assertThat(query, is(query(where("username").regex(".*")))); } + /** + * @see DATAMONGO-1342 + */ + @Test + public void bindsNullValueToContainsClause() { + + PartTree partTree = new PartTree("emailAddressesContains", User.class); + + ConvertingParameterAccessor accessor = getAccessor(converter, new Object[] { null }); + Query query = new MongoQueryCreator(partTree, accessor, context).createQuery(); + + assertThat(query, is(query(where("emailAddresses").in((Object) null)))); + } + interface PersonRepository extends Repository { List findByLocationNearAndFirstname(Point location, Distance maxDistance, String firstname);