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

Reply via email to