You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by pl...@apache.org on 2015/03/01 18:09:14 UTC

incubator-tamaya git commit: TAMAYA-39 Added JSON supporting implementation of ConfigurationFormat.

Repository: incubator-tamaya
Updated Branches:
  refs/heads/master 7f1b64536 -> a26f11b3e


TAMAYA-39 Added JSON supporting implementation of ConfigurationFormat.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/a26f11b3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/a26f11b3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/a26f11b3

Branch: refs/heads/master
Commit: a26f11b3efbc545b28cd3d13d91654d8ccd2b1c3
Parents: 7f1b645
Author: Oliver B. Fischer <pl...@apache.org>
Authored: Sun Mar 1 18:08:27 2015 +0100
Committer: Oliver B. Fischer <pl...@apache.org>
Committed: Sun Mar 1 18:08:27 2015 +0100

----------------------------------------------------------------------
 .../apache/tamaya/modules/json/JSONFormat.java  |  35 ++--
 ...org.apache.tamaya.format.ConfigurationFormat |  19 ++
 .../json/CommonJSONTestCaseCollection.java      | 173 +++++++++++++++++++
 .../modules/json/ConfigurationDataUCD.java      |  44 +++++
 .../tamaya/modules/json/JSONFormatIT.java       |  47 +++++
 .../tamaya/modules/json/JSONFormatTest.java     |  13 +-
 .../modules/json/JSONPropertySourceTest.java    | 166 +-----------------
 .../modules/json/JSONPropertySourceUCD.java     |  39 +++++
 .../tamaya/modules/json/UnifiedConfigData.java  |  32 ++++
 9 files changed, 390 insertions(+), 178 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a26f11b3/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONFormat.java
----------------------------------------------------------------------
diff --git a/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONFormat.java b/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONFormat.java
index f7f9361..21def33 100644
--- a/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONFormat.java
+++ b/modules/json/src/main/java/org/apache/tamaya/modules/json/JSONFormat.java
@@ -18,13 +18,20 @@
  */
 package org.apache.tamaya.modules.json;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.format.ConfigurationDataBuilder;
 import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.format.InputStreamCloser;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.HashMap;
 import java.util.Objects;
