Author: ningjiang
Date: Fri Jul 25 03:44:47 2008
New Revision: 679753

URL: http://svn.apache.org/viewvc?rev=679753&view=rev
Log:
CAMEL-743 Enabled the BeanMethodWithMultipleParametersTest

Modified:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanEndpoint.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultParameterMappingStrategy.java
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
    
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanMethodWithMultipleParametersTest.java

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanEndpoint.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanEndpoint.java?rev=679753&r1=679752&r2=679753&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanEndpoint.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanEndpoint.java
 Fri Jul 25 03:44:47 2008
@@ -28,6 +28,7 @@
  */
 public class BeanEndpoint extends ProcessorEndpoint {
     private boolean cache;
+    private boolean multiParameterArray;
     private String beanName;
     private String method;
     private BeanHolder beanHolder;
@@ -67,6 +68,14 @@
         this.beanName = beanName;
     }
 
+    public boolean isMultiParameterArray() {
+        return multiParameterArray;
+    }
+
+    public void setMultiParameterArray(boolean mpArray) {
+        multiParameterArray = mpArray;
+    }
+
     public boolean isCache() {
         return cache;
     }
@@ -118,6 +127,8 @@
         if (method != null) {
             processor.setMethod(method);
         }
+        processor.setMultiParameterArray(isMultiParameterArray());
+
         return processor;
     }
 }

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java?rev=679753&r1=679752&r2=679753&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
 Fri Jul 25 03:44:47 2008
@@ -161,12 +161,7 @@
                     parameterInfo.setExpression(expression);
                     bodyParameters.add(parameterInfo);
                 } else {
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("No expression available for method: " + 
method.toString()
-                                  + " which already has a body so ignoring 
parameter: " + i
-                                  + " so ignoring method");
-                    }
-                    return null;
+                    // will ignore the expression for parameter evaluation
                 }
             }
 
@@ -181,6 +176,7 @@
          * name.length() > 0) { opName = name; } }
          */
         MethodInfo methodInfo = new MethodInfo(clazz, method, parameters, 
bodyParameters, hasCustomAnnotation);
+
         operations.put(opName, methodInfo);
         if (methodInfo.hasBodyParameter()) {
             operationsWithBody.add(methodInfo);
@@ -230,7 +226,7 @@
                     // skip this method as the MEP is Out so the method must 
return someting
                     continue;
                 }
