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 13:00:08 UTC

svn commit: r758605 - in /camel/branches/camel-1.x: ./ camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoAMoreComplexOverloadedTest.java

Author: davsclaus
Date: Thu Mar 26 11:59:54 2009
New Revision: 758605

URL: http://svn.apache.org/viewvc?rev=758605&view=rev
Log:
Merged revisions 758600 via svnmerge from 
https://svn.apache.org/repos/asf/camel/trunk

........
  r758600 | davsclaus | 2009-03-26 12:28:10 +0100 (Thu, 26 Mar 2009) | 1 line
  
  CAMEL-1424: BeanInfo better logic for overloaded methods.
........

Added:
    camel/branches/camel-1.x/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoAMoreComplexOverloadedTest.java
      - copied unchanged from r758600, camel/trunk/camel-core/src/test/java/org/apache/camel/component/bean/BeanInfoAMoreComplexOverloadedTest.java
Modified:
    camel/branches/camel-1.x/   (props changed)
    camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java

Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar 26 11:59:54 2009
@@ -1 +1 @@
-/camel/trunk:736980,739733,739904,740251,740295,740306,740596,740663,741848,742231,742705,742739,742854,742856,742898,742906,743613,743762,743773,743920,743959-743960,744123,745105,745367,745541,745751,745826,745978,746269,746872,746895,746962,747258,747678-747704,748392,748436,748821,749563-749564,749574,749628-749629,749936,749956,750017,750334,750396,750761,750796,752068,752117,752418,752751-752755,752764-752773,752956,753087,753101,753175,755136,755487,756313,756348,756870,757636,757693,757743,757865,758539,758563
+/camel/trunk:736980,739733,739904,740251,740295,740306,740596,740663,741848,742231,742705,742739,742854,742856,742898,742906,743613,743762,743773,743920,743959-743960,744123,745105,745367,745541,745751,745826,745978,746269,746872,746895,746962,747258,747678-747704,748392,748436,748821,749563-749564,749574,749628-749629,749936,749956,750017,750334,750396,750761,750796,752068,752117,752418,752751-752755,752764-752773,752956,753087,753101,753175,755136,755487,756313,756348,756870,757636,757693,757743,757865,758539,758563,758600

Propchange: camel/branches/camel-1.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java?rev=758605&r1=758604&r2=758605&view=diff
==============================================================================
--- camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java (original)
+++ camel/branches/camel-1.x/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java Thu Mar 26 11:59:54 2009
@@ -61,7 +61,7 @@
     private final CamelContext camelContext;
     private Class type;
     private ParameterMappingStrategy strategy;
-    private Map<String, MethodInfo> operations = new ConcurrentHashMap<String, MethodInfo>();
+    private final Map<String, List<MethodInfo>> operations = new ConcurrentHashMap<String, List<MethodInfo>>();
     private MethodInfo defaultMethod;
     private List<MethodInfo> operationsWithBody = new ArrayList<MethodInfo>();
     private List<MethodInfo> operationsWithCustomAnnotation = new ArrayList<MethodInfo>();
@@ -77,10 +77,11 @@
         this.type = type;
         this.strategy = strategy;
         introspect(getType());
+        // if there are only 1 method with 1 operation then select it as a default/fallback method
         if (operations.size() == 1) {
-            Collection<MethodInfo> methodInfos = operations.values();
-            for (MethodInfo methodInfo : methodInfos) {
-                defaultMethod = methodInfo;
+            List<MethodInfo> methods = operations.values().iterator().next();
+            if (methods.size() == 1) {
+                defaultMethod = methods.get(0);
             }
         }
     }
@@ -106,10 +107,11 @@
         AmbiguousMethodCallException {
         MethodInfo methodInfo = null;
 
-        // TODO use some other mechanism?
         String name = exchange.getIn().getHeader(BeanProcessor.METHOD_NAME, String.class);
         if (name != null) {
-            methodInfo = operations.get(name);
+            if (operations.get(name).size() == 1) {
+                methodInfo = operations.get(name).get(0);
+            }
         }
         if (methodInfo == null) {
             methodInfo = chooseMethod(pojo, exchange);
@@ -162,7 +164,16 @@
         if (LOG.isTraceEnabled()) {
             LOG.trace("Adding operation: " + opName + " for method: " + methodInfo);
         }
-        operations.put(opName, methodInfo);
+        if (operations.containsKey(opName)) {
+            // we have an overloaded method so add the method info to the same key
+            List<MethodInfo> existing = operations.get(opName);
+            existing.add(methodInfo);
+        } else {
+            // its a new method we have not seen before so wrap it in a list and add it
+            List<MethodInfo> methods = new ArrayList<MethodInfo>();
+            methods.add(methodInfo);
+            operations.put(opName, methods);
+        }
 
         if (methodInfo.hasBodyParameter()) {
             operationsWithBody.add(methodInfo);