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 2009/05/26 13:17:20 UTC

svn commit: r778650 - in /camel/trunk/components/camel-ibatis/src: main/java/org/apache/camel/component/ibatis/ test/java/org/apache/camel/component/ibatis/

Author: davsclaus
Date: Tue May 26 11:17:19 2009
New Revision: 778650

URL: http://svn.apache.org/viewvc?rev=778650&view=rev
Log:
CAMEL-1649: camel-ibatis. Only set the response as Body if SELECT statement. Always set response as header. And honor MEP.

Modified:
    camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisConstants.java
    camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisProducer.java
    camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisQueryForListTest.java
    camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisUnknownStatementTypeTest.java

Modified: camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisConstants.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisConstants.java?rev=778650&r1=778649&r2=778650&view=diff
==============================================================================
--- camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisConstants.java (original)
+++ camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisConstants.java Tue May 26 11:17:19 2009
@@ -21,6 +21,8 @@
  */
 public final class IBatisConstants {
 
+    public static final String IBATIS_RESULT = "CamelIBatisResult";
+
     public static final String IBATIS_STATEMENT_NAME = "CamelIBatisStatementName";
 
     private IBatisConstants() {

Modified: camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisProducer.java?rev=778650&r1=778649&r2=778650&view=diff
==============================================================================
--- camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisProducer.java (original)
+++ camel/trunk/components/camel-ibatis/src/main/java/org/apache/camel/component/ibatis/IBatisProducer.java Tue May 26 11:17:19 2009
@@ -23,6 +23,7 @@
 import org.apache.camel.Message;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.ExchangeHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -173,8 +174,22 @@
     }
 
     private void doProcessResult(Exchange exchange, Object result) {
-        Message msg = exchange.getOut();
-        msg.setBody(result);
-        msg.setHeader(IBatisConstants.IBATIS_STATEMENT_NAME, statement);
+        if (endpoint.getStatementType() == StatementType.QueryForList || endpoint.getStatementType() == StatementType.QueryForObject ) {
+            Message answer = exchange.getIn();
+            if (ExchangeHelper.isOutCapable(exchange)) {
+                answer = exchange.getOut();
+                // preserve headers
+                answer.getHeaders().putAll(exchange.getIn().getHeaders());
+            }
+            // set the result as body for insert
+            answer.setBody(result);
+
+            answer.setHeader(IBatisConstants.IBATIS_RESULT, result);
+            answer.setHeader(IBatisConstants.IBATIS_STATEMENT_NAME, statement);
+        } else {
+            Message msg = exchange.getIn();
+            msg.setHeader(IBatisConstants.IBATIS_RESULT, result);
+            msg.setHeader(IBatisConstants.IBATIS_STATEMENT_NAME, statement);
+        }
     }
 }

Modified: camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisQueryForListTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisQueryForListTest.java?rev=778650&r1=778649&r2=778650&view=diff
==============================================================================
--- camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisQueryForListTest.java (original)
+++ camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisQueryForListTest.java Tue May 26 11:17:19 2009
@@ -17,6 +17,7 @@
 package org.apache.camel.component.ibatis;
 
 import java.util.List;
+import java.util.ArrayList;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;

Modified: camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisUnknownStatementTypeTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisUnknownStatementTypeTest.java?rev=778650&r1=778649&r2=778650&view=diff
==============================================================================
--- camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisUnknownStatementTypeTest.java (original)
+++ camel/trunk/components/camel-ibatis/src/test/java/org/apache/camel/component/ibatis/IBatisUnknownStatementTypeTest.java Tue May 26 11:17:19 2009
@@ -16,7 +16,9 @@
  */
 package org.apache.camel.component.ibatis;
 
+import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.FailedToCreateProducerException;
 import org.apache.camel.builder.RouteBuilder;
 
 /**
@@ -26,15 +28,21 @@
 
     public void testStatementTypeNotSet() throws Exception {
         try {
-            context.addRoutes(new RouteBuilder() {
-                @Override
-                public void configure() throws Exception {
-                    from("direct:start").to("ibatis:selectAllAccounts");
-                }
-            });
+            template.sendBody("direct:start", "Hello");
             fail("Should have thrown an IllegalArgumentException");
-        } catch (IllegalArgumentException e) {
-            assertEquals("statementType must be specified on: Endpoint[ibatis:selectAllAccounts]", e.getMessage());
+        } catch (CamelExecutionException e) {
+            assertIsInstanceOf(FailedToCreateProducerException.class, e.getCause());
+            assertEquals("statementType must be specified on: Endpoint[ibatis:selectAllAccounts]", e.getCause().getCause().getMessage());
         }
     }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("ibatis:selectAllAccounts");
+            }
+        };
+    }
 }