Fix FELIX-3896.
Check for null before calling the bind callback. If the service object is null, we remove the service binding associated to this reference.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1452071 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java
index 98e2366..9fb6b64 100644
--- a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java
+++ b/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/handlers/dependency/Dependency.java
@@ -277,11 +277,25 @@
if (m_callbacks[j].getMethodType() == DependencyCallback.BIND) {
if (isAggregate()) {
for (int i = 0; i < refs.length; i++) {
- invokeCallback(m_callbacks[j], refs[i], getService(refs[i]), pojo);
+ Object svc = getService(refs[i]);
+ if (svc != null) {
+ invokeCallback(m_callbacks[j], refs[i], svc, pojo);
+ } else {
+ // The service left already, or the service object cannot be created.
+ // We consider it as a departure.
+ removedService(refs[i], null);
+ }
}
} else {
// Take the first reference.
- invokeCallback(m_callbacks[j], refs[0], getService(refs[0]), pojo);
+ Object svc = getService(refs[0]);
+ if (svc != null) {
+ invokeCallback(m_callbacks[j], refs[0], svc, pojo);
+ } else {
+ // The service left already, or the service object cannot be created.
+ // We consider it as a departure.
+ removedService(refs[0], null);
+ }
}
}
}
@@ -353,7 +367,16 @@
if (m_handler.getInstanceManager().getState() > InstanceManager.STOPPED && m_handler.getInstanceManager().getPojoObjects() != null) {
for (int i = 0; m_callbacks != null && i < m_callbacks.length; i++) {
if (m_callbacks[i].getMethodType() == DependencyCallback.BIND) {
- invokeCallback(m_callbacks[i], ref, getService(ref), null);
+ Object svc = getService(ref);
+ System.out.println("Svc injected in the bind method : " + svc);
+ if (svc != null) {
+ invokeCallback(m_callbacks[i], ref, svc, null);
+ } else {
+ // We can't get the service object (https://issues.apache.org/jira/browse/FELIX-3896).
+ // This is probably because the service is leaving.
+ // We consider it as a departure.
+ removedService(ref, null);
+ }
}
}
}