-import java.util.concurrent.locks.StampedLock;
 
 /**
  * Implementation of the {@link org.apache.tamaya.format.ConfigurationFormat}
@@ -33,10 +40,6 @@ import java.util.concurrent.locks.StampedLock;
  * @see <a href="http://www.json.org">JSON format specification</a>
  */
 public class JSONFormat implements ConfigurationFormat {
-    /**
-     * Lock for internal synchronization.
-     */
-    private StampedLock lock = new StampedLock();
 
     @Override
     public boolean accepts(URL url) {
@@ -45,24 +48,24 @@ public class JSONFormat implements ConfigurationFormat {
         boolean isAFile = url.getProtocol().equals("file");
         boolean isJSON = url.getPath().endsWith(".json");
 
-
         return isAFile && isJSON;
     }
 
     @Override
     public ConfigurationData readConfiguration(String resource, InputStream inputStream) {
 
-//        try (InputStream is = new InputStreamCloser(inputStream)){
-//            ObjectMapper mapper = new ObjectMapper();
-//            JsonNode root = mapper.readTree(is);
-
-
-//        } catch (IOException e) {
-//            throw new ConfigException("Failed to ");
-//        }
-
+        try (InputStream is = new InputStreamCloser(inputStream)){
+            ObjectMapper mapper = new ObjectMapper();
+            JsonNode root = mapper.readTree(is);
 
+            HashMap<String, String> values = new HashMap<>();
+            JSONVisitor visitor = new JSONVisitor((ObjectNode) root, values);
+            visitor.run();
 
-        throw new RuntimeException("Not implemented yet!");
+            return ConfigurationDataBuilder.of(resource, this).addProperties(values)
+                                           .build();
+        } catch (IOException e) {
+            throw new ConfigException("Failed to read data from " + resource);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a26f11b3/modules/json/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat
----------------------------------------------------------------------
diff --git a/modules/json/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat b/modules/json/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat
new file mode 100644
index 0000000..a482df3
--- /dev/null
+++ b/modules/json/src/main/resources/META-INF/services/org.apache.tamaya.format.ConfigurationFormat
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy current the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+org.apache.tamaya.modules.json.JSONFormat
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a26f11b3/modules/json/src/test/java/org/apache/tamaya/modules/json/CommonJSONTestCaseCollection.java
----------------------------------------------------------------------
diff --git a/modules/json/src/test/java/org/apache/tamaya/modules/json/CommonJSONTestCaseCollection.java b/modules/json/src/test/java/org/apache/tamaya/modules/json/CommonJSONTestCaseCollection.java
new file mode 100644
index 0000000..2929bfa
--- /dev/null
+++ b/modules/json/src/test/java/org/apache/tamaya/modules/json/CommonJSONTestCaseCollection.java
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.modules.json;
+
+import org.apache.tamaya.ConfigException;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.Matchers;
+import org.junit.Test;
+
+import java.net.URL;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.hasSize;
+
+/**
+ * Class with a collection of common test cases each JSON processing
+ * class must be able to pass.
+ */
+public abstract class CommonJSONTestCaseCollection {
+
+    abstract UnifiedConfigData getPropertiesFrom(URL source) throws Exception;
+
+    @Test
+    public void canReadNestedStringOnlyJSONConfigFile() throws Exception {
+        URL configURL = JSONPropertySourceTest.class
+                .getResource("/configs/valid/simple-nested-string-only-config-1.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        UnifiedConfigData properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getProperties().keySet(), hasSize(5));
+
+        String keyB = properties.get("b");
+        String keyDO = properties.get("d.o");
+        String keyDP = properties.get("d.p");
+
+        assertThat(keyB, notNullValue());
+        assertThat(keyB, equalTo("B"));
+        assertThat(keyDO, notNullValue());
+        assertThat(keyDO, equalTo("O"));
+        assertThat(keyDP, Matchers.notNullValue());
+        assertThat(keyDP, is("P"));
+    }
+
+    @Test
+    public void canReadNestedStringOnlyJSONConfigFileWithObjectInTheMiddle()
+            throws Exception {
+        URL configURL = JSONPropertySourceTest.class
+                .getResource("/configs/valid/simple-nested-string-only-config-2.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        UnifiedConfigData properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getProperties().keySet(), hasSize(4));
+
+        String keyA = properties.get("a");
+        String keyDO = properties.get("b.o");
+        String keyDP = properties.get("b.p");
+        String keyC = properties.get("c");
+
+        assertThat(keyA, notNullValue());
+        assertThat(keyA, is("A"));
+        assertThat(keyC, notNullValue());
+        assertThat(keyC, equalTo("C"));
+        assertThat(keyDO, notNullValue());
+        assertThat(keyDO, equalTo("O"));
+        assertThat(keyDP, notNullValue());
+        assertThat(keyDP, is("P"));
+    }
+
+    @Test(expected = ConfigException.class)
+    public void canHandleIllegalJSONFileWhichContainsAnArray() throws Exception {
+        URL configURL = JSONPropertySourceTest.class.getResource("/configs/invalid/with-array.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        getPropertiesFrom(configURL).getProperties();
+    }
+
+    @Test(expected = ConfigException.class)
+    public void canHandleIllegalJSONFileConsistingOfOneOpeningBracket() throws Exception {
+        URL configURL = JSONPropertySourceTest.class.getResource("/configs/invalid/only-opening-bracket.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        getPropertiesFrom(configURL).getProperties();
+    }
+
+    @Test(expected = ConfigException.class)
+    public void canHandleIllegalJSONFileWhichIsEmpty() throws Exception {
+        URL configURL = JSONPropertySourceTest.class.getResource("/configs/invalid/empty-file.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        getPropertiesFrom(configURL).getProperties();
+    }
+
+    @Test
+    public void priorityInConfigFileOverwriteExplicitlyGivenPriority() throws Exception {
+        URL configURL = JSONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        UnifiedConfigData properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getOrdinal(), is(16784));
+    }
+
+    @Test
+    public void canReadFlatStringOnlyJSONConfigFile() throws Exception {
+        URL configURL = JSONPropertySourceTest.class.getResource("/configs/valid/simple-flat-string-only-config.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        UnifiedConfigData properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getProperties().keySet(), hasSize(3));
+
+        String keyA = properties.get("a");
+        String keyB = properties.get("b");
+        String keyC = properties.get("c");
+
+        assertThat(keyA, notNullValue());
+        assertThat(keyA, equalTo("A"));
+        assertThat(keyB, notNullValue());
+        assertThat(keyB, is("B"));
+        assertThat(keyC, notNullValue());
+        assertThat(keyC, is("C"));
+    }
+
+    @Test(expected = ConfigException.class)
+    public void emptyJSONFileResultsInConfigException() throws Exception {
+        URL configURL = JSONPropertySourceTest.class.getResource("/configs/invalid/empty-file.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        UnifiedConfigData properties = getPropertiesFrom(configURL);
+
+        properties.getProperties();
+    }
+
+    @Test
+    public void canHandleEmptyJSONObject() throws Exception {
+        URL configURL = JSONPropertySourceTest.class.getResource("/configs/valid/empty-object-config.json");
+
+        assertThat(configURL, CoreMatchers.notNullValue());
+
+        UnifiedConfigData properties = getPropertiesFrom(configURL);
+
+        assertThat(properties.getProperties().keySet(), hasSize(0));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a26f11b3/modules/json/src/test/java/org/apache/tamaya/modules/json/ConfigurationDataUCD.java
----------------------------------------------------------------------
diff --git a/modules/json/src/test/java/org/apache/tamaya/modules/json/ConfigurationDataUCD.java b/modules/json/src/test/java/org/apache/tamaya/modules/json/ConfigurationDataUCD.java
new file mode 100644
index 0000000..9de90e0
--- /dev/null
+++ b/modules/json/src/test/java/org/apache/tamaya/modules/json/ConfigurationDataUCD.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.modules.json;
+
+import org.apache.tamaya.format.ConfigurationData;
+import org.apache.tamaya.spi.PropertySource;
+
+import java.util.Map;
+
+public class ConfigurationDataUCD implements UnifiedConfigData {
+    private ConfigurationData data;
+
+    public ConfigurationDataUCD(ConfigurationData configurationData) {
+        data = configurationData;
+    }
+
+    @Override
+    public Map<String, String> getProperties() {
+        return data.getDefaultSection();
+    }
+
+    @Override
+    public int getOrdinal() {
+        String value = data.getDefaultSection().get(PropertySource.TAMAYA_ORDINAL);
+
+        return Integer.parseInt(value);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a26f11b3/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONFormatIT.java
----------------------------------------------------------------------
diff --git a/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONFormatIT.java b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONFormatIT.java
new file mode 100644
index 0000000..3c3fee1
--- /dev/null
+++ b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONFormatIT.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.modules.json;
+
+import org.apache.tamaya.format.ConfigurationFormat;
+import org.apache.tamaya.spi.ServiceContext;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.notNullValue;
+
+/**
+ * Integration tests for {@link JSONFormat}.
+ */
+public class JSONFormatIT {
+    @Test
+    public void jsonFormatCanBeFoundViaServiceLoader() throws Exception {
+        List<ConfigurationFormat> formats = ServiceContext.getInstance()
+                                                          .getServices(ConfigurationFormat.class);
+
+        ConfigurationFormat format = formats.stream()
+                                            .filter(s -> s instanceof JSONFormat)
+                                            .findFirst().get();
+
+        assertThat(format, notNullValue());
+        assertThat(format, instanceOf(JSONFormat.class));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a26f11b3/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONFormatTest.java
----------------------------------------------------------------------
diff --git a/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONFormatTest.java b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONFormatTest.java
index f5f2d96..b6473d8 100644
--- a/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONFormatTest.java
+++ b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONFormatTest.java
@@ -19,14 +19,16 @@
 package org.apache.tamaya.modules.json;
 
 
+import org.apache.tamaya.format.ConfigurationData;
 import org.junit.Test;
 
+import java.io.InputStream;
 import java.net.URL;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
 
-public class JSONFormatTest {
+public class JSONFormatTest extends CommonJSONTestCaseCollection {
     private JSONFormat format = new JSONFormat();
 
     @Test(expected = NullPointerException.class)
@@ -61,4 +63,13 @@ public class JSONFormatTest {
 
         assertThat(format.accepts(url), is(false));
     }
+
+    @Override
+    UnifiedConfigData getPropertiesFrom(URL source) throws Exception {
+        try (InputStream is = source.openStream()) {
+            ConfigurationData data = format.readConfiguration(source.toString(), is);
+
+            return new ConfigurationDataUCD(data);
+        }
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a26f11b3/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java
----------------------------------------------------------------------
diff --git a/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java
index e391f92..92bb123 100644
--- a/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java
+++ b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceTest.java
@@ -18,118 +18,16 @@
  */
 package org.apache.tamaya.modules.json;
 
-import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.spi.PropertySource;
 import org.hamcrest.CoreMatchers;
-import org.hamcrest.Matchers;
 import org.junit.Test;
 
-import java.io.File;
-import java.net.URISyntaxException;
 import java.net.URL;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.hasSize;
 
-public class JSONPropertySourceTest {
-
-    @Test(expected = ConfigException.class)
-    public void emptyJSONFileResultsInConfigException() throws Exception {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/invalid/empty-file.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        JSONPropertySource source = new JSONPropertySource(configURL.toString(), 10);
-
-        source.getProperties();
-    }
-
-    @Test
-    public void canHandleEmptyJSONObject() throws Exception {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/valid/empty-object-config.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        JSONPropertySource source = new JSONPropertySource(configURL.toString(), 10);
-
-        assertThat(source.getProperties().keySet(), hasSize(0));
-    }
-
-    @Test
-    public void canReadFlatStringOnlyJSONConfigFile() throws Exception {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/valid/simple-flat-string-only-config.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        JSONPropertySource source = new JSONPropertySource(configURL.toString(), 10);
-
-        assertThat(source.getProperties().keySet(), hasSize(3));
-
-        String keyA = source.get("a");
-        String keyB = source.get("b");
-        String keyC = source.get("c");
-
-        assertThat(keyA, notNullValue());
-        assertThat(keyA, equalTo("A"));
-        assertThat(keyB, notNullValue());
-        assertThat(keyB, is("B"));
-        assertThat(keyC, notNullValue());
-        assertThat(keyC, is("C"));
-    }
-
-    @Test
-    public void canReadNestedStringOnlyJSONConfigFile() throws Exception {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/valid/simple-nested-string-only-config-1.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        JSONPropertySource source = new JSONPropertySource(configURL.toString(), 10);
-
-        assertThat(source.getProperties().keySet(), hasSize(5));
-
-        String keyB = source.get("b");
-        String keyDO = source.get("d.o");
-        String keyDP = source.get("d.p");
-
-        assertThat(keyB, notNullValue());
-        assertThat(keyB, equalTo("B"));
-        assertThat(keyDO, notNullValue());
-        assertThat(keyDO, equalTo("O"));
-        assertThat(keyDP, Matchers.notNullValue());
-        assertThat(keyDP, is("P"));
-    }
-
-    @Test
-    public void canReadNestedStringOnlyJSONConfigFileWithObjectInTheMiddle()
-            throws Exception {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/valid/simple-nested-string-only-config-2.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        File configFile = new File(configURL.toURI());
-
-        JSONPropertySource source = new JSONPropertySource(configFile.toString(), 10);
-
-        assertThat(source.getProperties().keySet(), hasSize(4));
-
-        String keyA = source.get("a");
-        String keyDO = source.get("b.o");
-        String keyDP = source.get("b.p");
-        String keyC = source.get("c");
-
-        assertThat(keyA, notNullValue());
-        assertThat(keyA, is("A"));
-        assertThat(keyC, notNullValue());
-        assertThat(keyC, equalTo("C"));
-        assertThat(keyDO, notNullValue());
-        assertThat(keyDO, equalTo("O"));
-        assertThat(keyDP, notNullValue());
-        assertThat(keyDP, is("P"));
-    }
+public class JSONPropertySourceTest extends CommonJSONTestCaseCollection {
 
     @Test
     public void tamayaOrdinalKeywordIsNotPropagatedAsNormalProperty() throws Exception {
@@ -142,64 +40,10 @@ public class JSONPropertySourceTest {
         assertThat(source.get(PropertySource.TAMAYA_ORDINAL), nullValue());
     }
 
-    @Test
-    public void priorityInConfigFileOverwriteExplicitlyGivenPriority() throws URISyntaxException {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        JSONPropertySource source = new JSONPropertySource(configURL.toString(), 10);
-
-        assertThat(source.getOrdinal(), is(16784));
-    }
-
-    @Test
-    public void priorityInConfigFileIsReturnedPriority() throws URISyntaxException {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        File configFile = new File(configURL.toURI());
-
-        JSONPropertySource source = new JSONPropertySource(configFile.toString());
-
-        assertThat(source.getOrdinal(), is(16784));
-
-    }
-
-    @Test(expected = ConfigException.class)
-    public void canHandleIllegalJSONFileConsistingOfOneOpeningBracket() {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/invalid/only-opening-bracket.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        new JSONPropertySource(configURL).getProperties();
-    }
-
-    @Test(expected = ConfigException.class)
-    public void canHandleIllegalJSONFileWhichIsEmpty() {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/invalid/empty-file.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        new JSONPropertySource(configURL).getProperties();
-    }
-
-    @Test(expected = ConfigException.class)
-    public void canHandleIllegalJSONFileWhichConsistsOnlyOfAnArray() {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/invalid/array.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
-
-        new JSONPropertySource(configURL).getProperties();
-    }
-    @Test(expected = ConfigException.class)
-    public void canHandleIllegalJSONFileWhichContainsAnArray() {
-        URL configURL = JSONPropertySourceTest.class.getResource("/configs/invalid/with-array.json");
-
-        assertThat(configURL, CoreMatchers.notNullValue());
+    @Override
+    UnifiedConfigData getPropertiesFrom(URL source) throws Exception {
+        JSONPropertySource propertySource = new JSONPropertySource(source);
 
-        new JSONPropertySource(configURL).getProperties();
+        return new JSONPropertySourceUCD(propertySource);
     }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a26f11b3/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceUCD.java
----------------------------------------------------------------------
diff --git a/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceUCD.java b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceUCD.java
new file mode 100644
index 0000000..fef09a9
--- /dev/null
+++ b/modules/json/src/test/java/org/apache/tamaya/modules/json/JSONPropertySourceUCD.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.modules.json;
+
+import java.util.Map;
+
+public class JSONPropertySourceUCD implements UnifiedConfigData {
+    private JSONPropertySource propertySource;
+
+    public JSONPropertySourceUCD(JSONPropertySource source) {
+        propertySource = source;
+    }
+
+    @Override
+    public Map<String, String> getProperties() {
+        return propertySource.getProperties();
+    }
+
+    @Override
+    public int getOrdinal() {
+        return propertySource.getOrdinal();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/a26f11b3/modules/json/src/test/java/org/apache/tamaya/modules/json/UnifiedConfigData.java
----------------------------------------------------------------------
diff --git a/modules/json/src/test/java/org/apache/tamaya/modules/json/UnifiedConfigData.java b/modules/json/src/test/java/org/apache/tamaya/modules/json/UnifiedConfigData.java
new file mode 100644
index 0000000..fca37d5
--- /dev/null
+++ b/modules/json/src/test/java/org/apache/tamaya/modules/json/UnifiedConfigData.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tamaya.modules.json;
+
+import java.util.Map;
+
+public interface UnifiedConfigData {
+    Map<String, String> getProperties();
+
+    int getOrdinal();
+
+    default String get(String key) {
+        return getProperties().get(key);
+    }
+
+}