You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2018/06/21 12:50:19 UTC
[sling-org-apache-sling-capabilities] 02/02: Check for duplicate
namespaces
This is an automated email from the ASF dual-hosted git repository.
bdelacretaz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-capabilities.git
commit a13696f129f8b625b4383c03384c5dc6e1faba89
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Thu Jun 21 14:49:50 2018 +0200
Check for duplicate namespaces
---
.../sling/capabilities/internal/JSONCapabilitiesWriter.java | 13 ++++++++++++-
.../capabilities/internal/JSONCapabilitiesWriterTest.java | 11 +++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java b/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java
index 3552941..8a60004 100644
--- a/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java
+++ b/src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java
@@ -22,7 +22,9 @@ import java.io.IOException;
import java.io.Writer;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import org.apache.felix.utils.json.JSONWriter;
import org.apache.sling.capabilities.CapabilitiesSource;
@@ -33,6 +35,8 @@ class JSONCapabilitiesWriter {
/** Write JSON to the supplied Writer, using the supplied sources */
void writeJson(Writer w, Collection<CapabilitiesSource> sources) throws IOException {
+ final Set<String> namespaces = new HashSet<>();
+
final JSONWriter jw = new JSONWriter(w);
jw.object();
jw.key(CAPS_KEY);
@@ -46,7 +50,14 @@ class JSONCapabilitiesWriter {
values = new HashMap<>();
values.put("_EXCEPTION_", e.getClass().getName() + ":" + e.getMessage());
}
- jw.key(s.getNamespace());
+
+ final String namespace = s.getNamespace();
+ if(namespaces.contains(namespace)) {
+ throw new DuplicateNamespaceException(namespace);
+ }
+ namespaces.add(namespace);
+
+ jw.key(namespace);
jw.object();
for(Map.Entry<String, Object> e : values.entrySet()) {
jw.key(e.getKey());
diff --git a/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java b/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java
index dd7227a..3fdb95a 100644
--- a/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java
+++ b/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java
@@ -73,4 +73,15 @@ public class JSONCapabilitiesWriterTest {
assertEquals("Expecting 1 key at EXCEPTION", 1, json.getJsonObject("EXCEPTION").keySet().size());
}
+
+ @Test(expected = DuplicateNamespaceException.class)
+ public void testDuplicateNamespace() throws IOException {
+ final List<CapabilitiesSource> sources = new ArrayList<>();
+ sources.add(new MockSource("duplicate", 1));
+ sources.add(new MockSource("another", 2));
+ sources.add(new MockSource("duplicate", 1));
+
+ final StringWriter w = new StringWriter();
+ new JSONCapabilitiesWriter().writeJson(w, sources);
+ }
}
\ No newline at end of file