You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2020/04/22 11:42:28 UTC
[sling-org-apache-sling-installer-core] branch master updated:
SLING-9362 : Use Apache Felix cm.json for JSON handling
This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-installer-core.git
The following commit(s) were added to refs/heads/master by this push:
new 61bc2e0 SLING-9362 : Use Apache Felix cm.json for JSON handling
61bc2e0 is described below
commit 61bc2e04f0618a69a784c708508fd94a2dae5de6
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Wed Apr 22 13:42:12 2020 +0200
SLING-9362 : Use Apache Felix cm.json for JSON handling
---
bnd.bnd | 6 +--
pom.xml | 14 ++----
.../installer/core/impl/InternalResource.java | 50 +++-------------------
.../serializer/JsonConfigurationSerializer.java | 9 ++--
4 files changed, 14 insertions(+), 65 deletions(-)
diff --git a/bnd.bnd b/bnd.bnd
index 49f891e..2b7804b 100644
--- a/bnd.bnd
+++ b/bnd.bnd
@@ -1,7 +1,3 @@
--includeresource: @org.apache.felix.configadmin-[0-9.]*.jar!/org/apache/felix/cm/file/ConfigurationHandler.*,\
- @org.apache.sling.feature.io-[0-9.]*.jar!/org/apache/sling/feature/io/ConfiguratorUtil.*,\
- @org.apache.sling.feature.io-[0-9.]*.jar!/org/apache/sling/feature/io/CloseShieldWriter.*
--conditionalpackage: org.apache.felix.configurator.impl.json,\
- org.apache.felix.configurator.impl.model
+-includeresource: @org.apache.felix.configadmin-[0-9.]*.jar!/org/apache/felix/cm/file/ConfigurationHandler.*
Provide-Capability: osgi.service;objectClass:List<String>="org.apache.sling.installer.api.OsgiInstaller,org.apache.sling.installer.api.ResourceChangeListener,org.apache.sling.installer.api.info.InfoProvider,org.apache.sling.installer.api.tasks.RetryHandler",\
osgi.service;objectClass:List<String>="org.apache.sling.installer.api.event.InstallationListener,org.apache.sling.installer.api.jmx.InstallerMBean"
diff --git a/pom.xml b/pom.xml
index c8b2d92..e6de3c9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -201,7 +201,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.johnzon</artifactId>
- <version>1.0.0</version>
+ <version>1.2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -220,17 +220,11 @@
<version>1.8.12</version>
<scope>provided</scope>
</dependency>
- <!-- We use classes from the configurator, json api, converter and feature.io to read/write JSON config files -->
+ <!-- JSON Configurations -->
<dependency>
<groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.configurator</artifactId>
- <version>1.0.10</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.feature.io</artifactId>
- <version>1.2.0</version>
+ <artifactId>org.apache.felix.cm.json</artifactId>
+ <version>1.0.3-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- Basic dependencies for Unit Tests -->
diff --git a/src/main/java/org/apache/sling/installer/core/impl/InternalResource.java b/src/main/java/org/apache/sling/installer/core/impl/InternalResource.java
index 8725395..b449ac3 100644
--- a/src/main/java/org/apache/sling/installer/core/impl/InternalResource.java
+++ b/src/main/java/org/apache/sling/installer/core/impl/InternalResource.java
@@ -19,13 +19,12 @@
package org.apache.sling.installer.core.impl;
import java.io.BufferedInputStream;
-import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.Reader;
import java.net.URI;
-import java.net.URL;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.Enumeration;
@@ -34,9 +33,7 @@ import java.util.List;
import java.util.Properties;
import org.apache.felix.cm.file.ConfigurationHandler;
-import org.apache.felix.configurator.impl.json.JSONUtil;
-import org.apache.felix.configurator.impl.json.TypeConverter;
-import org.apache.felix.configurator.impl.model.ConfigurationFile;
+import org.apache.felix.cm.json.Configurations;
import org.apache.sling.installer.api.InstallableResource;
/**
@@ -231,7 +228,6 @@ public class InternalResource extends InstallableResource {
final InputStream is, final String scheme, final String id)
throws IOException {
if ( id.endsWith(".cfg.json") ) {
- final String name = scheme.concat(":").concat(id);
String configId;
int pos = id.lastIndexOf('/');
if ( pos == -1 ) {
@@ -245,48 +241,12 @@ public class InternalResource extends InstallableResource {
}
configId = removeConfigExtension(configId);
- final TypeConverter typeConverter = new TypeConverter(null);
- final JSONUtil.Report report = new JSONUtil.Report();
-
// read from input stream
- final String contents;
- try(final BufferedReader buf = new BufferedReader(
- new InputStreamReader(is, "UTF-8"))) {
-
- final StringBuilder sb = new StringBuilder();
-
- sb.append("{ \"");
- sb.append(configId);
- sb.append("\" : ");
- String line;
+ try(final Reader reader = new InputStreamReader(is, "UTF-8")) {
+ return Configurations.buildReader()
+ .withIdentifier(configId).build(reader).readConfiguration();
- while ((line = buf.readLine()) != null) {
- sb.append(line);
- sb.append('\n');
- }
- sb.append("}");
-
- contents = sb.toString();
- }
-
- final URL url = new URL("file://" + configId);
-
- final ConfigurationFile config = JSONUtil.readJSON(typeConverter, name, url, 0, contents, report);
-
- if ( !report.errors.isEmpty() || !report.warnings.isEmpty() ) {
- final StringBuilder builder = new StringBuilder();
- builder.append("Errors in configuration:");
- for(final String w : report.warnings) {
- builder.append("\n");
- builder.append(w);
- }
- for(final String e : report.errors) {
- builder.append("\n");
- builder.append(e);
- }
- throw new IOException(builder.toString());
}
- return config.getConfigurations().get(0).getProperties();
} else {
final Hashtable<String, Object> ht = new Hashtable<>();
diff --git a/src/main/java/org/apache/sling/installer/core/impl/serializer/JsonConfigurationSerializer.java b/src/main/java/org/apache/sling/installer/core/impl/serializer/JsonConfigurationSerializer.java
index 7d364d9..0f7d84e 100644
--- a/src/main/java/org/apache/sling/installer/core/impl/serializer/JsonConfigurationSerializer.java
+++ b/src/main/java/org/apache/sling/installer/core/impl/serializer/JsonConfigurationSerializer.java
@@ -25,20 +25,19 @@ import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.Dictionary;
-import org.apache.sling.feature.io.ConfiguratorUtil;
+import org.apache.felix.cm.json.Configurations;
import org.apache.sling.installer.api.serializer.ConfigurationSerializer;
/** Serializes dictionary configuration objects (as specified in the configuration admin) into JSON format.
- *
+ *
* @see <a href="https://osgi.org/specification/osgi.cmpn/7.0.0/service.configurator.html">OSGi Configurator Spec</a>
- * @see <a href=
- * "https://github.com/apache/felix/blob/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java">JSONUtil</a> */
+ */
public class JsonConfigurationSerializer implements ConfigurationSerializer {
@Override
public void serialize(Dictionary<String, Object> dictionary, OutputStream outputStream) throws IOException {
Writer writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
- ConfiguratorUtil.writeConfiguration(writer, dictionary);
+ Configurations.buildWriter().build(writer).writeConfiguration(dictionary);
writer.flush();
// do not close the writer to prevent closing the underlying outputstream
}