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
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

Reply via email to