Repository: camel Updated Branches: refs/heads/camel-2.16.x 9216caf3d -> 54b3bf740
CAMEL-9805: camel-sql - body not copied from in to out when useing outputHeader and outputType=SelectOne when sql doesn't return a result Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/680444ea Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/680444ea Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/680444ea Branch: refs/heads/camel-2.16.x Commit: 680444ea87800ad22166cc33ef8e20315c172f9a Parents: 9216caf Author: Andrea Cosentino <anco...@gmail.com> Authored: Thu Apr 28 09:35:28 2016 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Thu Apr 28 09:57:28 2016 +0200 ---------------------------------------------------------------------- .../apache/camel/component/sql/SqlProducer.java | 7 +++ ...ProducerOutputTypeSelectOneNoResultTest.java | 61 ++++++++++++++++++++ .../sql/createAndPopulateDatabase5.sql | 6 ++ 3 files changed, 74 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/680444ea/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java index 9f2e9d2..7db8772 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java @@ -175,6 +175,13 @@ public class SqlProducer extends DefaultProducer { exchange.getOut().setBody(data); } exchange.getOut().setHeader(SqlConstants.SQL_ROW_COUNT, 1); + } else { + if (getEndpoint().isNoop()) { + exchange.getOut().setBody(exchange.getIn().getBody()); + } else if (getEndpoint().getOutputHeader() != null) { + exchange.getOut().setBody(exchange.getIn().getBody()); + } + exchange.getOut().setHeader(SqlConstants.SQL_ROW_COUNT, 0); } } else { throw new IllegalArgumentException("Invalid outputType=" + outputType); http://git-wip-us.apache.org/repos/asf/camel/blob/680444ea/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerOutputTypeSelectOneNoResultTest.java ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerOutputTypeSelectOneNoResultTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerOutputTypeSelectOneNoResultTest.java new file mode 100644 index 0000000..a476d68 --- /dev/null +++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerOutputTypeSelectOneNoResultTest.java @@ -0,0 +1,61 @@ +package org.apache.camel.component.sql; + +import org.apache.camel.EndpointInject; +import org.apache.camel.Produce; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.apache.camel.test.spring.CamelSpringDelegatingTestContextLoader; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; + +public class SqlProducerOutputTypeSelectOneNoResultTest extends CamelTestSupport{ + + @EndpointInject(uri = "mock:result") + MockEndpoint result; + + private EmbeddedDatabase db; + + @Before + public void setUp() throws Exception { + db = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.DERBY).addScript("sql/createAndPopulateDatabase5.sql").build(); + + super.setUp(); + } + + @After + public void tearDown() throws Exception { + super.tearDown(); + + db.shutdown(); + } + + @Test + public void testSqlEndpoint() throws Exception { + + String expectedBody = "body"; + result.expectedBodiesReceived(expectedBody); + template.sendBody("direct:start",expectedBody); + result.assertIsSatisfied(); + + } + + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() { + getContext().getComponent("sql", SqlComponent.class).setDataSource(db); + + from("direct:start") + .to("sql:select id from mytable where 1 = 2?outputHeader=myHeader&outputType=SelectOne") + .log("${body}").to("mock:result"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/680444ea/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase5.sql ---------------------------------------------------------------------- diff --git a/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase5.sql b/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase5.sql new file mode 100644 index 0000000..f1b3007 --- /dev/null +++ b/components/camel-sql/src/test/resources/sql/createAndPopulateDatabase5.sql @@ -0,0 +1,6 @@ +CREATE TABLE MYTABLE ( + ID INT PRIMARY KEY, + SUBJECT VARCHAR(255) +); + +insert into MYTABLE (ID, SUBJECT) VALUES (1, 'subject');