This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 1cb54635595 CAMEL-18321: camel-mybatis - Should support using Map
message body as-is for insert/update
1cb54635595 is described below
commit 1cb54635595de85f30e0df6c9a71a7c849abff83
Author: Claus Ibsen <[email protected]>
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", "[email protected]");
+
+ 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() {