You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2017/03/30 20:43:06 UTC
svn commit: r1789581 - in /sling/trunk/bundles/extensions/caconfig: impl/
impl/src/main/java/org/apache/sling/caconfig/impl/override/
impl/src/test/java/org/apache/sling/caconfig/impl/
impl/src/test/java/org/apache/sling/caconfig/impl/override/ impl/sr...
Author: sseifert
Date: Thu Mar 30 20:43:05 2017
New Revision: 1789581
URL: http://svn.apache.org/viewvc?rev=1789581&view=rev
Log: (empty)
Modified:
sling/trunk/bundles/extensions/caconfig/impl/pom.xml
sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideStringParser.java
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImplTest.java
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/OverrideStringParserTest.java
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
sling/trunk/bundles/extensions/caconfig/integration-tests/pom.xml
sling/trunk/bundles/extensions/caconfig/integration-tests/src/main/provisioning/integration-tests.txt
Modified: sling/trunk/bundles/extensions/caconfig/impl/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/pom.xml?rev=1789581&r1=1789580&r2=1789581&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/caconfig/impl/pom.xml (original)
+++ sling/trunk/bundles/extensions/caconfig/impl/pom.xml Thu Mar 30 20:43:05 2017
@@ -47,8 +47,10 @@
<extensions>true</extensions>
<configuration>
<instructions>
- <!-- Remove those package imports because embedded and relocated via shade plugin (see below) -->
<Import-Package>
+ <!-- Support XSS API 1.x and 2.x - we use only classes from the API with same signature in both versions -->
+ org.apache.sling.xss;version="[1.0.0,3)",
+ <!-- Remove those package imports because embedded and relocated via shade plugin (see below) -->
!org.apache.sling.commons.osgi,
*
</Import-Package>
@@ -151,12 +153,6 @@
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.commons.json</artifactId>
- <version>2.0.10</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
@@ -168,6 +164,12 @@
<version>3.2.1</version>
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-json_1.0_spec</artifactId>
+ <version>1.0-alpha-1</version>
+ <scope>provided</scope>
+ </dependency>
<!-- web console dependencies -->
<dependency>
@@ -224,6 +226,12 @@
<version>2.0.87-beta</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.johnzon</groupId>
+ <artifactId>johnzon-core</artifactId>
+ <version>1.0.0</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
Modified: sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideStringParser.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideStringParser.java?rev=1789581&r1=1789580&r2=1789581&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideStringParser.java (original)
+++ sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/override/OverrideStringParser.java Thu Mar 30 20:43:05 2017
@@ -18,9 +18,13 @@
*/
package org.apache.sling.caconfig.impl.override;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -28,12 +32,19 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonException;
+import javax.json.JsonNumber;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import javax.json.JsonReaderFactory;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
-import org.apache.sling.commons.json.JSONArray;
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,6 +63,8 @@ class OverrideStringParser {
private static final Pattern OVERRIDE_PATTERN = Pattern.compile("^(\\[([^\\[\\]=]+)\\])?([^\\[\\]=]+)=(.*)$");
+ private static final JsonReaderFactory JSON_READER_FACTORY = Json.createReaderFactory(Collections.<String,Object>emptyMap());
+
private OverrideStringParser() {
// static method sonly
}
@@ -81,7 +94,7 @@ class OverrideStringParser {
OverrideItem item;
try {
// check if value is JSON = defines whole parameter map for a config name
- JSONObject json = toJson(value);
+ JsonObject json = toJson(value);
if (json != null) {
item = new OverrideItem(path, configName, toMap(json), true);
}
@@ -98,14 +111,11 @@ class OverrideStringParser {
item = new OverrideItem(path, configName, props, false);
}
}
- catch (JSONException ex) {
+ catch (JsonException ex) {
log.warn("Ignore config override string - invalid JSON syntax ({}): {}", ex.getMessage(), overrideString);
continue;
}
- // convert arrays
- convertArrays(item.getProperties());
-
// validate item
if (!isValid(item, overrideString)) {
continue;
@@ -141,11 +151,17 @@ class OverrideStringParser {
* @return JSON object or null if the string does not start with "{"
* @throws JSONException when JSON parsing failed
*/
- private static JSONObject toJson(String value) throws JSONException {
+ private static JsonObject toJson(String value) {
if (!StringUtils.startsWith(value, "{")) {
return null;
}
- return new JSONObject(value);
+ try (Reader reader = new StringReader(value);
+ JsonReader jsonReader = JSON_READER_FACTORY.createReader(reader)) {
+ return jsonReader.readObject();
+ }
+ catch (IOException ex) {
+ return null;
+ }
}
/**
@@ -153,17 +169,12 @@ class OverrideStringParser {
* @param json JSON object
* @return Map (keys/values are not validated)
*/
- private static Map<String,Object> toMap(JSONObject json) {
+ private static Map<String,Object> toMap(JsonObject json) {
Map<String,Object> props = new HashMap<>();
- Iterator<String> keys = json.keys();
+ Iterator<String> keys = json.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
- try {
- props.put(key, json.get(key));
- }
- catch (JSONException e) {
- // should never happen
- }
+ props.put(key, convertJsonValue(json.get(key)));
}
return props;
}
@@ -174,46 +185,50 @@ class OverrideStringParser {
* @return Object
* @throws JSONException If JSON-parsing of value failed
*/
- private static Object convertJsonValue(String jsonValue) throws JSONException {
+ private static Object convertJsonValue(String jsonValue) {
String jsonString = "{\"value\":" + jsonValue + "}";
- JSONObject json = toJson(jsonString);
- return json.opt("value");
+ JsonObject json = toJson(jsonString);
+ return convertJsonValue(json.get("value"));
}
- /**
- * Convert all JSON arrays in the properties map to Java Array counterparts. Invalid arrays are ignored.
- * @param props Properties
- */
- private static void convertArrays(Map<String,Object> props) {
- Map<String,Object> convertedProps = new HashMap<>();
- for (Map.Entry<String, Object> entry : props.entrySet()) {
- Object value = entry.getValue();
- if (value.getClass().equals(JSONArray.class)) {
- JSONArray array = (JSONArray)value;
- if (array.length() == 0) {
- convertedProps.put(entry.getKey(), new String[0]);
- }
- else {
- Object firstValue = array.opt(0);
- if (firstValue != null) {
- try {
- Class firstType = firstValue.getClass();
- Object convertedArray = Array.newInstance(firstType, array.length());
- for (int i=0; i<array.length(); i++) {
- Array.set(convertedArray, i, array.opt(i));
- }
- convertedProps.put(entry.getKey(), convertedArray);
- }
- catch (IllegalArgumentException ex) {
- // ignore arrays with mixed types - will fail later in validation
- }
- }
+ private static Object convertJsonValue(JsonValue jsonValue) {
+ switch (jsonValue.getValueType()) {
+ case STRING:
+ return ((JsonString)jsonValue).getString();
+ case NUMBER:
+ JsonNumber number = (JsonNumber)jsonValue;
+ if (number.isIntegral()) {
+ return number.longValue();
+ }
+ else {
+ return number.doubleValue();
+ }
+ case TRUE:
+ return true;
+ case FALSE:
+ return false;
+ case NULL:
+ return null;
+ case ARRAY:
+ return convertJsonArray((JsonArray)jsonValue);
+ default:
+ throw new RuntimeException("Unexpected JSON value type: " + jsonValue.getValueType() + ": " + jsonValue);
+ }
+ }
+
+ private static Object convertJsonArray(JsonArray jsonArray) {
+ if (jsonArray.size() > 0) {
+ Object firstValue = convertJsonValue(jsonArray.get(0));
+ if (firstValue != null) {
+ Class firstType = firstValue.getClass();
+ Object convertedArray = Array.newInstance(firstType, jsonArray.size());
+ for (int i=0; i<jsonArray.size(); i++) {
+ Array.set(convertedArray, i, convertJsonValue(jsonArray.get(i)));
}
+ return convertedArray;
}
}
- if (!convertedProps.isEmpty()) {
- props.putAll(convertedProps);
- }
+ return new String[0];
}
/**
@@ -239,7 +254,7 @@ class OverrideStringParser {
}
Object value = entry.getValue();
if (value == null || !isSupportedType(value)) {
- log.warn("Ignore config override string - invalid property value ({} - {}): {}", value, value.getClass().getName(), overrideString);
+ log.warn("Ignore config override string - invalid property value ({} - {}): {}", value, value != null ? value.getClass().getName() : "", overrideString);
return false;
}
}
Modified: sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java?rev=1789581&r1=1789580&r2=1789581&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java (original)
+++ sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java Thu Mar 30 20:43:05 2017
@@ -147,7 +147,7 @@ public class ConfigurationResolverValueM
@Test
public void testConfigWithOverride() {
context.registerService(ConfigurationOverrideProvider.class, new DummyConfigurationOverrideProvider(
- "[/content]sampleName={stringParam='override1',intParam=222}"));
+ "[/content]sampleName={\"stringParam\":\"override1\",\"intParam\":222}"));
context.build().resource("/conf/content/site1/sling:configs/sampleName",
"stringParam", "configValue1",
@@ -164,7 +164,7 @@ public class ConfigurationResolverValueM
@Test
public void testConfigCollectionWithOverride() {
context.registerService(ConfigurationOverrideProvider.class, new DummyConfigurationOverrideProvider(
- "[/content]sampleList/stringParam='override1'"));
+ "[/content]sampleList/stringParam=\"override1\""));
context.build().resource("/conf/content/site1/sling:configs/sampleList")
.siblingsMode()
Modified: sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImplTest.java?rev=1789581&r1=1789580&r2=1789581&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImplTest.java (original)
+++ sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImplTest.java Thu Mar 30 20:43:05 2017
@@ -56,13 +56,13 @@ public class ConfigurationOverrideMultip
// 1st provider
context.registerService(ConfigurationOverrideProvider.class, new DummyConfigurationOverrideProvider(
- "test/globalParam1='globalValue1'",
- "[/a/b]test/param1='value1'"), Constants.SERVICE_RANKING, 200);
+ "test/globalParam1=\"globalValue1\"",
+ "[/a/b]test/param1=\"value1\""), Constants.SERVICE_RANKING, 200);
// 2nd provider (may overwrite 1st one)
context.registerService(ConfigurationOverrideProvider.class, new DummyConfigurationOverrideProvider(
- "test/globalParam1='globalValue1a'",
- "[/a/b/c]test={'param1'='value2'}"), Constants.SERVICE_RANKING, 100);
+ "test/globalParam1=\"globalValue1a\"",
+ "[/a/b/c]test={\"param1\":\"value2\"}"), Constants.SERVICE_RANKING, 100);
assertOverride("/a", "test",
ImmutableMap.<String,Object>of("param1", "initialValue"),
Modified: sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/OverrideStringParserTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/OverrideStringParserTest.java?rev=1789581&r1=1789580&r2=1789581&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/OverrideStringParserTest.java (original)
+++ sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/override/OverrideStringParserTest.java Thu Mar 30 20:43:05 2017
@@ -37,7 +37,7 @@ public class OverrideStringParserTest {
private static final Map<String,Object> BASICTYPES_MAP = ImmutableMap.<String,Object>builder()
.put("param1", "value1")
.put("param2", "value2")
- .put("param3", 555)
+ .put("param3", 555L)
.put("param4", 1.23d)
.put("param5", true)
.build();
@@ -45,7 +45,7 @@ public class OverrideStringParserTest {
private static final Map<String,Object> BASICTYPES_ARRAY_MAP = ImmutableMap.<String,Object>builder()
.put("param1", new String[] { "v1a", "v1b" })
.put("param2", new String[] { "v2a", "v2b" })
- .put("param3", new Integer[] { 555, 666 })
+ .put("param3", new Long[] { 555L, 666L })
.put("param4", new Double[] { 1.23d, 2.34d })
.put("param5", new Boolean[] { true, false })
.put("param6", new String[0])
@@ -61,7 +61,7 @@ public class OverrideStringParserTest {
public void testBasicTypes() {
List<OverrideItem> result = parse(
"configName/param1=\"value1\"",
- "configName/param2='value2'",
+ "configName/param2=\"value2\"",
"configName/param3=555",
"configName/param4=1.23",
"configName/param5=true");
@@ -78,7 +78,7 @@ public class OverrideStringParserTest {
public void testBasicTypesArray() {
List<OverrideItem> result = parse(
"config.name/param1=[\"v1a\",\"v1b\"]",
- "config.name/param2=['v2a','v2b']",
+ "config.name/param2=[\"v2a\",\"v2b\"]",
"config.name/param3=[555,666]",
"config.name/param4=[1.23,2.34]",
"config.name/param5=[true,false]",
@@ -98,10 +98,10 @@ public class OverrideStringParserTest {
public void testBasicTypesJson() {
List<OverrideItem> result = parse(
"configName={\"param1\":\"value1\","
- + "'param2':'value2',"
- + "param3:555,"
- + "param4:1.23,"
- + "param5:true}");
+ + "\"param2\":\"value2\","
+ + "\"param3\":555,"
+ + "\"param4\":1.23,"
+ + "\"param5\":true}");
assertEquals(1, result.size());
OverrideItem item = result.get(0);
@@ -115,11 +115,11 @@ public class OverrideStringParserTest {
public void testBasicTypesJsonArray() {
List<OverrideItem> result = parse(
"configName={\"param1\":[\"v1a\",\"v1b\"],"
- + "'param2':['v2a','v2b'],"
- + "param3:[555,666],"
- + "param4:[1.23,2.34],"
- + "param5:[true,false],"
- + "param6:[]}");
+ + "\"param2\":[\"v2a\",\"v2b\"],"
+ + "\"param3\":[555,666],"
+ + "\"param4\":[1.23,2.34],"
+ + "\"param5\":[true,false],"
+ + "\"param6\":[]}");
assertEquals(1, result.size());
OverrideItem item = result.get(0);
@@ -158,10 +158,10 @@ public class OverrideStringParserTest {
"[/a/b]configName/param1=\"value1\"",
"configName/param2=\"value2\"",
"[/a/b]configName={\"param1\":\"value1\","
- + "'param2':'value2',"
- + "param3:555,"
- + "param4:1.23,"
- + "param5:true}");
+ + "\"param2\":\"value2\","
+ + "\"param3\":555,"
+ + "\"param4\":1.23,"
+ + "\"param5\":true}");
assertEquals(3, result.size());
@@ -193,7 +193,7 @@ public class OverrideStringParserTest {
"[/a/b]configName=\"value1\"",
"[/a/../b]configName/param1=\"value1\"",
"[]configName=\"value1\"",
- "configName/param2:'value2'",
+ "configName/param2:\"value2\"",
"configName/param3",
"configName/param3=",
"[[/a/b]]configName/param4=1.23",
@@ -212,7 +212,7 @@ public class OverrideStringParserTest {
"configName1={param1:[\"value1\",123]}",
"configName2={param1:{\"subparam1\":\"value1\"}}",
"configName1={param1:null}",
- "configName1={'param1:'value1'}");
+ "configName1={\"param1:\"value1\"}");
// all ignored
assertEquals(0, result.size());
Modified: sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java?rev=1789581&r1=1789580&r2=1789581&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java (original)
+++ sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java Thu Mar 30 20:43:05 2017
@@ -293,7 +293,7 @@ public class ConfigurationManagerImplTes
@Test
public void testGetConfiguration_WithOverride() {
context.registerService(ConfigurationOverrideProvider.class, new DummyConfigurationOverrideProvider(
- "[/content]" + CONFIG_NAME + "={prop1='override1'}"));
+ "[/content]" + CONFIG_NAME + "={\"prop1\":\"override1\"}"));
ConfigurationData configData = underTest.getConfiguration(contextResource, CONFIG_NAME);
assertNotNull(configData);
@@ -458,7 +458,7 @@ public class ConfigurationManagerImplTes
@Test
public void testGetConfigurationCollection_WithOverride() {
context.registerService(ConfigurationOverrideProvider.class, new DummyConfigurationOverrideProvider(
- "[/content]" + CONFIG_COL_NAME + "/prop1='override1'"));
+ "[/content]" + CONFIG_COL_NAME + "/prop1=\"override1\""));
List<ConfigurationData> configDatas = ImmutableList.copyOf(underTest.getConfigurationCollection(contextResource, CONFIG_COL_NAME).getItems());
assertEquals(2, configDatas.size());
Modified: sling/trunk/bundles/extensions/caconfig/integration-tests/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/integration-tests/pom.xml?rev=1789581&r1=1789580&r2=1789581&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/caconfig/integration-tests/pom.xml (original)
+++ sling/trunk/bundles/extensions/caconfig/integration-tests/pom.xml Thu Mar 30 20:43:05 2017
@@ -209,34 +209,28 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.junit.teleporter</artifactId>
- <version>1.0.8</version>
+ <version>1.0.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.junit.core</artifactId>
- <version>1.0.22</version>
+ <version>1.0.24-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.testing.tools</artifactId>
- <version>1.0.14</version>
+ <version>1.0.15-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.resourcebuilder</artifactId>
- <version>1.0.0</version>
+ <version>1.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>3.3.2</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.launchpad</artifactId>
<version>9-SNAPSHOT</version>
Modified: sling/trunk/bundles/extensions/caconfig/integration-tests/src/main/provisioning/integration-tests.txt
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/integration-tests/src/main/provisioning/integration-tests.txt?rev=1789581&r1=1789580&r2=1789581&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/caconfig/integration-tests/src/main/provisioning/integration-tests.txt (original)
+++ sling/trunk/bundles/extensions/caconfig/integration-tests/src/main/provisioning/integration-tests.txt Thu Mar 30 20:43:05 2017
@@ -22,7 +22,6 @@
org.apache.sling/org.apache.sling.launchpad//slingfeature/slingfeature
[artifacts startLevel=15]
- org.apache.commons/commons-lang3
org.apache.sling/org.apache.sling.junit.core
org.apache.sling/org.apache.sling.testing.tools
org.apache.sling/org.apache.sling.resourcebuilder