Author: jwross
Date: Wed Apr 13 18:51:37 2016
New Revision: 1738988
URL: http://svn.apache.org/viewvc?rev=1738988&view=rev
Log:
[ARIES-1522] NullPointerException (NPE) when creating a RequireBundleHeader
using the filter provided by FelixRequirementAdapter.
When adapting a requirement in the "bundle" namespace from OBR, the adapter
must replace "symbolicname" with "osgi.wiring.bundle" and "version" with
"bundle-version" in the filter.
Modified:
aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/util/felix/FelixRequirementAdapter.java
Modified:
aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/util/felix/FelixRequirementAdapter.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/util/felix/FelixRequirementAdapter.java?rev=1738988&r1=1738987&r2=1738988&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/util/felix/FelixRequirementAdapter.java
(original)
+++
aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/util/felix/FelixRequirementAdapter.java
Wed Apr 13 18:51:37 2016
@@ -19,6 +19,7 @@ import java.util.Map;
import org.apache.aries.subsystem.obr.internal.AbstractRequirement;
import org.apache.aries.subsystem.obr.internal.NamespaceTranslator;
+import org.osgi.framework.namespace.BundleNamespace;
import org.osgi.resource.Capability;
import org.osgi.resource.Namespace;
import org.osgi.resource.Resource;
@@ -63,11 +64,17 @@ public class FelixRequirementAdapter ext
/* (1) The Felix OBR specific "mandatory:<*" syntax must be
stripped out of the filter.
* (2) The namespace must be translated.
*/
- result.put(Namespace.REQUIREMENT_FILTER_DIRECTIVE,
requirement.getFilter()
+ String namespace = getNamespace();
+ String filter = requirement.getFilter()
.replaceAll("\\(mandatory\\:\\<\\*[^\\)]*\\)",
"")
.replaceAll("\\(service\\=[^\\)]*\\)", "")
.replaceAll("objectclass", "objectClass")
- .replaceAll(requirement.getName() + '=',
getNamespace() + '='));
+ .replaceAll(requirement.getName() + '=',
namespace + '=');
+ if (BundleNamespace.BUNDLE_NAMESPACE.equals(namespace)) {
+ filter = filter.replaceAll("symbolicname", namespace)
+ .replaceAll("version",
BundleNamespace.CAPABILITY_BUNDLE_VERSION_ATTRIBUTE);
+ }
+ result.put(Namespace.REQUIREMENT_FILTER_DIRECTIVE, filter);
result.put(Namespace.REQUIREMENT_RESOLUTION_DIRECTIVE,
requirement.isOptional() ? Namespace.RESOLUTION_OPTIONAL :
Namespace.RESOLUTION_MANDATORY);
result.put(Namespace.REQUIREMENT_CARDINALITY_DIRECTIVE,
requirement.isMultiple() ? Namespace.CARDINALITY_MULTIPLE :
Namespace.CARDINALITY_SINGLE);
return Collections.unmodifiableMap(result);