This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-2.25.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.25.x by this push: new 0ddcfaf [Backport] fix(mongodb): converter failure (#5192) 0ddcfaf is described below commit 0ddcfaf2efd5d30871e21a91a3c1bc3d4efcc978 Author: Pasquale Congiusti <pasquale.congiu...@gmail.com> AuthorDate: Wed Mar 10 13:00:07 2021 +0100 [Backport] fix(mongodb): converter failure (#5192) Backporting an issue fixed via #5177 --- .../converters/MongoDbBasicConverters.java | 11 +++++++++-- .../component/mongodb3/MongoDbConversionsTest.java | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbBasicConverters.java b/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbBasicConverters.java index c03345f..f77d725 100644 --- a/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbBasicConverters.java +++ b/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbBasicConverters.java @@ -110,9 +110,11 @@ public final class MongoDbBasicConverters { return true; } - @Converter + @Converter(allowNull = true) public static List<Bson> fromStringToList(String value) { - + if (!isArrayNotation(value)) { + return null; + } final CodecRegistry codecRegistry = CodecRegistries.fromProviders(Arrays.asList(new ValueCodecProvider(), new BsonValueCodecProvider(), new DocumentCodecProvider())); JsonReader reader = new JsonReader(value); @@ -128,4 +130,9 @@ public final class MongoDbBasicConverters { return answer; } + private static boolean isArrayNotation(String value) { + return value != null && !value.isEmpty() && value.length() > 1 && value.charAt(0) == '[' + && value.charAt(value.length() - 1) == ']'; + } + } diff --git a/components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbConversionsTest.java b/components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbConversionsTest.java index aaefc72..bbd5cd9 100644 --- a/components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbConversionsTest.java +++ b/components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbConversionsTest.java @@ -18,11 +18,14 @@ package org.apache.camel.component.mongodb3; import java.io.ByteArrayInputStream; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mongodb3.converters.MongoDbBasicConverters; import org.apache.camel.converter.IOConverter; import org.bson.Document; +import org.bson.conversions.Bson; import org.junit.Test; import static com.mongodb.client.model.Filters.eq; @@ -117,4 +120,23 @@ public class MongoDbConversionsTest extends AbstractMongoDbTest { // CHECKSTYLE:ON } + @Test + public void shouldConvertJsonStringListToBSONList() { + String jsonListArray = "[{\"key\":\"value1\"}, {\"key\":\"value2\"}]"; + List<Bson> bsonList = MongoDbBasicConverters.fromStringToList(jsonListArray); + assertNotNull(bsonList); + assertEquals(2, bsonList.size()); + + String jsonEmptyArray = "[]"; + bsonList = MongoDbBasicConverters.fromStringToList(jsonEmptyArray); + assertNotNull(bsonList); + assertEquals(0, bsonList.size()); + } + + @Test + public void shouldNotConvertJsonStringListToBSONList() { + String jsonSingleValue = "{\"key\":\"value1\"}"; + List<Bson> bsonList = MongoDbBasicConverters.fromStringToList(jsonSingleValue); + assertNull(bsonList); + } }