You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/06/26 22:13:12 UTC

[6/6] git commit: CAMEL-7432: camel-mybatis should keep message body as-is if calling stored procedure and it did not return data, but are using OUT parameters etc.

CAMEL-7432: camel-mybatis should keep message body as-is if calling stored procedure and it did not return data, but are using OUT parameters etc.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/53c75549
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/53c75549
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/53c75549

Branch: refs/heads/camel-2.12.x
Commit: 53c75549f55d515133b697fa33980b6228fd44bb
Parents: 1f861c6
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Jun 26 21:56:40 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jun 26 22:12:48 2014 +0200

----------------------------------------------------------------------
 .../component/mybatis/MyBatisProducer.java      | 50 +++++++++++++-------
 1 file changed, 33 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/53c75549/components/camel-mybatis/src/main/java/org/apache/camel/component/mybatis/MyBatisProducer.java
----------------------------------------------------------------------
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 03367e3..6465636 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
@@ -23,6 +23,7 @@ import org.apache.camel.Message;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.session.ExecutorType;
 import org.apache.ibatis.session.SqlSession;
 import org.slf4j.Logger;
@@ -105,7 +106,7 @@ public class MyBatisProducer extends DefaultProducer {
             result = session.selectOne(statement);
         }
 
-        doProcessResult(exchange, result);
+        doProcessResult(exchange, result, session);
     }
 
     private void doSelectList(Exchange exchange, SqlSession session) throws Exception {
@@ -119,7 +120,7 @@ public class MyBatisProducer extends DefaultProducer {
             result = session.selectList(statement);
         }
 
-        doProcessResult(exchange, result);
+        doProcessResult(exchange, result, session);
     }
 
     private void doInsert(Exchange exchange, SqlSession session) throws Exception {
@@ -132,12 +133,12 @@ public class MyBatisProducer extends DefaultProducer {
                 Object value = iter.next();
                 LOG.trace("Inserting: {} using statement: {}", value, statement);
                 result = session.insert(statement, value);
-                doProcessResult(exchange, result);
+                doProcessResult(exchange, result, session);
             }
         } else {
             LOG.trace("Inserting using statement: {}", statement);
             result = session.insert(statement);
-            doProcessResult(exchange, result);
+            doProcessResult(exchange, result, session);
         }
     }
 
@@ -148,11 +149,11 @@ public class MyBatisProducer extends DefaultProducer {
             // just pass in the body as Object and allow MyBatis to iterate using its own foreach statement
             LOG.trace("Inserting: {} using statement: {}", in, statement);
             result = session.insert(statement, in);
-            doProcessResult(exchange, result);
+            doProcessResult(exchange, result, session);
         } else {
             LOG.trace("Inserting using statement: {}", statement);
             result = session.insert(statement);
-            doProcessResult(exchange, result);
+            doProcessResult(exchange, result, session);
         }
     }
 
@@ -166,12 +167,12 @@ public class MyBatisProducer extends DefaultProducer {
                 Object value = iter.next();
                 LOG.trace("Updating: {} using statement: {}", value, statement);
                 result = session.update(statement, value);
-                doProcessResult(exchange, result);
+                doProcessResult(exchange, result, session);
             }
         } else {
             LOG.trace("Updating using statement: {}", statement);
             result = session.update(statement);
-            doProcessResult(exchange, result);
+            doProcessResult(exchange, result, session);
         }
     }
 
@@ -182,11 +183,11 @@ public class MyBatisProducer extends DefaultProducer {
             // just pass in the body as Object and allow MyBatis to iterate using its own foreach statement
             LOG.trace("Updating: {} using statement: {}", in, statement);
             result = session.update(statement, in);
-            doProcessResult(exchange, result);
+            doProcessResult(exchange, result, session);
         } else {
             LOG.trace("Updating using statement: {}", statement);
             result = session.update(statement);
-            doProcessResult(exchange, result);
+            doProcessResult(exchange, result, session);
         }
     }
 
@@ -200,12 +201,12 @@ public class MyBatisProducer extends DefaultProducer {
                 Object value = iter.next();
                 LOG.trace("Deleting: {} using statement: {}", value, statement);
                 result = session.delete(statement, value);
-                doProcessResult(exchange, result);
+                doProcessResult(exchange, result, session);
             }
         } else {
             LOG.trace("Deleting using statement: {}", statement);
             result = session.delete(statement);
-            doProcessResult(exchange, result);
+            doProcessResult(exchange, result, session);
         }
     }
 
@@ -216,15 +217,15 @@ public class MyBatisProducer extends DefaultProducer {
             // just pass in the body as Object and allow MyBatis to iterate using its own foreach statement
             LOG.trace("Deleting: {} using statement: {}", in, statement);
             result = session.delete(statement, in);
-            doProcessResult(exchange, result);
+            doProcessResult(exchange, result, session);
         } else {
             LOG.trace("Deleting using statement: {}", statement);
             result = session.delete(statement);
-            doProcessResult(exchange, result);
+            doProcessResult(exchange, result, session);
         }
     }
 
-    private void doProcessResult(Exchange exchange, Object result) {
+    private void doProcessResult(Exchange exchange, Object result, SqlSession session) {
         if (endpoint.getStatementType() == StatementType.SelectList || endpoint.getStatementType() == StatementType.SelectOne) {
             Message answer = exchange.getIn();
             if (ExchangeHelper.isOutCapable(exchange)) {
@@ -232,8 +233,23 @@ public class MyBatisProducer extends DefaultProducer {
                 // preserve headers
                 answer.getHeaders().putAll(exchange.getIn().getHeaders());
             }
-            // set the result as body for insert
-            answer.setBody(result);
+
+            // we should not set the body if its a stored procedure as the result is already in its OUT parameter
+            MappedStatement ms = session.getConfiguration().getMappedStatement(statement);
+            if (ms != null && ms.getStatementType() == org.apache.ibatis.mapping.StatementType.CALLABLE) {
+                if (result == null) {
+                    LOG.trace("Setting result as existing body as MyBatis statement type is Callable, and there was no result.");
+                    answer.setBody(exchange.getIn().getBody());
+                } else {
+                    // set the result as body for insert
+                    LOG.trace("Setting result as body: {}", result);
+                    answer.setBody(result);
+                }
+            } else {
+                // set the result as body for insert
+                LOG.trace("Setting result as body: {}", result);
+                answer.setBody(result);
+            }
 
             answer.setHeader(MyBatisConstants.MYBATIS_RESULT, result);
             answer.setHeader(MyBatisConstants.MYBATIS_STATEMENT_NAME, statement);