This is an automated email from the ASF dual-hosted git repository.
jbonofre pushed a commit to branch karaf-4.4.x
in repository https://gitbox.apache.org/repos/asf/karaf.git
The following commit(s) were added to refs/heads/karaf-4.4.x by this push:
new 244a81afb3 Fixed json feature file conditionals (#2944)
244a81afb3 is described below
commit 244a81afb373c91b8c1b14453ae0cc952ad154cd
Author: JB Onofré <[email protected]>
AuthorDate: Mon Sep 28 18:24:28 2026 +0200
Fixed json feature file conditionals (#2944)
Co-authored-by: James Roome <[email protected]>
---
.../karaf/features/internal/model/JacksonUtil.java | 10 ++++--
.../org/apache/karaf/features/ConditionalTest.java | 11 +++++-
.../karaf/features/internal/model/JsonTest.java | 2 +-
.../karaf/features/internal/service/f06.json | 39 ++++++++++++++++++++++
4 files changed, 58 insertions(+), 4 deletions(-)
diff --git
a/features/core/src/main/java/org/apache/karaf/features/internal/model/JacksonUtil.java
b/features/core/src/main/java/org/apache/karaf/features/internal/model/JacksonUtil.java
index 950cd307db..fe66699d6b 100644
---
a/features/core/src/main/java/org/apache/karaf/features/internal/model/JacksonUtil.java
+++
b/features/core/src/main/java/org/apache/karaf/features/internal/model/JacksonUtil.java
@@ -63,11 +63,17 @@ public class JacksonUtil {
}
public static Features unmarshal(String uri) throws IOException {
- return unmarshal(new URL(uri).openStream());
+ return unmarshal(uri, new URL(uri).openStream());
}
public static Features unmarshal(InputStream inputStream) throws
IOException {
- return mapper.readValue(inputStream, Features.class);
+ return unmarshal(null, inputStream);
+ }
+
+ private static Features unmarshal(String uri, InputStream inputStream)
throws IOException {
+ Features features = mapper.readValue(inputStream, Features.class);
+ features.postUnmarshall(uri);
+ return features;
}
public static void marshal(Features features, OutputStream outputStream)
throws IOException {
diff --git
a/features/core/src/test/java/org/apache/karaf/features/ConditionalTest.java
b/features/core/src/test/java/org/apache/karaf/features/ConditionalTest.java
index aed4b3d929..ba54b378cb 100644
--- a/features/core/src/test/java/org/apache/karaf/features/ConditionalTest.java
+++ b/features/core/src/test/java/org/apache/karaf/features/ConditionalTest.java
@@ -28,7 +28,15 @@ public class ConditionalTest {
@Test
public void testLoad() throws Exception {
- RepositoryImpl r = new
RepositoryImpl(getClass().getResource("internal/service/f06.xml").toURI());
+ verify(new
RepositoryImpl(getClass().getResource("internal/service/f06.xml").toURI()));
+ }
+
+ @Test
+ public void testLoadJson() throws Exception {
+ verify(new
RepositoryImpl(getClass().getResource("internal/service/f06.json").toURI()));
+ }
+
+ private static void verify(RepositoryImpl r) {
Feature[] features = r.getFeatures();
assertEquals(1, features.length);
Feature feature = features[0];
@@ -38,6 +46,7 @@ public class ConditionalTest {
Conditional conditional1 = feature.getConditional().get(0);
assertThat(conditional1.getCondition(), contains("http"));
assertEquals(1, conditional1.getBundles().size());
+ assertEquals("spring-condition-http",
conditional1.asFeature().getName());
Conditional conditional2 = feature.getConditional().get(1);
assertThat(conditional2.getCondition(),
contains("req:osgi.ee;filter:=\"(&(osgi.ee=JavaSE)(!(version>=1.7)))\""));
diff --git
a/features/core/src/test/java/org/apache/karaf/features/internal/model/JsonTest.java
b/features/core/src/test/java/org/apache/karaf/features/internal/model/JsonTest.java
index 9a0c4f79e8..ad510319f9 100644
---
a/features/core/src/test/java/org/apache/karaf/features/internal/model/JsonTest.java
+++
b/features/core/src/test/java/org/apache/karaf/features/internal/model/JsonTest.java
@@ -51,7 +51,7 @@ public class JsonTest {
Assert.assertEquals(false,
features.getFeature().get(0).getConfig().get(0).isAppend());
Assert.assertEquals(false,
features.getFeature().get(0).getConfig().get(0).isExternal());
Assert.assertEquals(false,
features.getFeature().get(0).getConfig().get(0).isOverride());
- Assert.assertEquals("foo=bar",
features.getFeature().get(0).getConfig().get(0).getValue());
+ Assert.assertEquals("foo=bar\n",
features.getFeature().get(0).getConfig().get(0).getValue());
Assert.assertEquals("test-configfile",
features.getFeature().get(0).getConfigfile().get(0).getFinalname());
Assert.assertEquals(false,
features.getFeature().get(0).getConfigfile().get(0).isOverride());
diff --git
a/features/core/src/test/resources/org/apache/karaf/features/internal/service/f06.json
b/features/core/src/test/resources/org/apache/karaf/features/internal/service/f06.json
new file mode 100644
index 0000000000..6e0ae9b867
--- /dev/null
+++
b/features/core/src/test/resources/org/apache/karaf/features/internal/service/f06.json
@@ -0,0 +1,39 @@
+{
+ "name": "karaf",
+ "feature": [
+ {
+ "name": "spring",
+ "version": "2.5.6.SEC02",
+ "resolver": "(obr)",
+ "bundle": [
+ {
+ "location":
"mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aopalliance/1.0_4",
+ "dependency": true
+ },
+ { "location": "mvn:org.springframework/spring-core/2.5.6.SEC02" },
+ { "location": "mvn:org.springframework/spring-beans/2.5.6.SEC02" },
+ { "location": "mvn:org.springframework/spring-aop/2.5.6.SEC02" },
+ { "location": "mvn:org.springframework/spring-context/2.5.6.SEC02" },
+ { "location":
"mvn:org.springframework/spring-context-support/2.5.6.SEC02" }
+ ],
+ "conditional": [
+ {
+ "condition": ["http"],
+ "bundle": [
+ { "location": "mvn:org.springframework/spring-web/2.5.6.SEC02" }
+ ]
+ },
+ {
+ "condition":
["req:osgi.ee;filter:=\"(&(osgi.ee=JavaSE)(!(version>=1.7)))\""],
+ "bundle": [
+ {
+ "location": "mvn:org.apache.mina/mina-core/${mina.version}",
+ "start": true,
+ "startLevel": 30
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}