You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/01/23 04:44:40 UTC

svn commit: r736901 - in /camel/branches/camel-1.x: ./ components/camel-restlet/src/test/java/org/apache/camel/component/restlet/ components/camel-sql/src/main/java/org/apache/camel/component/sql/ components/camel-sql/src/test/java/org/apache/camel/com...

Author: ningjiang
Date: Thu Jan 22 19:44:40 2009
New Revision: 736901

URL: http://svn.apache.org/viewvc?rev=736901&view=rev
Log:
Merged revisions 736676 via svnmerge from 
https://svn.apache.org/repos/asf/camel/trunk

........
  r736676 | romkal | 2009-01-22 23:39:01 +0800 (Thu, 22 Jan 2009) | 2 lines
  
  CAMEL-1283: Validation of correct number of parameters added
  Null body allowed
........

Modified:
    camel/branches/camel-1.x/   (props changed)
    camel/branches/camel-1.x/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java   (props changed)
    camel/branches/camel-1.x/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
    camel/branches/camel-1.x/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java

Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 22 19:44:40 2009
@@ -1,2 +1,2 @@
 /activemq/camel/trunk:732943,733749,734053,734057-734058,734064,734130,734309,734340-734342,734348,734392,734422,734727,734903,734932,735421,735427,735732
-/camel/trunk:735847,735888,736227,736562,736617-736620
+/camel/trunk:735847,735888,736227,736562,736617-736620,736676

Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Propchange: camel/branches/camel-1.x/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jan 22 19:44:40 2009
@@ -0,0 +1 @@
+/camel/trunk/components/camel-restlet/src/test/java/org/apache/camel/component/restlet/RestletRouteBuilderTest.java:736676

Modified: camel/branches/camel-1.x/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java?rev=736901&r1=736900&r2=736901&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java (original)
+++ camel/branches/camel-1.x/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlProducer.java Thu Jan 22 19:44:40 2009
@@ -22,6 +22,7 @@
 import java.util.List;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.impl.DefaultProducer;
 import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.ColumnMapRowMapper;
@@ -45,10 +46,20 @@
             public Object doInPreparedStatement(PreparedStatement ps) throws SQLException,
                 DataAccessException {
                 int argNumber = 1;
-                for (Iterator<?> i = exchange.getIn().getBody(Iterator.class); i.hasNext();) {
-                    ps.setObject(argNumber++, i.next());
+                try {
+                    Iterator<?> iterator = exchange.getIn().getBody(Iterator.class);
+                    while (iterator != null && iterator.hasNext()) {
+                        ps.setObject(argNumber++, iterator.next());
+                    }
+                } catch (NoTypeConversionAvailableException e) {
+                    // ignored - assumed no parameters have to be used
                 }
+                if (argNumber - 1 != ps.getParameterMetaData().getParameterCount()) {
+                    throw new SQLException("To less parameters set");
+                }
+                
                 boolean isResultSet = ps.execute();
+                
                 if (isResultSet) {
                     RowMapperResultSetExtractor mapper = new RowMapperResultSetExtractor(new ColumnMapRowMapper());
                     List<?> result = (List<?>) mapper.extractData(ps.getResultSet());

Modified: camel/branches/camel-1.x/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java?rev=736901&r1=736900&r2=736901&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java (original)
+++ camel/branches/camel-1.x/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlRouteTest.java Thu Jan 22 19:44:40 2009
@@ -23,9 +23,12 @@
 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;
 
@@ -63,15 +66,26 @@
         assertEquals(1, row.get("ID"));
     }
 
-    public void testBadNumberOfParameter() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        template.sendBody("direct:list", "ASF");
-        mock.assertIsSatisfied();
-        List received = assertIsInstanceOf(List.class, mock.getReceivedExchanges().get(0).getIn().getBody());
-        assertEquals(0, received.size());
+    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);
@@ -119,6 +133,16 @@
         assertEquals((Integer)1, actualUpdateCount);
     }
 
+    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();
@@ -145,6 +169,8 @@
 
                 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");
 
@@ -157,6 +183,8 @@
                     .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");
             }
         };
     }