You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2020/04/20 06:47:56 UTC
[felix-dev] branch master updated: FELIX-6264 : Catch JSON
exceptions and rethrow as IOExceptions
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/felix-dev.git
The following commit(s) were added to refs/heads/master by this push:
new 263ca9d FELIX-6264 : Catch JSON exceptions and rethrow as IOExceptions
263ca9d is described below
commit 263ca9dee476eb778242c72ee2b8601e811612e5
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Mon Apr 20 08:47:42 2020 +0200
FELIX-6264 : Catch JSON exceptions and rethrow as IOExceptions
---
cm.json/pom.xml | 4 +-
.../cm/json/impl/ConfigurationReaderImpl.java | 13 ++++-
.../cm/json/impl/ConfigurationWriterImpl.java | 31 ++++++----
.../cm/json/impl/ConfigurationReaderImplTest.java | 17 ++++++
.../felix/cm/json/impl/TypeConverterTest.java | 66 +++++++++++-----------
5 files changed, 83 insertions(+), 48 deletions(-)
diff --git a/cm.json/pom.xml b/cm.json/pom.xml
index c5a654c..ad518cf 100644
--- a/cm.json/pom.xml
+++ b/cm.json/pom.xml
@@ -50,7 +50,7 @@
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
- <version>3.5.0</version>
+ <version>4.2.1</version>
<extensions>true</extensions>
<configuration>
<instructions>
@@ -95,7 +95,7 @@
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.converter</artifactId>
- <version>1.0.12</version>
+ <version>1.0.15-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/cm.json/src/main/java/org/apache/felix/cm/json/impl/ConfigurationReaderImpl.java b/cm.json/src/main/java/org/apache/felix/cm/json/impl/ConfigurationReaderImpl.java
index 467290f..286e93e 100644
--- a/cm.json/src/main/java/org/apache/felix/cm/json/impl/ConfigurationReaderImpl.java
+++ b/cm.json/src/main/java/org/apache/felix/cm/json/impl/ConfigurationReaderImpl.java
@@ -25,6 +25,7 @@ import java.util.Hashtable;
import java.util.List;
import java.util.Map;
+import javax.json.JsonException;
import javax.json.JsonObject;
import javax.json.JsonValue;
import javax.json.JsonValue.ValueType;
@@ -106,7 +107,11 @@ public class ConfigurationReaderImpl
public Hashtable<String, Object> readConfiguration() throws IOException {
checkClosed();
if (this.reader != null) {
- this.jsonObject = JsonSupport.parseJson(this.identifier, this.reader);
+ try {
+ this.jsonObject = JsonSupport.parseJson(this.identifier, this.reader);
+ } catch ( final JsonException jpe) {
+ throw new IOException("Invalid JSON " + jpe.getMessage(), jpe);
+ }
}
return readSingleConfiguration("<configuration>", this.jsonObject);
}
@@ -115,7 +120,11 @@ public class ConfigurationReaderImpl
public ConfigurationResource readConfigurationResource() throws IOException {
checkClosed();
if (this.reader != null) {
- this.jsonObject = JsonSupport.parseJson(this.identifier, this.reader);
+ try {
+ this.jsonObject = JsonSupport.parseJson(this.identifier, this.reader);
+ } catch ( final JsonException jpe) {
+ throw new IOException("Invalid JSON " + jpe.getMessage(), jpe);
+ }
}
verifyJsonResource();
final ConfigurationResource resource = new ConfigurationResource();
diff --git a/cm.json/src/main/java/org/apache/felix/cm/json/impl/ConfigurationWriterImpl.java b/cm.json/src/main/java/org/apache/felix/cm/json/impl/ConfigurationWriterImpl.java
index ef44ab9..01d3666 100644
--- a/cm.json/src/main/java/org/apache/felix/cm/json/impl/ConfigurationWriterImpl.java
+++ b/cm.json/src/main/java/org/apache/felix/cm/json/impl/ConfigurationWriterImpl.java
@@ -28,6 +28,7 @@ import java.util.Hashtable;
import java.util.Map;
import javax.json.Json;
+import javax.json.JsonException;
import javax.json.JsonValue;
import javax.json.stream.JsonGenerator;
@@ -76,8 +77,12 @@ public class ConfigurationWriterImpl
@Override
public void writeConfiguration(final Dictionary<String, Object> properties) throws IOException {
checkClosed();
- writeConfigurationInternal(properties);
- if ( this.closeGenerator) this.generator.close();
+ try {
+ writeConfigurationInternal(properties);
+ if ( this.closeGenerator) this.generator.close();
+ } catch ( final JsonException je) {
+ throw new IOException(je.getMessage(), je);
+ }
}
private void writeConfigurationInternal(final Dictionary<String, Object> properties) throws IOException {
@@ -102,15 +107,19 @@ public class ConfigurationWriterImpl
@Override
public void writeConfigurationResource(final ConfigurationResource resource) throws IOException {
checkClosed();
- generator.writeStartObject();
- for (final Map.Entry<String, Object> entry : resource.getProperties().entrySet()) {
- generator.write(entry.getKey(), JsonSupport.convertToJson(entry.getValue()));
- }
- for (final Map.Entry<String, Hashtable<String, Object>> entry : resource.getConfigurations().entrySet()) {
- generator.writeKey(entry.getKey());
- writeConfigurationInternal(entry.getValue());
+ try {
+ generator.writeStartObject();
+ for (final Map.Entry<String, Object> entry : resource.getProperties().entrySet()) {
+ generator.write(entry.getKey(), JsonSupport.convertToJson(entry.getValue()));
+ }
+ for (final Map.Entry<String, Hashtable<String, Object>> entry : resource.getConfigurations().entrySet()) {
+ generator.writeKey(entry.getKey());
+ writeConfigurationInternal(entry.getValue());
+ }
+ generator.writeEnd();
+ if ( this.closeGenerator) this.generator.close();
+ } catch ( final JsonException je) {
+ throw new IOException(je.getMessage(), je);
}
- generator.writeEnd();
- if ( this.closeGenerator) this.generator.close();
}
}
diff --git a/cm.json/src/test/java/org/apache/felix/cm/json/impl/ConfigurationReaderImplTest.java b/cm.json/src/test/java/org/apache/felix/cm/json/impl/ConfigurationReaderImplTest.java
index 75efcb4..91162b3 100644
--- a/cm.json/src/test/java/org/apache/felix/cm/json/impl/ConfigurationReaderImplTest.java
+++ b/cm.json/src/test/java/org/apache/felix/cm/json/impl/ConfigurationReaderImplTest.java
@@ -20,17 +20,21 @@ package org.apache.felix.cm.json.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.io.StringReader;
import java.nio.charset.StandardCharsets;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Map;
+import javax.json.JsonException;
+
import org.junit.Test;
public class ConfigurationReaderImplTest {
@@ -89,4 +93,17 @@ public class ConfigurationReaderImplTest {
assertEquals("Hello World", configs.get("config.a").get("text"));
assertEquals(8080, configs.get("config.b").get("port"));
}
+
+ @Test
+ public void testReadInvalidJson() throws IOException {
+ final String json = "{\n \"a\" : 5 \n \"b\" : 2\n}";
+
+ final ConfigurationReaderImpl cfgReader = new ConfigurationReaderImpl();
+ try {
+ cfgReader.build(new StringReader(json)).readConfigurationResource();
+ fail();
+ } catch ( final IOException ioe) {
+ assertTrue(ioe.getCause() instanceof JsonException);
+ }
+ }
}
diff --git a/cm.json/src/test/java/org/apache/felix/cm/json/impl/TypeConverterTest.java b/cm.json/src/test/java/org/apache/felix/cm/json/impl/TypeConverterTest.java
index 36bc5fb..5cfd4db 100644
--- a/cm.json/src/test/java/org/apache/felix/cm/json/impl/TypeConverterTest.java
+++ b/cm.json/src/test/java/org/apache/felix/cm/json/impl/TypeConverterTest.java
@@ -478,24 +478,24 @@ public class TypeConverterTest {
(Integer[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Integer[]"));
assertArrayEquals(new long[] { 1 },
(long[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "long[]"));
-// assertArrayEquals(new Long[] { 1L },
-// (Long[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Long[]"));
-// assertArrayEquals(new float[] { 1f },
-// (float[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "float[]"), 0.1f);
-// assertArrayEquals(new Float[] { 1f },
-// (Float[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Float[]"));
-// assertArrayEquals(new double[] { 1 },
-// (double[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "double[]"), 0.1);
-// assertArrayEquals(new Double[] { 1.0 },
-// (Double[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Double[]"));
-// assertArrayEquals(new byte[] { 1 },
-// (byte[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "byte[]"));
-// assertArrayEquals(new Byte[] { 1 },
-// (Byte[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Byte[]"));
-// assertArrayEquals(new short[] { 1 },
-// (short[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "short[]"));
-// assertArrayEquals(new Short[] { 1 },
-// (Short[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Short[]"));
+ assertArrayEquals(new Long[] { 1L },
+ (Long[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Long[]"));
+ assertArrayEquals(new float[] { 1f },
+ (float[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "float[]"), 0.1f);
+ assertArrayEquals(new Float[] { 1f },
+ (Float[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Float[]"));
+ assertArrayEquals(new double[] { 1 },
+ (double[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "double[]"), 0.1);
+ assertArrayEquals(new Double[] { 1.0 },
+ (Double[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Double[]"));
+ assertArrayEquals(new byte[] { 1 },
+ (byte[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "byte[]"));
+ assertArrayEquals(new Byte[] { 1 },
+ (Byte[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Byte[]"));
+ assertArrayEquals(new short[] { 1 },
+ (short[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "short[]"));
+ assertArrayEquals(new Short[] { 1 },
+ (Short[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "Short[]"));
assertArrayEquals(new char[] { (char)1 },
(char[]) TypeConverter.convertObjectToType(JsonValue.TRUE, "char[]"));
assertArrayEquals(new Character[] { Character.valueOf((char)1) },
@@ -513,21 +513,21 @@ public class TypeConverterTest {
assertArrayEquals(new Integer[] { 1 },
((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Integer>"))
.toArray());
-// assertArrayEquals(new Long[] { 1L },
-// ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Long>"))
-// .toArray());
-// assertArrayEquals(new Float[] { 1f },
-// ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Float>"))
-// .toArray());
-// assertArrayEquals(new Double[] { 1.0 },
-// ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Double>"))
-// .toArray());
-// assertArrayEquals(new Byte[] { 1 },
-// ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Byte>"))
-// .toArray());
-// assertArrayEquals(new Short[] { 1 },
-// ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Short>"))
-// .toArray());
+ assertArrayEquals(new Long[] { 1L },
+ ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Long>"))
+ .toArray());
+ assertArrayEquals(new Float[] { 1f },
+ ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Float>"))
+ .toArray());
+ assertArrayEquals(new Double[] { 1.0 },
+ ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Double>"))
+ .toArray());
+ assertArrayEquals(new Byte[] { 1 },
+ ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Byte>"))
+ .toArray());
+ assertArrayEquals(new Short[] { 1 },
+ ((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Short>"))
+ .toArray());
assertArrayEquals(Arrays.asList(Character.valueOf((char)1)).toArray(),
((Collection<?>) TypeConverter.convertObjectToType(JsonValue.TRUE, "Collection<Character>"))
.toArray());