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);