From 4560f5fbd6da8a46bbe98f183fdb5ab9cf4498fa Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 20:51:41 +0200 Subject: [PATCH 01/13] Update to Felix parent 9 --- cm.json/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cm.json/pom.xml b/cm.json/pom.xml index caad71bc53..6644f5814e 100644 --- a/cm.json/pom.xml +++ b/cm.json/pom.xml @@ -22,7 +22,7 @@ org.apache.felix felix-parent - 7 + 9 From f323ca48916c11f6de7a5d513a5ac73f41e86f56 Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 20:48:00 +0200 Subject: [PATCH 02/13] Add mixed JSON array conversion test --- .../apache/felix/cm/json/io/impl/JsonSupportTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/JsonSupportTest.java b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/JsonSupportTest.java index 0c149e45d6..1b7f28eae6 100644 --- a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/JsonSupportTest.java +++ b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/JsonSupportTest.java @@ -115,6 +115,16 @@ public void testConvertStringArrayToObject() { assertArrayEquals(new String[] { "hello", "3" }, (String[]) Configurations.convertToObject(mBuilder.build())); } + @Test + public void testConvertMixedArrayToObject() { + final JsonArrayBuilder builder = Json.createArrayBuilder(); + builder.add("hello"); + builder.add(3); + + assertArrayEquals(new String[] { "hello", "3" }, + (String[]) Configurations.convertToObject(builder.build())); + } + @Test public void testConvertObjectArrayToObject() { final JsonArrayBuilder sBuilder = Json.createArrayBuilder(); From 8d546955fd001fb8e294a5608a3235dc98bc514e Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 20:50:12 +0200 Subject: [PATCH 03/13] Convert mixed JSON arrays to string arrays MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow OSGi Compendium 8.1.0, Configurator Specification §150.3.4. --- .../org/apache/felix/cm/json/io/impl/JsonSupport.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/JsonSupport.java b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/JsonSupport.java index dfb59ef31f..275c995732 100644 --- a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/JsonSupport.java +++ b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/JsonSupport.java @@ -106,7 +106,14 @@ public static Object convertToObject(final JsonValue value) { } return objArray; } - return array.toString(); + final String[] stringArray = new String[array.size()]; + for (int i = 0; i < array.size(); i++) { + final JsonValue arrayValue = array.get(i); + stringArray[i] = arrayValue.getValueType() == ValueType.STRING + ? ((JsonString) arrayValue).getString() + : arrayValue.toString(); + } + return stringArray; // type OBJECT -> return map default: From d3f68292cbb845dd1db71660e7df85c781d16a1d Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:00:47 +0200 Subject: [PATCH 04/13] Add resource version validation tests --- .../io/impl/ConfigurationReaderImplTest.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java index bd76537c34..a9c72bce48 100644 --- a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java +++ b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java @@ -94,6 +94,39 @@ public void testReadBundleConfigurationResource() throws IOException { assertEquals(8080, configs.get("config.b").get("port")); } + @Test + public void testReadValidResourceVersion() throws IOException { + readResourceVersion("1"); + } + + @Test + public void testReadInvalidResourceVersionType() throws IOException { + assertInvalidResourceVersion("\"1\""); + } + + @Test + public void testReadFractionalResourceVersion() throws IOException { + assertInvalidResourceVersion("1.5"); + } + + private void assertInvalidResourceVersion(final String version) throws IOException { + try { + readResourceVersion(version); + fail(); + } catch (final IOException ioe) { + // expected + } + } + + private void readResourceVersion(final String version) throws IOException { + final String json = "{\n" + + " \":configurator:resource-version\" : " + version + ",\n" + + " \":configurator:version\" : \"1.0.0\",\n" + + " \":configurator:symbolic-name\" : \"feature\"\n" + + "}"; + new ConfigurationReaderImpl().build(new StringReader(json)).readConfigurationResource(); + } + @Test public void testReadInvalidJson() throws IOException { final String json = "{\n \"a\" : 5 \n \"b\" : 2\n}"; From c01a9ac2a92606d0faa3234b980285711f01d07c Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:02:34 +0200 Subject: [PATCH 05/13] Validate Configurator resource version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow OSGi Compendium 8.1.0, Configurator Specification §150.3.1. --- .../json/io/impl/ConfigurationReaderImpl.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java index 42dcf67a68..261e765883 100644 --- a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java +++ b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java @@ -20,12 +20,14 @@ import java.io.IOException; import java.io.Reader; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Hashtable; import java.util.List; import java.util.Map; import jakarta.json.JsonException; +import jakarta.json.JsonNumber; import jakarta.json.JsonObject; import jakarta.json.JsonValue; import jakarta.json.JsonValue.ValueType; @@ -34,8 +36,6 @@ import org.apache.felix.cm.json.io.ConfigurationResource; import org.apache.felix.cm.json.io.Configurations; import org.osgi.service.configurator.ConfiguratorConstants; -import org.osgi.util.converter.ConversionException; -import org.osgi.util.converter.Converters; public class ConfigurationReaderImpl implements ConfigurationReader, ConfigurationReader.Builder { @@ -169,20 +169,13 @@ private void throwIOException(final String msg) throws IOException { * @param root The JSON root object. */ private void verifyJsonResource() throws IOException { - final Object version = JsonSupport - .convertToObject(this.jsonObject.get(ConfiguratorConstants.PROPERTY_RESOURCE_VERSION)); + final JsonValue version = this.jsonObject.get(ConfiguratorConstants.PROPERTY_RESOURCE_VERSION); if (version != null) { - int v = -1; - try { - v = Converters.standardConverter().convert(version).defaultValue(-1).to(Integer.class); - } catch ( final ConversionException ce ) { - // ignore - } - if (v == -1) { + if (version.getValueType() != ValueType.NUMBER || !((JsonNumber) version).isIntegral()) { throwIOException("Invalid resource version information : ".concat(version.toString())); } // we only support version 1 - if (v != 1) { + if (((JsonNumber) version).bigDecimalValue().compareTo(BigDecimal.ONE) != 0) { throwIOException("Unknown resource version : ".concat(version.toString())); } } From b57bb4d0d6031eaede2012a791afbdce48eb28d5 Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:04:16 +0200 Subject: [PATCH 06/13] Add symbolic name validation tests --- .../io/impl/ConfigurationReaderImplTest.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java index a9c72bce48..1248a7b2ff 100644 --- a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java +++ b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java @@ -127,6 +127,52 @@ private void readResourceVersion(final String version) throws IOException { new ConfigurationReaderImpl().build(new StringReader(json)).readConfigurationResource(); } + @Test + public void testReadValidSymbolicName() throws IOException { + readSymbolicName("\"com.example.feature-name_1\"", false); + } + + @Test + public void testReadInvalidSymbolicNameType() throws IOException { + assertInvalidSymbolicName("1", false); + } + + @Test + public void testReadInvalidSymbolicNameSyntax() throws IOException { + for (final String symbolicName : new String[] { + "", ".com.example", "com..example", "com.example.", + "com/example", "com:example", "com example", "com.ex\u00e4mple" + }) { + assertInvalidSymbolicName("\"" + symbolicName + "\"", false); + } + } + + @Test + public void testReadInvalidBundleResourceSymbolicName() throws IOException { + assertInvalidSymbolicName("\"com.example:bad\"", true); + } + + private void assertInvalidSymbolicName(final String symbolicName, final boolean bundleResource) + throws IOException { + try { + readSymbolicName(symbolicName, bundleResource); + fail(); + } catch (final IOException ioe) { + // expected + } + } + + private void readSymbolicName(final String symbolicName, final boolean bundleResource) throws IOException { + final String json = "{\n" + + " \":configurator:version\" : \"1.0.0\",\n" + + " \":configurator:symbolic-name\" : " + symbolicName + "\n" + + "}"; + new ConfigurationReaderImpl() + .verifyAsBundleResource(bundleResource) + .build(new StringReader(json)) + .readConfigurationResource(); + } + @Test public void testReadInvalidJson() throws IOException { final String json = "{\n \"a\" : 5 \n \"b\" : 2\n}"; From 1d3ca31575c0a302b83fc0ea2559011d5f0f7437 Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:06:00 +0200 Subject: [PATCH 07/13] Validate Configurator symbolic name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow OSGi Compendium 8.1.0, Configurator Specification §150.3.1. --- .../json/io/impl/ConfigurationReaderImpl.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java index 261e765883..98f6925f15 100644 --- a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java +++ b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java @@ -25,10 +25,12 @@ import java.util.Hashtable; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; import jakarta.json.JsonException; import jakarta.json.JsonNumber; import jakarta.json.JsonObject; +import jakarta.json.JsonString; import jakarta.json.JsonValue; import jakarta.json.JsonValue.ValueType; @@ -40,6 +42,9 @@ public class ConfigurationReaderImpl implements ConfigurationReader, ConfigurationReader.Builder { + private static final Pattern SYMBOLIC_NAME_PATTERN = + Pattern.compile("[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)*"); + private boolean closed = false; private Reader reader; @@ -190,13 +195,19 @@ private void verifyJsonResource() throws IOException { if (!(rsrcVersion instanceof String)) { throwIOException("Invalid version information : ".concat(rsrcVersion.toString())); } - final Object rsrcName = JsonSupport - .convertToObject(this.jsonObject.get(ConfiguratorConstants.PROPERTY_SYMBOLIC_NAME)); - if (rsrcName == null) { + } + final JsonValue rsrcName = this.jsonObject.get(ConfiguratorConstants.PROPERTY_SYMBOLIC_NAME); + if (rsrcName == null) { + if (!verifyAsBundleResource) { throwIOException("Missing symbolic name information"); } - if (!(rsrcName instanceof String)) { - throwIOException("Invalid symbolic name information : ".concat(rsrcVersion.toString())); + } else { + if (rsrcName.getValueType() != ValueType.STRING) { + throwIOException("Invalid symbolic name information : ".concat(rsrcName.toString())); + } + final String symbolicName = ((JsonString) rsrcName).getString(); + if (!SYMBOLIC_NAME_PATTERN.matcher(symbolicName).matches()) { + throwIOException("Invalid symbolic name information : ".concat(rsrcName.toString())); } } } From a5ea8980f878ef11eccd06af1ff322c024564c35 Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:07:00 +0200 Subject: [PATCH 08/13] Add version validation tests --- .../io/impl/ConfigurationReaderImplTest.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java index 1248a7b2ff..535cc8264b 100644 --- a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java +++ b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java @@ -173,6 +173,51 @@ private void readSymbolicName(final String symbolicName, final boolean bundleRes .readConfigurationResource(); } + @Test + public void testReadValidVersion() throws IOException { + readVersion("\"1.2.3.qualifier-1\"", false); + } + + @Test + public void testReadInvalidVersionType() throws IOException { + assertInvalidVersion("1", false); + } + + @Test + public void testReadInvalidVersionSyntax() throws IOException { + for (final String version : new String[] { + "", "+1", "1..2", "1.2.x", "1.2.3.", "1.2.3.bad qualifier", + "1.2.3.4.5", "-1.2.3", " 1.2.3" + }) { + assertInvalidVersion("\"" + version + "\"", false); + } + } + + @Test + public void testReadInvalidBundleResourceVersion() throws IOException { + assertInvalidVersion("\"1.2.invalid\"", true); + } + + private void assertInvalidVersion(final String version, final boolean bundleResource) throws IOException { + try { + readVersion(version, bundleResource); + fail(); + } catch (final IOException ioe) { + // expected + } + } + + private void readVersion(final String version, final boolean bundleResource) throws IOException { + final String json = "{\n" + + " \":configurator:version\" : " + version + ",\n" + + " \":configurator:symbolic-name\" : \"com.example.feature\"\n" + + "}"; + new ConfigurationReaderImpl() + .verifyAsBundleResource(bundleResource) + .build(new StringReader(json)) + .readConfigurationResource(); + } + @Test public void testReadInvalidJson() throws IOException { final String json = "{\n \"a\" : 5 \n \"b\" : 2\n}"; From 68f5b4b85187e7df0bc708dcf1969b0ff13d0640 Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:09:09 +0200 Subject: [PATCH 09/13] Validate Configurator version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow OSGi Compendium 8.1.0, Configurator Specification §150.3.1. --- .../json/io/impl/ConfigurationReaderImpl.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java index 98f6925f15..722e2fc6d3 100644 --- a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java +++ b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java @@ -37,6 +37,7 @@ import org.apache.felix.cm.json.io.ConfigurationReader; import org.apache.felix.cm.json.io.ConfigurationResource; import org.apache.felix.cm.json.io.Configurations; +import org.osgi.framework.Version; import org.osgi.service.configurator.ConfiguratorConstants; public class ConfigurationReaderImpl @@ -45,6 +46,9 @@ public class ConfigurationReaderImpl private static final Pattern SYMBOLIC_NAME_PATTERN = Pattern.compile("[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)*"); + private static final Pattern VERSION_PATTERN = Pattern.compile( + "[0-9]+(?:\\.[0-9]+(?:\\.[0-9]+(?:\\.[A-Za-z0-9_-]+)?)?)?"); + private boolean closed = false; private Reader reader; @@ -184,15 +188,22 @@ private void verifyJsonResource() throws IOException { throwIOException("Unknown resource version : ".concat(version.toString())); } } - if (!verifyAsBundleResource) { - // if this is not a bundle resource - // then version and symbolic name must be set - final Object rsrcVersion = JsonSupport - .convertToObject(this.jsonObject.get(ConfiguratorConstants.PROPERTY_VERSION)); - if (rsrcVersion == null) { + final JsonValue rsrcVersion = this.jsonObject.get(ConfiguratorConstants.PROPERTY_VERSION); + if (rsrcVersion == null) { + if (!verifyAsBundleResource) { throwIOException("Missing version information"); } - if (!(rsrcVersion instanceof String)) { + } else { + if (rsrcVersion.getValueType() != ValueType.STRING) { + throwIOException("Invalid version information : ".concat(rsrcVersion.toString())); + } + final String resourceVersion = ((JsonString) rsrcVersion).getString(); + if (!VERSION_PATTERN.matcher(resourceVersion).matches()) { + throwIOException("Invalid version information : ".concat(rsrcVersion.toString())); + } + try { + new Version(resourceVersion); + } catch (final IllegalArgumentException iae) { throwIOException("Invalid version information : ".concat(rsrcVersion.toString())); } } From 49b622379e7da5261e493445a578c603458718ee Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:17:21 +0200 Subject: [PATCH 10/13] Add Configurator property key test --- .../io/impl/ConfigurationReaderImplTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java index 535cc8264b..3c62534899 100644 --- a/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java +++ b/cm.json/src/test/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImplTest.java @@ -30,6 +30,7 @@ import java.io.StringReader; import java.nio.charset.StandardCharsets; import java.util.Dictionary; +import java.util.HashMap; import java.util.Hashtable; import java.util.Map; @@ -218,6 +219,35 @@ private void readVersion(final String version, final boolean bundleResource) thr .readConfigurationResource(); } + @Test + public void testPreserveConfiguratorPropertyKeys() throws IOException { + final String json = "{\n" + + " \":configurator:version\" : \"1.0.0\",\n" + + " \":configurator:symbolic-name\" : \"com.example.feature\",\n" + + " \"com.example.pid\" : {\n" + + " \":configurator:policy\" : \"default\",\n" + + " \":configurator:policy:String\" : \"force\",\n" + + " \":configurator:ranking\" : 10,\n" + + " \":configurator:ranking:Integer\" : 20\n" + + " }\n" + + "}"; + final Map properties = new HashMap<>(); + + new ConfigurationReaderImpl() + .withConfiguratorPropertyHandler((pid, key, value) -> { + assertEquals("com.example.pid", pid); + properties.put(key, value); + }) + .build(new StringReader(json)) + .readConfigurationResource(); + + assertEquals(4, properties.size()); + assertEquals("default", properties.get("policy")); + assertEquals("force", properties.get("policy:String")); + assertEquals(Long.valueOf(10), properties.get("ranking")); + assertEquals(Long.valueOf(20), properties.get("ranking:Integer")); + } + @Test public void testReadInvalidJson() throws IOException { final String json = "{\n \"a\" : 5 \n \"b\" : 2\n}"; From cea1383256d1d514a83b182332b543c32c29ce32 Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:19:14 +0200 Subject: [PATCH 11/13] Preserve Configurator property keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow OSGi Compendium 8.1.0, Configurator Specification §150.3.3. --- .../apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java index 722e2fc6d3..0be40b10dc 100644 --- a/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java +++ b/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/ConfigurationReaderImpl.java @@ -239,7 +239,7 @@ public KeyInfo(final String mapKey) { if (isInternal) { key = key.substring(ConfigurationResource.CONFIGURATOR_PROPERTY_PREFIX.length()); } - final int pos = key.indexOf(':'); + final int pos = isInternal ? -1 : key.indexOf(':'); String typeInfo = null; if (pos != -1) { typeInfo = key.substring(pos + 1); From b04ed8e88927e0b9ea202a500bfb6178ee93981b Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:39:52 +0200 Subject: [PATCH 12/13] Update Configurator to Felix parent 9 --- configurator/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configurator/pom.xml b/configurator/pom.xml index 3d0b1770cb..8355ffea09 100644 --- a/configurator/pom.xml +++ b/configurator/pom.xml @@ -22,7 +22,7 @@ org.apache.felix felix-parent - 7 + 9 From 1a925ae49d23043feef8eeb654f739f9fd36cbf2 Mon Sep 17 00:00:00 2001 From: Vaclav Haisman Date: Mon, 24 Aug 2026 21:40:30 +0200 Subject: [PATCH 13/13] Update Configurator cm.json dependency --- configurator/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configurator/pom.xml b/configurator/pom.xml index 8355ffea09..f383900e44 100644 --- a/configurator/pom.xml +++ b/configurator/pom.xml @@ -114,7 +114,7 @@ org.apache.felix org.apache.felix.cm.json - 2.0.0 + 2.0.9-SNAPSHOT provided