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 <davscl...@apache.org> Authored: Mon Aug 4 15:40:53 2014 +0200 Committer: Claus Ibsen <davscl...@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"); + } + }; + } +}