Author: davsclaus
Date: Mon Jun 30 01:03:42 2008
New Revision: 672723

URL: http://svn.apache.org/viewvc?rev=672723&view=rev
Log:
CAMEL-651: Improved method matching, considering MEP pattern that out capable 
should invoke a non-void method

Modified:
    
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/MethodInfo.java

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=672723&r1=672722&r2=672723&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
 Mon Jun 30 01:03:42 2008
@@ -212,8 +212,7 @@
     }
 
     protected MethodInfo chooseMethodWithMatchingBody(Exchange exchange, 
Collection<MethodInfo> operationList) throws AmbiguousMethodCallException {
-        // lets see if we can find a method who's body param type matches
-        // the message body
+        // lets see if we can find a method who's body param type matches the 
message body
         Message in = exchange.getIn();
         Object body = in.getBody();
         if (body != null) {
@@ -221,6 +220,18 @@
 
             List<MethodInfo> possibles = new ArrayList<MethodInfo>();
             for (MethodInfo methodInfo : operationList) {
+                // TODO: AOP proxies have additioan methods - consider having 
a static
+                // method exclude list to skip all known AOP proxy methods
+                // TODO: This class could use some TRACE logging
+
+                // test for MEP pattern matching
+                boolean out = exchange.getPattern().isOutCapable();
+                if (out && methodInfo.isReturnTypeVoid()) {
+                    // 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);
                 }
@@ -255,6 +266,7 @@
                 return chooseMethodWithCustomAnnotations(exchange, possibles);
             }
         }
+        // no match so return null
         return null;
     }
 

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=672723&r1=672722&r2=672723&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
 Mon Jun 30 01:03:42 2008
@@ -99,7 +99,6 @@
         return parameterInfo.getType();
     }
 
-
     public boolean bodyParameterMatches(Class bodyType) {
         Class actualType = getBodyParameterType();
         return actualType != null && ObjectHelper.isAssignableFrom(bodyType, 
actualType);
@@ -117,6 +116,10 @@
         return hasCustomAnnotation;
     }
 
+    public boolean isReturnTypeVoid() {
+        return method.getReturnType().getName().equals("void");
+    }
+
     protected Object invoke(Method mth, Object pojo, Object[] arguments, 
Exchange exchange) throws IllegalAccessException, InvocationTargetException {
         return mth.invoke(pojo, arguments);
     }


Reply via email to