SLING-9597 Feature Analyser should substitute {dollar} before passing properties to framework
diff --git a/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java b/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
index 7698a65..c93cb41 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
@@ -22,7 +22,6 @@
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
-import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
@@ -137,7 +136,11 @@
throws IOException {
Path appPropsFile = Files.createTempFile("appProps", ".properties");
Properties appPropsProperties = new Properties();
- appPropsProperties.putAll(appProps);
+
+ for (Map.Entry<String,String> entry : appProps.entrySet()) {
+ appPropsProperties.put(entry.getKey(), entry.getValue().replaceAll("\\Q{dollar}\\E", "\\$"));
+ }
+
try (Writer writer = new FileWriter(appPropsFile.toFile())) {
appPropsProperties.store(writer, "appProps");
}
diff --git a/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java b/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
index 857be73..3551963 100644
--- a/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
+++ b/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
@@ -91,8 +91,9 @@
FelixFrameworkScanner ffs = new FelixFrameworkScanner();
Map<String,String> kvmap = new HashMap<>();
- kvmap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "org.foo.bar");
+ kvmap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "org.foo.bar;version=\"{dollar}{java.specification.version}\"");
kvmap.put(Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA, "ding.dong;ding.dong=\"yeah!\"");
+ kvmap.put("felix.systempackages.substitution", "true");
BundleDescriptor bundleDescriptor = ffs.scan(new ArtifactId("org.apache.felix",
"org.apache.felix.framework",
@@ -104,12 +105,16 @@
}
});
+ String javaVersion = System.getProperty("java.specification.version");
+
Set<PackageInfo> exportedPackages = bundleDescriptor.getExportedPackages();
assertFalse(exportedPackages.isEmpty());
boolean foundFooBar = false;
for (PackageInfo pi : exportedPackages) {
- if (pi.getName().equals("org.foo.bar"))
+ if (pi.getName().equals("org.foo.bar")) {
+ assertTrue(pi.getVersion().startsWith(javaVersion));
foundFooBar = true;
+ }
}
assertTrue(foundFooBar);