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)