The solution is pretty straight forward.
I modified "private List searchLocalResources(Requirement req)" in
ResolverImpl to include the following:
if (!m_failedSet.contains(resources[resIdx])
&& !m_resolveSet.contains(resources[resIdx])) {
//begin fix
Capability[] caps = resources[resIdx].getCapabilities();
CapabilityImpl impl = new CapabilityImpl();
Map map = resources[resIdx].getProperties();
for (Entry entry : (Set<Entry>) map.entrySet()) {
impl.addP(entry.getKey().toString(), entry.getValue());
}
if (req.isSatisfied(impl)) {
matchingCandidates.add(resources[resIdx]);
continue;
}
//end fix
I create a temporary capability that contains all the properties of a
resource (the properties contain the bundle name and version). This can then
be passed to requirement's isSatisifed method and matched against the
filter.
I am looking for a better place to put this but my scenario works now.