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);
+    }
 }

Reply via email to