Modified class accessibility checking used for service filtering to also
try to load from the bundle that registered the service.
git-svn-id: https://svn.apache.org/repos/asf/incubator/felix/trunk@425359 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.felix.framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java b/org.apache.felix.framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
index e24ce70..29777d5 100644
--- a/org.apache.felix.framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
+++ b/org.apache.felix.framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
@@ -117,12 +117,21 @@
**/
protected boolean isClassAccessible(Class clazz)
{
- Class sourceClass = (m_factory != null)
- ? m_factory.getClass() : m_svcObj.getClass();
try
{
- Class target = Util.loadClassUsingClass(sourceClass, clazz.getName());
- return (target.getClassLoader() == clazz.getClassLoader());
+ // First, try to load the class from the bundle that registered
+ // the service.
+ Class targetClass = m_bundle.loadClass(clazz.getName());
+ if (targetClass != null)
+ {
+ return (targetClass == clazz);
+ }
+ // If it cannot be found from the registering bundle, then try to load
+ // from the service object or service factory class.
+ Class sourceClass = (m_factory != null)
+ ? m_factory.getClass() : m_svcObj.getClass();
+ targetClass = Util.loadClassUsingClass(sourceClass, clazz.getName());
+ return (targetClass == clazz);
}
catch (Exception ex)
{