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:08 UTC
[2/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/53e95788
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/53e95788
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/53e95788
Branch: refs/heads/master
Commit: 53e95788f7ebcd8efbffc633e177105fa0cfdadc
Parents: 1796abc
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 21:56:40 2014 +0200
----------------------------------------------------------------------
.../component/mybatis/MyBatisProducer.java | 50 +++++++++++++-------
1 file changed, 33 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/53e95788/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);