diff --git a/pom.xml b/pom.xml
index 63af8ca470..55f610a039 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.4.0-SNAPSHOT
+ 3.3.0-GH-3871-SNAPSHOT
pom
Spring Data MongoDB
@@ -15,7 +15,7 @@
org.springframework.data.build
spring-data-parent
- 2.7.0-SNAPSHOT
+ 2.6.0-SNAPSHOT
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index e2704a6753..aff481b04b 100644
--- a/spring-data-mongodb-benchmarks/pom.xml
+++ b/spring-data-mongodb-benchmarks/pom.xml
@@ -7,7 +7,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.4.0-SNAPSHOT
+ 3.3.0-GH-3871-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index b75f8bf624..52e25afc4c 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.4.0-SNAPSHOT
+ 3.3.0-GH-3871-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index ca96626cc9..49e06c0492 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -11,7 +11,7 @@
org.springframework.data
spring-data-mongodb-parent
- 3.4.0-SNAPSHOT
+ 3.3.0-GH-3871-SNAPSHOT
../pom.xml
@@ -237,6 +237,13 @@
true
+
+ org.slf4j
+ jul-to-slf4j
+ ${slf4j}
+ test
+
+
nl.jqno.equalsverifier
equalsverifier
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java
index e5ee6f7492..30cbd2bb02 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingContext.java
@@ -60,7 +60,7 @@ public ParameterBindingContext(ValueProvider valueProvider, ExpressionParser exp
Supplier evaluationContext) {
this(valueProvider, new SpELExpressionEvaluator() {
- @Override
+ @Override @SuppressWarnings("unchecked")
public T evaluate(String expressionString) {
return (T) expressionParser.parseExpression(expressionString).getValue(evaluationContext.get(), Object.class);
}
@@ -91,7 +91,7 @@ public static ParameterBindingContext forExpressions(ValueProvider valueProvider
ExpressionParser expressionParser, Function contextFunction) {
return new ParameterBindingContext(valueProvider, new SpELExpressionEvaluator() {
- @Override
+ @Override @SuppressWarnings("unchecked")
public T evaluate(String expressionString) {
Expression expression = expressionParser.parseExpression(expressionString);
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingDocumentCodec.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingDocumentCodec.java
index 18c9c25283..ab7df9bc1a 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingDocumentCodec.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingDocumentCodec.java
@@ -15,12 +15,11 @@
*/
package org.springframework.data.mongodb.util.json;
-import static java.util.Arrays.*;
-import static org.bson.assertions.Assertions.*;
-import static org.bson.codecs.configuration.CodecRegistries.*;
+import static java.util.Arrays.asList;
+import static org.bson.assertions.Assertions.notNull;
+import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -31,13 +30,24 @@
import org.bson.BsonBinarySubType;
import org.bson.BsonDocument;
import org.bson.BsonDocumentWriter;
+import org.bson.BsonInvalidOperationException;
import org.bson.BsonReader;
import org.bson.BsonType;
import org.bson.BsonValue;
import org.bson.BsonWriter;
import org.bson.Document;
import org.bson.Transformer;
-import org.bson.codecs.*;
+import org.bson.codecs.BsonTypeClassMap;
+import org.bson.codecs.BsonTypeCodecMap;
+import org.bson.codecs.BsonValueCodecProvider;
+import org.bson.codecs.Codec;
+import org.bson.codecs.CollectibleCodec;
+import org.bson.codecs.DecoderContext;
+import org.bson.codecs.DocumentCodecProvider;
+import org.bson.codecs.EncoderContext;
+import org.bson.codecs.IdGenerator;
+import org.bson.codecs.ObjectIdGenerator;
+import org.bson.codecs.ValueCodecProvider;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.json.JsonParseException;
import org.springframework.data.mapping.model.SpELExpressionEvaluator;
@@ -61,6 +71,7 @@
* @author Ross Lawley
* @author Ralph Schaer
* @author Christoph Strobl
+ * @author Rocco Lagrotteria
* @since 2.2
*/
public class ParameterBindingDocumentCodec implements CollectibleCodec {
@@ -172,7 +183,7 @@ public Document decode(@Nullable String json, Object[] values) {
public Document decode(@Nullable String json, ParameterBindingContext bindingContext) {
- if (StringUtils.isEmpty(json)) {
+ if (!StringUtils.hasText(json)) {
return new Document();
}
@@ -193,7 +204,7 @@ public Document decode(@Nullable String json, ParameterBindingContext bindingCon
public ExpressionDependencies captureExpressionDependencies(@Nullable String json, ValueProvider valueProvider,
ExpressionParser expressionParser) {
- if (StringUtils.isEmpty(json)) {
+ if (!StringUtils.hasText(json)) {
return ExpressionDependencies.none();
}
@@ -217,19 +228,26 @@ public Document decode(final BsonReader reader, final DecoderContext decoderCont
if (bindingReader.currentValue instanceof org.bson.Document) {
return (Document) bindingReader.currentValue;
}
+ if(ObjectUtils.nullSafeEquals(bindingReader.currentValue, ParameterBindingJsonReader.PLACEHOLDER)) {
+ return new Document();
+ }
}
Document document = new Document();
- reader.readStartDocument();
try {
+ reader.readStartDocument();
+
while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
String fieldName = reader.readName();
Object value = readValue(reader, decoderContext);
document.put(fieldName, value);
}
- } catch (JsonParseException e) {
+
+ reader.readEndDocument();
+
+ } catch (JsonParseException | BsonInvalidOperationException e) {
try {
Object value = readValue(reader, decoderContext);
@@ -244,8 +262,6 @@ public Document decode(final BsonReader reader, final DecoderContext decoderCont
}
}
- reader.readEndDocument();
-
return document;
}
@@ -377,8 +393,6 @@ private List