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;