ServiceReference.isAssignableTo() always returns true if requesting bundle has no wire --------------------------------------------------------------------------------------
Key: FELIX-1600 URL: https://issues.apache.org/jira/browse/FELIX-1600 Project: Felix Issue Type: Bug Components: Framework Affects Versions: felix-2.0.0 Reporter: Stuart McCulloch Fix For: felix-2.2.0 [ from http://markmail.org/message/pu5usr5s7vsweyv3 ] I think there's a bug in our ServiceReference.isAssignableTo implementation... the javadoc for this method states: "This method performs the following checks: 1. Get the package name from the specified class name. 2. For the bundle that registered the service referenced by this ServiceReference (registrant bundle); find the source for the package. If no source is found then return true if the registrant bundle is equal to the specified bundle; otherwise return false. 3. If the package source of the registrant bundle is equal to the package source of the specified bundle then return true; otherwise return false." whereas our implementation does: // There are three situations that may occur here: // 1. The requester does not have a wire for the package. // 2. The provider does not have a wire for the package. // 3. Both have a wire for the package. // For case 1, we do not filter the service reference since we // assume that the bundle is using reflection or that it won't // use that class at all since it does not import it. For // case 2, we have to try to load the class from the class // loader of the service object and then compare the class // loaders to determine if we should filter the service // refernce. In case 3, we simply compare the exporting // modules from the package wiring to determine if we need // to filter the service reference. assume both the provider and requester have no wire for the package (as happens when a bundle uses it's own export, as in this situation) the javadoc says isAssignableTo should return false, because the provider has no wire and the provider != requester - but we'll return true because the requester has no wire and we do that check first -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.