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