Author: davsclaus
Date: Thu Jan 22 22:03:39 2009
New Revision: 736953

URL: http://svn.apache.org/viewvc?rev=736953&view=rev
Log:
CAMEL-1292: SQL component should preserve headers from IN message

Added:
    
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java
   (contents, props changed)
      - copied, changed from r736917, 
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java
Modified:
    
camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java

Modified: 
camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java?rev=736953&r1=736952&r2=736953&view=diff
==============================================================================
--- 
camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
 (original)
+++ 
camel/trunk/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
 Thu Jan 22 22:03:39 2009
@@ -54,8 +54,11 @@
                 } catch (NoTypeConversionAvailableException e) {
                     // ignored - assumed no parameters have to be used
                 }
-                if (argNumber - 1 != 
ps.getParameterMetaData().getParameterCount()) {
-                    throw new SQLException("To less parameters set");
+
+                // number of parameters must match
+                int expected = ps.getParameterMetaData().getParameterCount();
+                if (argNumber - 1 != expected) {
+                    throw new SQLException("Number of parameters mismatch. 
Expected: " + expected + ", was:" + (argNumber - 1));
                 }
                 
                 boolean isResultSet = ps.execute();
@@ -64,9 +67,13 @@
                     RowMapperResultSetExtractor mapper = new 
RowMapperResultSetExtractor(new ColumnMapRowMapper());
                     List<?> result = (List<?>) 
mapper.extractData(ps.getResultSet());
                     exchange.getOut().setBody(result);
+                    // preserve headers
+                    
exchange.getOut().setHeaders(exchange.getIn().getHeaders());
                 } else {
                     exchange.getIn().setHeader(UPDATE_COUNT, 
ps.getUpdateCount());
                 }
+
+                // data is set on exchange so return null
                 return null;
             }
         });

Copied: 
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java
 (from r736917, 
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java?p2=camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java&p1=camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java&r1=736917&r2=736953&rev=736953&view=diff
==============================================================================
--- 
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java
 (original)
+++ 
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java
 Thu Jan 22 22:03:39 2009
@@ -16,26 +16,18 @@
  */
 package org.apache.camel.component.sql;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
 import javax.sql.DataSource;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.springframework.dao.DataAccessException;
-import org.springframework.dao.EmptyResultDataAccessException;
-import org.springframework.jdbc.UncategorizedSQLException;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.datasource.SingleConnectionDataSource;
 
 /**
  * @version $Revision$
  */
-public class SqlRouteTest extends ContextTestSupport {
+public class SqlPreserveHeaderTest extends ContextTestSupport {
     protected String driverClass = "org.hsqldb.jdbcDriver";
     protected String url = "jdbc:hsqldb:mem:camel_jdbc";
     protected String user = "sa";
@@ -43,106 +35,16 @@
     private DataSource ds;
     private JdbcTemplate jdbcTemplate;
 
-    public void testSimpleBody() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        template.sendBody("direct:simple", "GPL");
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, 
mock.getReceivedExchanges().get(0).getIn().getBody());
-        Map row = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals("Linux", row.get("PROJECT"));
-    }
-
-    public void testListBody() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        List<Object> body = new ArrayList<Object>();
-        body.add("ASF");
-        body.add("Camel");
-        template.sendBody("direct:list", body);
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, 
mock.getReceivedExchanges().get(0).getIn().getBody());
-        Map row = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals(1, row.get("ID"));
-    }
-
-    public void testLowNumberOfParameter() throws Exception {
-        try {
-            template.sendBody("direct:list", "ASF");
-            fail();
-        } catch (RuntimeCamelException e) {
-            // should have DataAccessException thrown
-            assertTrue("Exception thrown is wrong", e.getCause() instanceof 
DataAccessException);
-        }
-    }
-
-    public void testHighNumberOfParameter() throws Exception {
-        try {
-            template.sendBody("direct:simple", new Object[] {"ASF", "Foo"});
-            fail();
-        } catch (RuntimeCamelException e) {
-            // should have DataAccessException thrown
-            assertTrue("Exception thrown is wrong", e.getCause() instanceof 
DataAccessException);
-        }
-    }
-    
-    public void testListResult() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        List<Object> body = new ArrayList<Object>();
-        body.add("ASF");
-        template.sendBody("direct:simple", body);
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, 
mock.getReceivedExchanges().get(0).getIn().getBody());
-        assertEquals(2, received.size());
-        Map row1 = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals("Camel", row1.get("PROJECT"));
-        Map row2 = assertIsInstanceOf(Map.class, received.get(1));
-        assertEquals("AMQ", row2.get("PROJECT"));
-    }
-
-    public void testListLimitedResult() throws Exception {
+    public void testPreserveHeaders() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMessageCount(1);
-        List<Object> body = new ArrayList<Object>();
-        body.add("ASF");
-        template.sendBody("direct:simpleLimited", body);
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, 
mock.getReceivedExchanges().get(0).getIn().getBody());
-        assertEquals(1, received.size());
-        Map row1 = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals("Camel", row1.get("PROJECT"));
-    }
+        mock.expectedHeaderReceived("foo", "bar");
 
-    public void testInsert() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
+        template.sendBody("direct:start", "");
 
-        template.sendBody("direct:insert", new Object[] {10, "test", "test"});
-        mock.assertIsSatisfied();
-        try {
-            String projectName = (String)jdbcTemplate
-                .queryForObject("select project from projects where id = 10", 
String.class);
-            assertEquals("test", projectName);
-        } catch (EmptyResultDataAccessException e) {
-            fail("no row inserted");
-        }
-
-        Integer actualUpdateCount = 
mock.getExchanges().get(0).getIn().getHeader(SqlProducer.UPDATE_COUNT,
-                                                                               
  Integer.class);
-        assertEquals((Integer)1, actualUpdateCount);
+        assertMockEndpointsSatisfied();
     }
 
-    public void testNoBody() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        template.sendBody("direct:no-param", null);
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, 
mock.getReceivedExchanges().get(0).getIn().getBody());
-        Map row = assertIsInstanceOf(Map.class, received.get(0));
-        assertEquals("Camel", row.get("PROJECT"));
-    }
-    
     protected void setUp() throws Exception {
         Class.forName(driverClass);
         super.setUp();
@@ -170,23 +72,13 @@
                 getContext().getComponent("sql", 
SqlComponent.class).setDataSource(ds);
 
                 errorHandler(noErrorHandler());
-                
-                from("direct:simple").to("sql:select * from projects where 
license = # order by id")
-                    .to("mock:result");
 
-                from("direct:list")
-                    .to("sql:select * from projects where license = # and 
project = # order by id")
+                from("direct:start")
+                    .setHeader("foo", constant("bar"))
+                    .to("sql:select * from projects")
                     .to("mock:result");
-
-                from("direct:simpleLimited")
-                    .to("sql:select * from projects where license = # order by 
id?template.maxRows=1")
-                    .to("mock:result");
-
-                from("direct:insert").to("sql:insert into projects values (#, 
#, #)").to("mock:result");
-                
-                from("direct:no-param").to("sql:select * from projects order 
by id").to("mock:result");
             }
         };
     }
 
-}
+}
\ No newline at end of file

Propchange: 
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: 
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: 
camel/trunk/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java
------------------------------------------------------------------------------
    svn:mergeinfo = 


Reply via email to