Check that the returned object from a service factory is an instance of all classes named when the service was registered (FELIX-540).

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@649697 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java b/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
index 2896207..db50540 100644
--- a/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
@@ -253,7 +253,19 @@
 
     private Object getFactoryUnchecked(Bundle bundle)
     {
-        return m_factory.getService(bundle, this);
+        Object svcObj = m_factory.getService(bundle, this);
+        if (svcObj != null)
+        {
+            for (int i = 0; i < m_classes.length; i++)
+            {
+                Class clazz = Util.loadClassUsingClass(svcObj.getClass(), m_classes[i]);
+                if ((clazz == null) || !clazz.isAssignableFrom(svcObj.getClass()))
+                {
+                    return null;
+                }
+            }
+        }
+        return svcObj;
     }
 
     private void ungetFactoryUnchecked(Bundle bundle, Object svcObj)