You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2016/11/04 16:49:18 UTC
svn commit: r1768066 -
/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
Author: gnodet
Date: Fri Nov 4 16:49:18 2016
New Revision: 1768066
URL: http://svn.apache.org/viewvc?rev=1768066&view=rev
Log:
[ARIES-960] Improve error message when unable to find a matching constructor / method
Modified:
aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java?rev=1768066&r1=1768065&r2=1768066&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java Fri Nov 4 16:49:18 2016
@@ -297,9 +297,9 @@ public class BeanRecipe extends Abstract
throw wrapAsCompDefEx(e);
}
} else if (matches.size() == 0) {
- throw new ComponentDefinitionException("Unable to find a matching factory method " + factoryMethod + " on class " + factoryObj.getClass().getName() + " for arguments " + args + " when instanciating bean " + getName());
+ throw new ComponentDefinitionException("Unable to find a matching factory method " + factoryMethod + " on class " + factoryObj.getClass().getName() + " for arguments " + argsToString(args) + " when instanciating bean " + getName());
} else {
- throw new ComponentDefinitionException("Multiple matching factory methods " + factoryMethod + " found on class " + factoryObj.getClass().getName() + " for arguments " + args + " when instanciating bean " + getName() + ": " + matches.keySet());
+ throw new ComponentDefinitionException("Multiple matching factory methods " + factoryMethod + " found on class " + factoryObj.getClass().getName() + " for arguments " + argsToString(args) + " when instanciating bean " + getName() + ": " + matches.keySet());
}
}
@@ -331,9 +331,9 @@ public class BeanRecipe extends Abstract
throw wrapAsCompDefEx(e);
}
} else if (matches.size() == 0) {
- throw new ComponentDefinitionException("Unable to find a matching factory method " + factoryMethod + " on class " + getTypeName() + " for arguments " + args + " when instanciating bean " + getName());
+ throw new ComponentDefinitionException("Unable to find a matching factory method " + factoryMethod + " on class " + getTypeName() + " for arguments " + argsToString(args) + " when instanciating bean " + getName());
} else {
- throw new ComponentDefinitionException("Multiple matching factory methods " + factoryMethod + " found on class " + getTypeName() + " for arguments " + args + " when instanciating bean " + getName() + ": " + matches.keySet());
+ throw new ComponentDefinitionException("Multiple matching factory methods " + factoryMethod + " found on class " + getTypeName() + " for arguments " + argsToString(args) + " when instanciating bean " + getName() + ": " + matches.keySet());
}
}
@@ -351,9 +351,9 @@ public class BeanRecipe extends Abstract
throw wrapAsCompDefEx(e);
}
} else if (matches.size() == 0) {
- throw new ComponentDefinitionException("Unable to find a matching constructor on class " + getTypeName() + " for arguments " + args + " when instanciating bean " + getName());
+ throw new ComponentDefinitionException("Unable to find a matching constructor on class " + getTypeName() + " for arguments " + argsToString(args) + " when instanciating bean " + getName());
} else {
- throw new ComponentDefinitionException("Multiple matching constructors found on class " + getTypeName() + " for arguments " + args + " when instanciating bean " + getName() + ": " + matches.keySet());
+ throw new ComponentDefinitionException("Multiple matching constructors found on class " + getTypeName() + " for arguments " + argsToString(args) + " when instanciating bean " + getName() + ": " + matches.keySet());
}
}
@@ -402,11 +402,11 @@ public class BeanRecipe extends Abstract
found = false;
break;
}
- //If the arg is an Unwrappered bean then we need to do the assignment check against the
- //unwrappered bean itself.
+ // If the arg is an Unwrappered bean then we need to do the assignment
+ // check against the unwrappered bean itself.
Object arg = args.get(i);
Object argToTest = arg;
- if(arg instanceof UnwrapperedBeanHolder)
+ if (arg instanceof UnwrapperedBeanHolder)
argToTest = ((UnwrapperedBeanHolder)arg).unwrapperedBean;
if (!AggregateConverter.isAssignable(argToTest, argType)) {
found = false;
@@ -549,11 +549,11 @@ public class BeanRecipe extends Abstract
found = false;
break;
}
- //If the arg is an Unwrappered bean then we need to do the assignment check against the
- //unwrappered bean itself.
+ // If the arg is an Unwrappered bean then we need to do the assignment
+ // check against the unwrappered bean itself.
Object arg = args.get(i);
Object argToTest = arg;
- if(arg instanceof UnwrapperedBeanHolder)
+ if (arg instanceof UnwrapperedBeanHolder)
argToTest = ((UnwrapperedBeanHolder)arg).unwrapperedBean;
if (!AggregateConverter.isAssignable(argToTest, argType)) {
found = false;
@@ -983,6 +983,24 @@ public class BeanRecipe extends Abstract
private Object newInstance(Constructor constructor, Object... args) throws Exception {
return ReflectionUtils.newInstance(blueprintContainer.getAccessControlContext(), constructor, args);
}
+
+ private String argsToString(List<Object> args) {
+ Iterator<Object> it = args.iterator();
+ if (!it.hasNext())
+ return "[]";
+ StringBuilder sb = new StringBuilder();
+ sb.append('[');
+ for (;;) {
+ Object e = it.next();
+ if (e instanceof UnwrapperedBeanHolder) {
+ e = ((UnwrapperedBeanHolder) e).unwrapperedBean;
+ }
+ sb.append(e).append(" (").append(e.getClass()).append(")");
+ if (!it.hasNext())
+ return sb.append(']').toString();
+ sb.append(',').append(' ');
+ }
+ }
private static Object UNMATCHED = new Object();