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/01/23 07:03:40 UTC
svn commit: r736953 - in /camel/trunk/components/camel-sql/src:
main/java/org/apache/camel/component/sql/SqlProducer.java
test/java/org/apache/camel/component/sql/SqlPreserveHeaderTest.java
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 =