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 2014/08/04 15:41:02 UTC
git commit: CAMEL-7645: Added support for outputClass for SelectList
to return a List of pojos.
Repository: camel
Updated Branches:
refs/heads/master 1be89fe5c -> 2e00b551c
CAMEL-7645: Added support for outputClass for SelectList to return a List of pojos.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2e00b551
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2e00b551
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2e00b551
Branch: refs/heads/master
Commit: 2e00b551c0467c87374de5f922f2d427123ca2b2
Parents: 1be89fe
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Aug 4 15:40:53 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Aug 4 15:40:53 2014 +0200
----------------------------------------------------------------------
.../camel/component/jdbc/JdbcProducer.java | 16 +++--
...ucerOutputTypeSelectListOutputClassTest.java | 63 ++++++++++++++++++++
2 files changed, 75 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/2e00b551/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
index 148eb9c..5440b87 100644
--- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
+++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
@@ -312,7 +312,7 @@ public class JdbcProducer extends DefaultProducer {
exchange.getOut().setBody(iterator);
exchange.addOnCompletion(new ResultSetIteratorCompletion(iterator));
} else if (outputType == JdbcOutputType.SelectList) {
- List<Map<String, Object>> list = extractRows(iterator);
+ List<?> list = extractRows(iterator);
exchange.getOut().setHeader(JdbcConstants.JDBC_ROW_COUNT, list.size());
exchange.getOut().setBody(list);
} else if (outputType == JdbcOutputType.SelectOne) {
@@ -320,12 +320,20 @@ public class JdbcProducer extends DefaultProducer {
}
}
- private List<Map<String, Object>> extractRows(ResultSetIterator iterator) {
+ @SuppressWarnings("unchecked")
+ private List extractRows(ResultSetIterator iterator) throws SQLException {
try {
- List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
+ List result = new ArrayList();
int maxRowCount = readSize == 0 ? Integer.MAX_VALUE : readSize;
for (int i = 0; iterator.hasNext() && i < maxRowCount; i++) {
- result.add(iterator.next());
+ Map<String, Object> row = iterator.next();
+ Object value;
+ if (getEndpoint().getOutputClass() != null) {
+ value = newBeanInstance(row);
+ } else {
+ value = row;
+ }
+ result.add(value);
}
return result;
} finally {
http://git-wip-us.apache.org/repos/asf/camel/blob/2e00b551/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerOutputTypeSelectListOutputClassTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerOutputTypeSelectListOutputClassTest.java b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerOutputTypeSelectListOutputClassTest.java
new file mode 100644
index 0000000..b536b87
--- /dev/null
+++ b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerOutputTypeSelectListOutputClassTest.java
@@ -0,0 +1,63 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jdbc;
+
+import java.util.List;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Test;
+
+public class JdbcProducerOutputTypeSelectListOutputClassTest extends AbstractJdbcTestSupport {
+
+ @EndpointInject(uri = "mock:result")
+ private MockEndpoint mock;
+
+ @SuppressWarnings({"unchecked"})
+ @Test
+ public void testOutputTypeSelectListOutputClass() throws Exception {
+ mock.expectedMessageCount(1);
+
+ template.sendBody("direct:start", "select * from customer order by ID");
+
+ assertMockEndpointsSatisfied();
+
+ List list = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody(List.class));
+ assertNotNull(list);
+ assertEquals(3, list.size());
+
+ CustomerModel cust1 = (CustomerModel) list.get(0);
+ assertEquals("cust1", cust1.getId());
+ assertEquals("jstrachan", cust1.getName());
+ CustomerModel cust2 = (CustomerModel) list.get(1);
+ assertEquals("cust2", cust2.getId());
+ assertEquals("nsandhu", cust2.getName());
+ CustomerModel cust3 = (CustomerModel) list.get(2);
+ assertEquals("cust3", cust3.getId());
+ assertEquals("willem", cust3.getName());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+ from("direct:start").to("jdbc:testdb?outputType=SelectList&outputClass=org.apache.camel.component.jdbc.CustomerModel").to("mock:result");
+ }
+ };
+ }
+}