This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 948bbd6 fix(mongodb): converter failure (#5177) 948bbd6 is described below commit 948bbd6a525451ace741e3ca1a06604220841f4b Author: Pasquale Congiusti <pasquale.congiu...@gmail.com> AuthorDate: Mon Mar 8 19:00:48 2021 +0100 fix(mongodb): converter failure (#5177) Checking that the value to be converted from a String to List is an array in order to avoid a BsonInvalidOperationException when the method is called. --- .../mongodb/converters/MongoDbBasicConverters.java | 10 ++++++++- .../component/mongodb/MongoDbConversionsTest.java | 24 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/converters/MongoDbBasicConverters.java b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/converters/MongoDbBasicConverters.java index 9a3748f..b093304 100644 --- a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/converters/MongoDbBasicConverters.java +++ b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/converters/MongoDbBasicConverters.java @@ -117,8 +117,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())); @@ -136,4 +139,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-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConversionsTest.java b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConversionsTest.java index 72cbb4f..2a721f6 100644 --- a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConversionsTest.java +++ b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConversionsTest.java @@ -18,15 +18,19 @@ package org.apache.camel.component.mongodb; 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.mongodb.converters.MongoDbBasicConverters; import org.apache.camel.converter.IOConverter; import org.bson.Document; +import org.bson.conversions.Bson; import org.junit.jupiter.api.Test; import static com.mongodb.client.model.Filters.eq; import static org.apache.camel.component.mongodb.MongoDbConstants.MONGO_ID; +import static org.junit.Assert.assertNull; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -135,4 +139,24 @@ public class MongoDbConversionsTest extends AbstractMongoDbTest { // CHECKSTYLE:ON } + @Test + public void shouldConvertJsonStringListToBSONList() throws InterruptedException { + 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() throws InterruptedException { + String jsonSingleValue = "{\"key\":\"value1\"}"; + List<Bson> bsonList = MongoDbBasicConverters.fromStringToList(jsonSingleValue); + assertNull(bsonList); + } + }