You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/03/26 09:57:22 UTC

svn commit: r758563 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/component/bean/BeanInfo.java test/java/org/apache/camel/component/bean/BeanInfoOverloadedTest.java

Author: davsclaus
Date: Thu Mar 26 08:57:13 2009
New Revision: 758563

URL: http://svn.apache.org/viewvc?rev=758563&view=rev
Log:
CAMEL-1488: Fixed bean component not picking correct method for overloaded methods. Thanks to Bruce for the unit test.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoOverloadedTest.java   (with props)
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java?rev=758563&r1=758562&r2=758563&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java Thu Mar 26 08:57:13 2009
@@ -442,16 +442,20 @@
                 continue;
             }
 
+            boolean found = false;
             for (int i = 0; i < info.getMethod().getParameterTypes().length; i++) {
                 Class type1 = info.getMethod().getParameterTypes()[i];
                 Class type2 = methodInfo.getMethod().getParameterTypes()[i];
-                if (!type1.equals(type2)) {
-                    continue;
+                if (type1.equals(type2)) {
+                    found = true;
+                    break;
                 }
             }
 
-            // same name, same parameters, then its overrides an existing class
-            return info;
+            if (found) {
+                // same name, same parameters, then its overrides an existing class
+                return info;
+            }
         }
 
         return null;

Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoOverloadedTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoOverloadedTest.java?rev=758563&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoOverloadedTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoOverloadedTest.java Thu Mar 26 08:57:13 2009
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.bean;
+
+import java.lang.reflect.Method;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.impl.DefaultMessage;
+
+/**
+ * @version $Revision$
+ */
+public class BeanInfoOverloadedTest extends ContextTestSupport {
+
+    public void testBeanInfoOverloaded() throws Exception {
+        BeanInfo beanInfo = new BeanInfo(context, Bean.class);
+
+        Message message = new DefaultMessage();
+        message.setBody(new RequestB());
+        Exchange exchange = new DefaultExchange(context);
+        exchange.setIn(message);
+
+        MethodInvocation methodInvocation = beanInfo.createInvocation(new Bean(), exchange);
+        Method method = methodInvocation.getMethod();
+
+        assertEquals("doSomething", method.getName());
+
+        assertEquals(RequestB.class, method.getGenericParameterTypes()[0]);
+    }
+
+    class Bean {
+        public void doSomething(RequestA request) {
+        }
+
+        public void doSomething(RequestB request) {
+        }
+    }
+
+    class RequestA {
+        public int i;
+    }
+
+    class RequestB {
+        public String s;
+    }
+
+}

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoOverloadedTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoOverloadedTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date