Author: davsclaus
Date: Tue Jul 26 10:45:12 2011
New Revision: 1151059

URL: http://svn.apache.org/viewvc?rev=1151059&view=rev
Log:
CAMEL-3961: Improved error message if invalid arguments when invoking bean 
using bean component.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanParameterNoBeanBindingTest.java
      - copied, changed from r1151048, 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanParameterInvalidValueTest.java
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java?rev=1151059&r1=1151058&r2=1151059&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
 Tue Jul 26 10:45:12 2011
@@ -37,6 +37,7 @@ import org.apache.camel.ExpressionEvalua
 import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.Pattern;
 import org.apache.camel.Processor;
+import org.apache.camel.RuntimeExchangeException;
 import org.apache.camel.impl.ExpressionAdapter;
 import org.apache.camel.processor.DynamicRouter;
 import org.apache.camel.processor.RecipientList;
@@ -329,7 +330,11 @@ public class MethodInfo {
     }
 
     protected Object invoke(Method mth, Object pojo, Object[] arguments, 
Exchange exchange) throws IllegalAccessException, InvocationTargetException {
-        return mth.invoke(pojo, arguments);
+        try {
+            return mth.invoke(pojo, arguments);
+        } catch (IllegalArgumentException e) {
+            throw new RuntimeExchangeException("IllegalArgumentException 
occurred invoking method: " + mth + " using arguments: " + 
Arrays.asList(arguments), exchange, e);
+        }
     }
 
     protected Expression createParametersExpression() {

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanParameterNoBeanBindingTest.java
 (from r1151048, 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanParameterInvalidValueTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanParameterNoBeanBindingTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanParameterNoBeanBindingTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanParameterInvalidValueTest.java&r1=1151048&r2=1151059&rev=1151059&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanParameterInvalidValueTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanParameterNoBeanBindingTest.java
 Tue Jul 26 10:45:12 2011
@@ -16,19 +16,16 @@
  */
 package org.apache.camel.component.bean;
 
-import java.util.Map;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.ExpressionEvaluationException;
-import org.apache.camel.NoTypeConversionAvailableException;
+import org.apache.camel.RuntimeExchangeException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
 
 /**
  *
  */
-public class BeanParameterInvalidValueTest extends ContextTestSupport {
+public class BeanParameterNoBeanBindingTest extends ContextTestSupport {
 
     public void testBeanParameterInvalidValueA() throws Exception {
         getMockEndpoint("mock:result").expectedMessageCount(0);
@@ -37,49 +34,10 @@ public class BeanParameterInvalidValueTe
             template.sendBody("direct:a", "World");
             fail("Should have thrown exception");
         } catch (CamelExecutionException e) {
-            NoTypeConversionAvailableException cause = 
assertIsInstanceOf(NoTypeConversionAvailableException.class, e.getCause());
-            assertEquals(String.class, cause.getFromType());
-            assertEquals(int.class, cause.getToType());
-            assertEquals("A", cause.getValue());
-        }
-
-        assertMockEndpointsSatisfied();
-    }
-
-    public void testBeanParameterInvalidValueB() throws Exception {
-        getMockEndpoint("mock:result").expectedMessageCount(0);
-
-        try {
-            template.sendBody("direct:b", "World");
-            fail("Should have thrown exception");
-        } catch (CamelExecutionException e) {
-            NoTypeConversionAvailableException cause = 
assertIsInstanceOf(NoTypeConversionAvailableException.class, e.getCause());
-            assertEquals(String.class, cause.getFromType());
-            assertEquals(int.class, cause.getToType());
-            assertEquals("true", cause.getValue());
-        }
-
-        assertMockEndpointsSatisfied();
-    }
-
-    public void testBeanParameterNullC() throws Exception {
-        // should be an empty string
-        getMockEndpoint("mock:result").expectedBodiesReceived("");
-
-        template.sendBody("direct:c", "World");
-
-        assertMockEndpointsSatisfied();
-    }
-
-    public void testBeanParameterInvalidValueD() throws Exception {
-        getMockEndpoint("mock:result").expectedMessageCount(0);
-
-        try {
-            template.sendBody("direct:d", "World");
-            fail("Should have thrown exception");
-        } catch (CamelExecutionException e) {
-            ExpressionEvaluationException cause = 
assertIsInstanceOf(ExpressionEvaluationException.class, e.getCause());
-            assertEquals("Illegal syntax: xxx", cause.getCause().getMessage());
+            RuntimeExchangeException cause = 
assertIsInstanceOf(RuntimeExchangeException.class, e.getCause());
+            
assertTrue(cause.getMessage().contains("echo(java.lang.String,int)"));
+            assertTrue(cause.getMessage().contains("[World, null]"));
+            assertIsInstanceOf(IllegalArgumentException.class, 
cause.getCause());
         }
 
         assertMockEndpointsSatisfied();
@@ -98,19 +56,7 @@ public class BeanParameterInvalidValueTe
             @Override
             public void configure() throws Exception {
                 from("direct:a")
-                    .to("bean:foo?method=echo(*, 'A')")
-                    .to("mock:result");
-
-                from("direct:b")
-                    .to("bean:foo?method=echo(*, true)")
-                    .to("mock:result");
-
-                from("direct:c")
-                    .to("bean:foo?method=echo(null, 2)")
-                    .to("mock:result");
-
-                from("direct:d")
-                    .to("bean:foo?method=echo(${xxx}, 2)")
+                    .to("bean:foo?method=echo")
                     .to("mock:result");
             }
         };
@@ -135,9 +81,5 @@ public class BeanParameterInvalidValueTe
             return body;
         }
 
-        public String heads(String body, Map headers) {
-            return headers.get("hello") + " " + body;
-        }
-
     }
 }


Reply via email to