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
     }