[FELIX-4914] Resolution problem with fragments and identity requirements
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1685100 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
index 2264826..7b08d04 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
@@ -1798,32 +1798,20 @@
if (!cand.getNamespace().startsWith("osgi.wiring.")
|| !resource.equals(cand.getResource()))
{
- // If we don't already have wires for the candidate,
- // then recursively populate them.
- if (!rc.getWirings().containsKey(cand.getResource()))
- {
- // Need to special case the candidate for identity
- // capabilities since it may be from a fragment and
- // we don't want to populate wires for the fragment,
- // but rather the host to which it is attached.
- Resource targetCand = cand.getResource();
- if (IdentityNamespace.IDENTITY_NAMESPACE.equals(cand.getNamespace())
- && Util.isFragment(targetCand))
- {
- targetCand = allCandidates.getFirstCandidate(
- targetCand.getRequirements(HostNamespace.HOST_NAMESPACE).get(0))
- .getResource();
- targetCand = allCandidates.getWrappedHost(targetCand);
- }
-
- populateWireMap(rc, targetCand,
+ // Populate wires for the candidate
+ populateWireMap(rc, cand.getResource(),
resourcePkgMap, wireMap, allCandidates);
- }
+ Resource provider;
+ if (req.getNamespace().equals(IdentityNamespace.IDENTITY_NAMESPACE)) {
+ provider = getDeclaredCapability(cand).getResource();
+ } else {
+ provider = getDeclaredResource(cand.getResource());
+ }
Wire wire = new WireImpl(
unwrappedResource,
getDeclaredRequirement(req),
- getDeclaredResource(cand.getResource()),
+ provider,
getDeclaredCapability(cand));
if (req.getNamespace().equals(PackageNamespace.PACKAGE_NAMESPACE))
{
diff --git a/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java b/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java
index e37d234..3f80ae3 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java
@@ -70,13 +70,7 @@
{
for (Capability cap : fragment.getCapabilities(namespace))
{
- // Filter out identity capabilities, since they
- // are not part of the fragment payload.
- if (!cap.getNamespace()
- .equals(IdentityNamespace.IDENTITY_NAMESPACE))
- {
- caps.add(new WrappedCapability(this, cap));
- }
+ caps.add(new WrappedCapability(this, cap));
}
}
}
diff --git a/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java b/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java
index 043cb9a..6d6c4d2 100644
--- a/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java
+++ b/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java
@@ -33,7 +33,6 @@
import org.apache.felix.resolver.test.util.JsonReader;
import org.apache.felix.resolver.test.util.ResolveContextImpl;
import org.apache.felix.resolver.test.util.SimpleFilter;
-import org.junit.Ignore;
import org.junit.Test;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
@@ -47,7 +46,6 @@
public class FELIX_4914_Test extends TestCase {
@Test
- @Ignore
public void testResolution() throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/felix-4914.json")));
Map<String, Object> resolution = (Map<String, Object>) JsonReader.read(reader);