This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.18.x by this push:
     new d4863407aea CAMEL-18321: camel-mybatis - Should support using Map 
message body as-is for insert/update
d4863407aea is described below

commit d4863407aea2a482e231bccdbb47842b18b3d9af
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Jul 28 17:23:20 2022 +0200

    CAMEL-18321: camel-mybatis - Should support using Map message body as-is 
for insert/update
---
 .../camel/component/mybatis/MyBatisProducer.java   | 29 +++++++++++++++++-----
 .../camel/component/mybatis/MyBatisInsertTest.java | 23 +++++++++++++++++
 2 files changed, 46 insertions(+), 6 deletions(-)

diff --git 
a/components/camel-mybatis/src/main/java/org/apache/camel/component/mybatis/MyBatisProducer.java
 
b/components/camel-mybatis/src/main/java/org/apache/camel/component/mybatis/MyBatisProducer.java
index f3e34695f02..4e54d2689a2 100644
--- 
a/components/camel-mybatis/src/main/java/org/apache/camel/component/mybatis/MyBatisProducer.java
+++ 
b/components/camel-mybatis/src/main/java/org/apache/camel/component/mybatis/MyBatisProducer.java
@@ -16,7 +16,9 @@
  */
 package org.apache.camel.component.mybatis;
 
+import java.util.Collections;
 import java.util.Iterator;
+import java.util.Map;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -125,8 +127,13 @@ public class MyBatisProducer extends DefaultProducer {
         Object result;
         Object in = getInput(exchange);
         if (in != null) {
-            // lets handle arrays or collections of objects
-            Iterator<?> iter = ObjectHelper.createIterator(in);
+            Iterator<?> iter;
+            if (in instanceof Map) {
+                // we want the map as-is
+                iter = Collections.singletonList(in).iterator();
+            } else {
+                iter = ObjectHelper.createIterator(in);
+            }
             while (iter.hasNext()) {
                 Object value = iter.next();
                 LOG.trace("Inserting: {} using statement: {}", value, 
statement);
@@ -159,8 +166,13 @@ public class MyBatisProducer extends DefaultProducer {
         Object result;
         Object in = getInput(exchange);
         if (in != null) {
-            // lets handle arrays or collections of objects
-            Iterator<?> iter = ObjectHelper.createIterator(in);
+            Iterator<?> iter;
+            if (in instanceof Map) {
+                // we want the map as-is
+                iter = Collections.singletonList(in).iterator();
+            } else {
+                iter = ObjectHelper.createIterator(in);
+            }
             while (iter.hasNext()) {
                 Object value = iter.next();
                 LOG.trace("Updating: {} using statement: {}", value, 
statement);
@@ -193,8 +205,13 @@ public class MyBatisProducer extends DefaultProducer {
         Object result;
         Object in = getInput(exchange);
         if (in != null) {
-            // lets handle arrays or collections of objects
-            Iterator<?> iter = ObjectHelper.createIterator(in);
+            Iterator<?> iter;
+            if (in instanceof Map) {
+                // we want the map as-is
+                iter = Collections.singletonList(in).iterator();
+            } else {
+                iter = ObjectHelper.createIterator(in);
+            }
             while (iter.hasNext()) {
                 Object value = iter.next();
                 LOG.trace("Deleting: {} using statement: {}", value, 
statement);
diff --git 
a/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisInsertTest.java
 
b/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisInsertTest.java
index 54d6afd8f14..02e16efa35d 100644
--- 
a/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisInsertTest.java
+++ 
b/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisInsertTest.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.mybatis;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
@@ -44,6 +47,26 @@ public class MyBatisInsertTest extends MyBatisTestSupport {
         assertEquals(3, rows.intValue(), "There should be 3 rows");
     }
 
+    @Test
+    public void testInsertMap() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMessageCount(1);
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("id", 555);
+        map.put("firstName", "Donald");
+        map.put("lastName", "Duck");
+        map.put("emailAddress", "don...@duck.com");
+
+        template.sendBody("direct:start", map);
+
+        assertMockEndpointsSatisfied();
+
+        // there should be 3 rows now
+        Integer rows = 
template.requestBody("mybatis:count?statementType=SelectOne", null, 
Integer.class);
+        assertEquals(3, rows.intValue(), "There should be 3 rows");
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {

Reply via email to