You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ma...@apache.org on 2010/05/11 13:33:39 UTC

svn commit: r943089 - /felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java

Author: marrs
Date: Tue May 11 11:33:39 2010
New Revision: 943089

URL: http://svn.apache.org/viewvc?rev=943089&view=rev
Log:
Slightly relaxed the rules for member injection when using a named field. In that case it is now enough to have a field that is of an assignable type, instead of requiring an exact type.

Modified:
    felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java

Modified: felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java?rev=943089&r1=943088&r2=943089&view=diff
==============================================================================
--- felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java (original)
+++ felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java Tue May 11 11:33:39 2010
@@ -837,16 +837,19 @@ public class ServiceImpl implements Serv
 		        while (serviceClazz != null) {
 		            Field[] fields = serviceClazz.getDeclaredFields();
 		            for (int j = 0; j < fields.length; j++) {
-		                if (fields[j].getType().equals(clazz) && (instanceName == null || fields[j].getName().equals(instanceName))) {
+		                Field field = fields[j];
+                        Class type = field.getType();
+                        if ((instanceName == null && type.equals(clazz)) 
+		                    || (instanceName != null && field.getName().equals(instanceName) && type.isAssignableFrom(clazz))) {
 		                    try {
-		                    	fields[j].setAccessible(true);
+		                    	field.setAccessible(true);
 		                        // synchronized makes sure the field is actually written to immediately
 		                        synchronized (SYNC) {
-		                            fields[j].set(serviceInstance, instance);
+		                            field.set(serviceInstance, instance);
 		                        }
 		                    }
 		                    catch (Exception e) {
-		                        m_logger.log(Logger.LOG_ERROR, "Could not set field " + fields[j], e);
+		                        m_logger.log(Logger.LOG_ERROR, "Could not set field " + field, e);
 		                        return;
 		                    }
 		                }