Author: davidb Date: Fri May 2 11:58:20 2014 New Revision: 1591880 URL: http://svn.apache.org/r1591880 Log: [FELIX-4371] Last Repository 1.0 failure fixed.
These code changes make the Felix Repository pass all the CT tests. Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java?rev=1591880&r1=1591879&r2=1591880&view=diff ============================================================================== --- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java (original) +++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/FelixResourceAdapter.java Fri May 2 11:58:20 2014 @@ -47,7 +47,7 @@ public class FelixResourceAdapter implem } if (namespace == null || namespace.equals(ContentNamespace.CONTENT_NAMESPACE)) { - OSGiCapabilityImpl c = OSGiRepositoryImpl.newOSGiContentCapability(resource.getURI(), resource.getSize()); + OSGiCapabilityImpl c = OSGiRepositoryImpl.newOSGiContentCapability(resource); c.setResource(this); result.add(c); } Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java?rev=1591880&r1=1591879&r2=1591880&view=diff ============================================================================== --- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java (original) +++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/OSGiRepositoryImpl.java Fri May 2 11:58:20 2014 @@ -33,6 +33,7 @@ import java.util.Map; import java.util.concurrent.Callable; import org.apache.felix.bundlerepository.RepositoryAdmin; +import org.apache.felix.bundlerepository.Resource; import org.apache.felix.bundlerepository.impl.LazyHashMap.LazyValue; import org.osgi.framework.Filter; import org.osgi.framework.FrameworkUtil; @@ -132,8 +133,9 @@ class OSGiRepositoryImpl implements Repo return new OSGiCapabilityImpl(IdentityNamespace.IDENTITY_NAMESPACE, idAttrs, Collections.<String, String> emptyMap()); } - static OSGiCapabilityImpl newOSGiContentCapability(final String uri, long size) + static OSGiCapabilityImpl newOSGiContentCapability(Resource resource) { + final String uri = resource.getURI(); LazyValue<String, Object> lazyValue = new LazyValue<String, Object>(ContentNamespace.CONTENT_NAMESPACE, new Callable<Object>() { @@ -143,9 +145,14 @@ class OSGiRepositoryImpl implements Repo return OSGiRepositoryImpl.getSHA256(uri); } }); + + Object mime = resource.getProperties().get("mime"); + if (mime == null) + mime = "application/vnd.osgi.bundle"; + Map<String, Object> contentAttrs = new LazyHashMap<String, Object>(Collections.singleton(lazyValue)); - contentAttrs.put(ContentNamespace.CAPABILITY_MIME_ATTRIBUTE, "application/vnd.osgi.bundle"); // TODO support other types - contentAttrs.put(ContentNamespace.CAPABILITY_SIZE_ATTRIBUTE, size); + contentAttrs.put(ContentNamespace.CAPABILITY_MIME_ATTRIBUTE, mime); + contentAttrs.put(ContentNamespace.CAPABILITY_SIZE_ATTRIBUTE, resource.getSize()); contentAttrs.put(ContentNamespace.CAPABILITY_URL_ATTRIBUTE, uri); return new OSGiCapabilityImpl(ContentNamespace.CONTENT_NAMESPACE, contentAttrs, Collections.<String, String> emptyMap()); } Modified: felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java URL: http://svn.apache.org/viewvc/felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java?rev=1591880&r1=1591879&r2=1591880&view=diff ============================================================================== --- felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java (original) +++ felix/trunk/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/SpecXMLPullParser.java Fri May 2 11:58:20 2014 @@ -129,8 +129,14 @@ public class SpecXMLPullParser } if (ContentNamespace.CONTENT_NAMESPACE.equals(namespace)) { - parseContentNamespace(reader, resource); - return null; + if (resource.getURI() == null) + { + parseContentNamespace(reader, resource); + return null; + } + // if the URI is already set, this is a second osgi.content capability. + // The first content capability, which is the main one, is stored in the Resource. + // Subsequent content capabilities are stored are ordinary capabilities. } CapabilityImpl capability = new CapabilityImpl();