-                
+
                 // try to match the arguments
                 if (methodInfo.bodyParameterMatches(bodyType)) {
                     possibles.add(methodInfo);

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java?rev=679753&r1=679752&r2=679753&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanProcessor.java
 Fri Jul 25 03:44:47 2008
@@ -37,8 +37,10 @@
  */
 public class BeanProcessor extends ServiceSupport implements Processor {
     public static final String METHOD_NAME = "org.apache.camel.MethodName";
+    public static final String MULTI_PARAMETER_ARRAY = 
"org.apache.camel.MultiParameterArray";
     private static final transient Log LOG = 
LogFactory.getLog(BeanProcessor.class);
 
+    private boolean multiParameterArray;
     private Method methodObject;
     private String method;
     private BeanHolder beanHolder;
@@ -82,6 +84,11 @@
             return;
         }
         Message in = exchange.getIn();
+
+        if (in.getHeader(MULTI_PARAMETER_ARRAY) == null) {
+            in.setHeader(MULTI_PARAMETER_ARRAY, isMultiParameterArray());
+        }
+
         BeanInvocation beanInvoke = in.getBody(BeanInvocation.class);
         if (beanInvoke != null) {
             beanInvoke.invoke(bean, exchange);
@@ -162,6 +169,14 @@
         return method;
     }
 
+    public boolean isMultiParameterArray() {
+        return multiParameterArray;
+    }
+
+    public void setMultiParameterArray(boolean mpArray) {
+        multiParameterArray = mpArray;
+    }
+
     /**
      * Sets the method name to use
      */

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultParameterMappingStrategy.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultParameterMappingStrategy.java?rev=679753&r1=679752&r2=679753&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultParameterMappingStrategy.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/DefaultParameterMappingStrategy.java
 Fri Jul 25 03:44:47 2008
@@ -27,7 +27,7 @@
 /**
  * Represents the strategy used to figure out how to map a message exchange to 
a POJO method invocation
  *
- * @version $Revision:$
+ * @version $Revision$
  */
 public class DefaultParameterMappingStrategy implements 
ParameterMappingStrategy {
     private Map<Class, Expression> parameterTypeToExpressionMap = new 
ConcurrentHashMap<Class, Expression>();
@@ -37,7 +37,9 @@
     }
 
     public synchronized Expression getDefaultParameterTypeExpression(Class 
parameterType) {
-        return parameterTypeToExpressionMap.get(parameterType);
+        Expression expression = 
parameterTypeToExpressionMap.get(parameterType);
+
+        return expression;
     }
 
     /**
@@ -53,7 +55,7 @@
      */
 /*
     public MethodInvocation createInvocation(Object pojo,
-                                             BeanInfo beanInfo, 
+                                             BeanInfo beanInfo,
                                              Exchange messageExchange,
                                              Endpoint pojoEndpoint) throws 
RuntimeCamelException {
         return beanInfo.createInvocation(pojo, messageExchange);

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java?rev=679753&r1=679752&r2=679753&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
 Fri Jul 25 03:44:47 2008
@@ -17,6 +17,7 @@
 package org.apache.camel.component.bean;
 
 import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Array;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Arrays;
@@ -134,8 +135,18 @@
         return new Expression<Exchange>() {
             public Object evaluate(Exchange exchange) {
                 Object[] answer = new Object[size];
+                Object body = exchange.getIn().getBody();
+                boolean multiParameterArray = false;
+                if 
(exchange.getIn().getHeader(BeanProcessor.MULTI_PARAMETER_ARRAY) != null) {
+                    multiParameterArray = 
exchange.getIn().getHeader(BeanProcessor.MULTI_PARAMETER_ARRAY, Boolean.class);
+                }
                 for (int i = 0; i < size; i++) {
-                    Object value = expressions[i].evaluate(exchange);
+                    Object value = null;
+                    if (multiParameterArray) {
+                        value = ((Object[])body)[i];
+                    } else {
+                        value = expressions[i].evaluate(exchange);
+                    }
                     // now lets try to coerce the value to the required type
                     Class expectedType = parameters.get(i).getType();
                     value = ExchangeHelper.convertToType(exchange, 
expectedType, value);

Modified: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanMethodWithMultipleParametersTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanMethodWithMultipleParametersTest.java?rev=679753&r1=679752&r2=679753&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanMethodWithMultipleParametersTest.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanMethodWithMultipleParametersTest.java
 Fri Jul 25 03:44:47 2008
@@ -36,17 +36,24 @@
 
     }
 
-    //TODO fix this test
-    public void xtestSendMessage() throws Exception {
+    public void testSendMessageWithURI() throws Exception {
         Object[] args = {"abc", 5, "def"};
-
-        template.sendBodyAndHeader("direct:in", args, 
BeanProcessor.METHOD_NAME, "myMethod");
+        
template.sendBody("bean:myBean?method=myMethod&multiParameterArray=true", args);
 
         assertEquals("bean.foo", "abc", myBean.foo);
         assertEquals("bean.bar", 5, myBean.bar);
         assertEquals("bean.x", "def", myBean.x);
     }
 
+    public void testSendMessageWithSettingHeader() throws Exception {
+        Object[] args = {"hello", 123, "world"};
+        template.sendBodyAndHeader("direct:in", args, 
BeanProcessor.MULTI_PARAMETER_ARRAY, true);
+
+        assertEquals("bean.foo", "hello", myBean.foo);
+        assertEquals("bean.bar", 123, myBean.bar);
+        assertEquals("bean.x", "world", myBean.x);
+    }
+
     @Override
     protected Context createJndiContext() throws Exception {
         JndiContext answer = new JndiContext();
@@ -62,7 +69,7 @@
         };
     }
 
-    public static class MyBean {
+    public class MyBean {
         public String foo;
         public int bar;
         public String x;


Reply via email to