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 =