From 7b47a1c4822f41edb4ac58c7a13d83bd0a730b36 Mon Sep 17 00:00:00 2001 From: Fabian Steeg Date: Fri, 3 Sep 2021 11:32:31 +0200 Subject: [PATCH 1/5] Add test case for recordPath with root JSON array (#382) --- .../org/metafacture/json/JsonDecoderTest.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/metafacture-json/src/test/java/org/metafacture/json/JsonDecoderTest.java b/metafacture-json/src/test/java/org/metafacture/json/JsonDecoderTest.java index 67cd3a3a8..f99f8876d 100644 --- a/metafacture-json/src/test/java/org/metafacture/json/JsonDecoderTest.java +++ b/metafacture-json/src/test/java/org/metafacture/json/JsonDecoderTest.java @@ -152,7 +152,7 @@ public void testShouldProcessConcatenatedRecords() { } @Test - public void testShouldProcessRecordsInArray() { + public void testShouldProcessRecordsInArrayField() { jsonDecoder.setRecordPath("$.data"); jsonDecoder.process( "{\"data\":[" + "{\"lit\": \"record 1\"}," + @@ -167,6 +167,22 @@ public void testShouldProcessRecordsInArray() { ordered.verify(receiver).endRecord(); } + @Test + public void testShouldProcessRecordsInArrayRoot() { + jsonDecoder.setRecordPath("$"); + jsonDecoder.process( + "[" + "{\"lit\": \"record 1\"}," + + "{\"lit\": \"record 2\"}" + "]"); + + final InOrder ordered = inOrder(receiver); + ordered.verify(receiver).startRecord("1"); + ordered.verify(receiver).literal("lit", "record 1"); + ordered.verify(receiver).endRecord(); + ordered.verify(receiver).startRecord("2"); + ordered.verify(receiver).literal("lit", "record 2"); + ordered.verify(receiver).endRecord(); + } + @Test public void testShouldProcessMultipleRecords() { jsonDecoder.process("{\"lit\": \"record 1\"}"); From b4e056bcd1dd45392cbca96f50a35d211586b2b1 Mon Sep 17 00:00:00 2001 From: Fabian Steeg Date: Fri, 3 Sep 2021 13:49:36 +0200 Subject: [PATCH 2/5] Avoid wrapping single record in list (#382) --- .../org/metafacture/json/JsonDecoder.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java b/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java index f6dbd2238..b60eafdfc 100644 --- a/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java +++ b/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java @@ -132,18 +132,24 @@ public void resetRecordCount() { @Override public void process(final String json) { assert !isClosed(); - final List records = recordPath.isEmpty() ? Arrays.asList(json) - : matches(JsonPath.read(json, recordPath)); - records.forEach(record -> { - createParser(record); - try { - decode(); - } catch (final IOException e) { - throw new MetafactureException(e); - } finally { - closeParser(); - } - }); + if (recordPath.isEmpty()) { + processRecord(json); + } else { + matches(JsonPath.read(json, recordPath)).forEach(record -> { + processRecord(record); + }); + } + } + + private void processRecord(String record) { + createParser(record); + try { + decode(); + } catch (final IOException e) { + throw new MetafactureException(e); + } finally { + closeParser(); + } } private List matches(Object obj) { From 7b978b67ccbe9acc00d02c8827cabb2a6c1616c0 Mon Sep 17 00:00:00 2001 From: Fabian Steeg Date: Fri, 3 Sep 2021 15:41:39 +0200 Subject: [PATCH 3/5] Avoid unnecessary List creation (#382) --- .../src/main/java/org/metafacture/json/JsonDecoder.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java b/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java index b60eafdfc..67323d9bf 100644 --- a/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java +++ b/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java @@ -34,6 +34,7 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Decodes a record in JSON format. @@ -152,7 +153,7 @@ private void processRecord(String record) { } } - private List matches(Object obj) { + private Stream matches(Object obj) { final List records = (obj instanceof List) ? ((List) obj) : Arrays.asList(obj); return records.stream().map(doc -> { try { @@ -161,7 +162,7 @@ private List matches(Object obj) { e.printStackTrace(); return doc.toString(); } - }).collect(Collectors.toList()); + }); } @Override From 88d941f81f36a4ab9ea083a3ca663b91d610b8e3 Mon Sep 17 00:00:00 2001 From: Fabian Steeg Date: Fri, 3 Sep 2021 15:45:44 +0200 Subject: [PATCH 4/5] Add test case for unsupported root array without recordPath (#382) --- .../test/java/org/metafacture/json/JsonDecoderTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/metafacture-json/src/test/java/org/metafacture/json/JsonDecoderTest.java b/metafacture-json/src/test/java/org/metafacture/json/JsonDecoderTest.java index f99f8876d..8d14bb466 100644 --- a/metafacture-json/src/test/java/org/metafacture/json/JsonDecoderTest.java +++ b/metafacture-json/src/test/java/org/metafacture/json/JsonDecoderTest.java @@ -183,6 +183,13 @@ public void testShouldProcessRecordsInArrayRoot() { ordered.verify(receiver).endRecord(); } + @Test(expected=MetafactureException.class) + public void testRootArrayNoRecordPath() { + jsonDecoder.process( + "[" + "{\"lit\": \"record 1\"}," + + "{\"lit\": \"record 2\"}" + "]"); + } + @Test public void testShouldProcessMultipleRecords() { jsonDecoder.process("{\"lit\": \"record 1\"}"); From 5ffe4b591132fb49732274ffffb5773a5022c8d8 Mon Sep 17 00:00:00 2001 From: Fabian Steeg Date: Fri, 3 Sep 2021 15:51:20 +0200 Subject: [PATCH 5/5] Remove unused import (#382) --- .../src/main/java/org/metafacture/json/JsonDecoder.java | 1 - 1 file changed, 1 deletion(-) diff --git a/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java b/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java index 67323d9bf..6cb795fee 100644 --- a/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java +++ b/metafacture-json/src/main/java/org/metafacture/json/JsonDecoder.java @@ -33,7 +33,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; /**