From 070b89c989669f70418ada99191fc6d6952068b4 Mon Sep 17 00:00:00 2001 From: Dai MIKURUBE Date: Wed, 25 Oct 2023 13:58:45 +0900 Subject: [PATCH 1/2] Bump the depended Jackson version to 2.15.3 --- .github/workflows/check.yml | 4 +- .github/workflows/main.yml | 4 +- .github/workflows/master.yml | 4 +- .github/workflows/publish.yml | 2 +- build.gradle | 6 +-- gradle.lockfile | 4 +- .../org/embulk/util/json/JsonValueParser.java | 5 ++- .../util/json/TestFlattenJsonArrayFilter.java | 3 +- .../embulk/util/json/TestJacksonFilter.java | 3 +- .../util/json/TestJacksonJsonPointer.java | 44 +++---------------- 10 files changed, 25 insertions(+), 54 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 848ebd3..909569b 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -9,9 +9,9 @@ jobs: strategy: fail-fast: false matrix: - jacksonVersion: [ "2.6.7", "2.7.9", "2.8.11", "2.9.10", "2.10.5", "2.11.4", "2.12.7", "2.13.5", "2.14.3", "2.15.2" ] + jacksonVersion: [ "2.15.3" ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up OpenJDK 8 uses: actions/setup-java@v3 with: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f9917c1..e55c971 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,7 +10,7 @@ jobs: hash-master: ${{ steps.hash-master.outputs.hash-master }} hash-main: ${{ steps.hash-main.outputs.hash-main }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - id: hash-master @@ -30,7 +30,7 @@ jobs: if: needs.diff.outputs.hash-master != needs.diff.outputs.hash-main runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Checkout master diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 0769cc7..665ab63 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -10,7 +10,7 @@ jobs: hash-master: ${{ steps.hash-master.outputs.hash-master }} hash-main: ${{ steps.hash-main.outputs.hash-main }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - id: hash-master @@ -30,7 +30,7 @@ jobs: if: needs.diff.outputs.hash-master != needs.diff.outputs.hash-main runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Checkout main diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7c39399..30a6966 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: true steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up OpenJDK 8 uses: actions/setup-java@v3 with: diff --git a/build.gradle b/build.gradle index c0d7378..a41c093 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { ext { if (!project.hasProperty("jacksonVersionForJacksonTest")) { - jacksonVersionForJacksonTest = "2.6.7" + jacksonVersionForJacksonTest = "2.15.3" } } @@ -44,7 +44,7 @@ dependencies { compileOnly "org.msgpack:msgpack-core:0.8.24" // Dependencies should be "api" so that their scope would be "compile" in "pom.xml". - api platform("com.fasterxml.jackson:jackson-bom:2.6.7") + api platform("com.fasterxml.jackson:jackson-bom:2.15.3") api "com.fasterxml.jackson.core:jackson-core" testImplementation "org.embulk:embulk-spi:0.11" @@ -68,7 +68,7 @@ javadoc { overview = "src/main/html/overview.html" links "https://docs.oracle.com/javase/8/docs/api/" links "https://dev.embulk.org/embulk-spi/0.11/javadoc/" - links "https://www.javadoc.io/doc/com.fasterxml.jackson.core/jackson-core/2.6.7/" + links "https://www.javadoc.io/doc/com.fasterxml.jackson.core/jackson-core/2.15.3/" links "https://javadoc.io/doc/org.msgpack/msgpack-core/0.8.24/" } } diff --git a/gradle.lockfile b/gradle.lockfile index 76ca2da..f4e2c1b 100644 --- a/gradle.lockfile +++ b/gradle.lockfile @@ -1,8 +1,8 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.fasterxml.jackson.core:jackson-core:2.6.7=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.6.7=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.3=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.3=compileClasspath,runtimeClasspath org.embulk:embulk-spi:0.11=compileClasspath org.msgpack:msgpack-core:0.8.24=compileClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath diff --git a/src/main/java/org/embulk/util/json/JsonValueParser.java b/src/main/java/org/embulk/util/json/JsonValueParser.java index 06a502f..5408b4d 100644 --- a/src/main/java/org/embulk/util/json/JsonValueParser.java +++ b/src/main/java/org/embulk/util/json/JsonValueParser.java @@ -20,6 +20,7 @@ import com.fasterxml.jackson.core.JsonPointer; import com.fasterxml.jackson.core.filter.FilteringParserDelegate; import com.fasterxml.jackson.core.filter.JsonPointerBasedFilter; +import com.fasterxml.jackson.core.filter.TokenFilter; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; @@ -177,7 +178,7 @@ private com.fasterxml.jackson.core.JsonParser extendJacksonParser(final com.fast parser = new FilteringParserDelegate( parser, new JsonPointerBasedFilter(this.root), - false, // TODO: Use com.fasterxml.jackson.core.filter.TokenFilter.Inclusion since Jackson 2.12. + TokenFilter.Inclusion.ONLY_INCLUDE_ALL, true // Allow multiple matches ); } @@ -185,7 +186,7 @@ private com.fasterxml.jackson.core.JsonParser extendJacksonParser(final com.fast parser = new FilteringParserDelegate( parser, new FlattenJsonArrayFilter(this.depthToFlattenJsonArrays), - false, // TODO: Use com.fasterxml.jackson.core.filter.TokenFilter.Inclusion since Jackson 2.12. + TokenFilter.Inclusion.ONLY_INCLUDE_ALL, true // Allow multiple matches ); } diff --git a/src/test/java/org/embulk/util/json/TestFlattenJsonArrayFilter.java b/src/test/java/org/embulk/util/json/TestFlattenJsonArrayFilter.java index fa62065..352a328 100644 --- a/src/test/java/org/embulk/util/json/TestFlattenJsonArrayFilter.java +++ b/src/test/java/org/embulk/util/json/TestFlattenJsonArrayFilter.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.core.filter.FilteringParserDelegate; +import com.fasterxml.jackson.core.filter.TokenFilter; import java.io.IOException; import org.junit.jupiter.api.Test; @@ -105,7 +106,7 @@ private static com.fasterxml.jackson.core.JsonParser createFilteredParser( return new FilteringParserDelegate( factory.createParser(json), new FlattenJsonArrayFilter(depth), - false, // TODO: Use com.fasterxml.jackson.core.filter.TokenFilter.Inclusion since Jackson 2.12. + TokenFilter.Inclusion.ONLY_INCLUDE_ALL, true // Allow multiple matches ); } diff --git a/src/test/java/org/embulk/util/json/TestJacksonFilter.java b/src/test/java/org/embulk/util/json/TestJacksonFilter.java index 63d8d6c..b953f30 100644 --- a/src/test/java/org/embulk/util/json/TestJacksonFilter.java +++ b/src/test/java/org/embulk/util/json/TestJacksonFilter.java @@ -24,6 +24,7 @@ import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.core.filter.FilteringParserDelegate; import com.fasterxml.jackson.core.filter.JsonPointerBasedFilter; +import com.fasterxml.jackson.core.filter.TokenFilter; import com.fasterxml.jackson.core.json.PackageVersion; import java.io.IOException; import org.junit.jupiter.api.BeforeAll; @@ -65,7 +66,7 @@ private static com.fasterxml.jackson.core.JsonParser createFilteredParser( return new FilteringParserDelegate( factory.createParser(json), new JsonPointerBasedFilter(jsonPointer), - false, // TODO: Use com.fasterxml.jackson.core.filter.TokenFilter.Inclusion since Jackson 2.12. + TokenFilter.Inclusion.ONLY_INCLUDE_ALL, true // Allow multiple matches ); } diff --git a/src/test/java/org/embulk/util/json/TestJacksonJsonPointer.java b/src/test/java/org/embulk/util/json/TestJacksonJsonPointer.java index fef94d9..4403e8b 100644 --- a/src/test/java/org/embulk/util/json/TestJacksonJsonPointer.java +++ b/src/test/java/org/embulk/util/json/TestJacksonJsonPointer.java @@ -32,11 +32,7 @@ public class TestJacksonJsonPointer { public void testEmpty() throws IOException { final JsonPointer empty = JsonPointer.compile(""); assertEquals("", empty.toString()); - if (isBefore2_14_0()) { - assertEquals("", empty.getMatchingProperty()); - } else { - assertEquals(null, empty.getMatchingProperty()); - } + assertEquals(null, empty.getMatchingProperty()); assertTrue(empty.getMatchingIndex() < 0); assertEquals(JsonPointer.compile(""), empty); assertNotEquals(JsonPointer.compile("/"), empty); @@ -57,11 +53,7 @@ public void testRoot() throws IOException { final JsonPointer tail = root.tail(); assertEquals("", tail.toString()); - if (isBefore2_14_0()) { - assertEquals("", tail.getMatchingProperty()); - } else { - assertEquals(null, tail.getMatchingProperty()); - } + assertEquals(null, tail.getMatchingProperty()); assertTrue(tail.getMatchingIndex() < 0); assertEquals(JsonPointer.compile(""), tail); assertNotEquals(JsonPointer.compile("/"), tail); @@ -91,11 +83,7 @@ public void testRootDuplicated() throws IOException { final JsonPointer tail2 = tail1.tail(); assertEquals("", tail2.toString()); - if (isBefore2_14_0()) { - assertEquals("", tail2.getMatchingProperty()); - } else { - assertEquals(null, tail2.getMatchingProperty()); - } + assertEquals(null, tail2.getMatchingProperty()); assertTrue(tail2.getMatchingIndex() < 0); assertEquals(JsonPointer.compile(""), tail2); assertNotEquals(JsonPointer.compile("/"), tail2); @@ -116,11 +104,7 @@ public void testSingleProperty() throws IOException { final JsonPointer tail = root.tail(); assertEquals("", tail.toString()); - if (isBefore2_14_0()) { - assertEquals("", tail.getMatchingProperty()); - } else { - assertEquals(null, tail.getMatchingProperty()); - } + assertEquals(null, tail.getMatchingProperty()); assertTrue(tail.getMatchingIndex() < 0); assertEquals(JsonPointer.compile(""), tail); assertNotEquals(JsonPointer.compile("/"), tail); @@ -141,11 +125,7 @@ public void testSingleIndex() throws IOException { final JsonPointer tail = root.tail(); assertEquals("", tail.toString()); - if (isBefore2_14_0()) { - assertEquals("", tail.getMatchingProperty()); - } else { - assertEquals(null, tail.getMatchingProperty()); - } + assertEquals(null, tail.getMatchingProperty()); assertTrue(tail.getMatchingIndex() < 0); assertEquals(JsonPointer.compile(""), tail); assertNotEquals(JsonPointer.compile("/"), tail); @@ -185,11 +165,7 @@ public void testMultipleProperties() throws IOException { final JsonPointer tail3 = tail2.tail(); assertEquals("", tail3.toString()); - if (isBefore2_14_0()) { - assertEquals("", tail3.getMatchingProperty()); - } else { - assertEquals(null, tail3.getMatchingProperty()); - } + assertEquals(null, tail3.getMatchingProperty()); assertTrue(tail3.getMatchingIndex() < 0); assertEquals(JsonPointer.compile(""), tail3); assertNotEquals(JsonPointer.compile("/"), tail3); @@ -203,12 +179,4 @@ public void testMultipleProperties() throws IOException { static void printJacksonVersion() { System.out.println("Tested with Jackson: " + PackageVersion.VERSION.toString()); } - - // The behavior of JsonPointer.compile("").tail() is different from Jackson 2.14.0. - // - // https://github.com/FasterXML/jackson-core/issues/788 - // https://github.com/FasterXML/jackson-core/commit/b0f6eb9bb2d2d829efb19020e7df4d732066f8cd - private static boolean isBefore2_14_0() { - return PackageVersion.VERSION.getMajorVersion() <= 2 && PackageVersion.VERSION.getMinorVersion() <= 13; - } } From ecf37c3ab5517ed717c2c3e21f8362f56611ed70 Mon Sep 17 00:00:00 2001 From: Dai MIKURUBE Date: Wed, 25 Oct 2023 14:21:23 +0900 Subject: [PATCH 2/2] Assert when used with an unsupported Jackson version --- .../java/org/embulk/util/json/JsonValueParser.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/org/embulk/util/json/JsonValueParser.java b/src/main/java/org/embulk/util/json/JsonValueParser.java index 5408b4d..bdc1bcd 100644 --- a/src/main/java/org/embulk/util/json/JsonValueParser.java +++ b/src/main/java/org/embulk/util/json/JsonValueParser.java @@ -21,6 +21,7 @@ import com.fasterxml.jackson.core.filter.FilteringParserDelegate; import com.fasterxml.jackson.core.filter.JsonPointerBasedFilter; import com.fasterxml.jackson.core.filter.TokenFilter; +import com.fasterxml.jackson.core.json.PackageVersion; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; @@ -232,6 +233,7 @@ public static Builder builder() { * @return the new builder */ public static Builder builder(final JsonFactory jsonFactory) { + assertJacksonVersion(); return new Builder(jsonFactory); } @@ -267,6 +269,17 @@ public final void close() throws IOException { this.jacksonParser.close(); } + private static void assertJacksonVersion() { + if (PackageVersion.VERSION.getMajorVersion() != 2) { + throw new UnsupportedOperationException("embulk-util-json is not used with Jackson 2."); + } + + final int minor = PackageVersion.VERSION.getMinorVersion(); + if (minor < 14 || (minor == 15 && PackageVersion.VERSION.getPatchLevel() <= 2)) { + throw new UnsupportedOperationException("embulk-util-json is not used with Jackson 2.15.3 or later."); + } + } + private final com.fasterxml.jackson.core.JsonParser jacksonParser; private final InternalJsonValueReader valueReader;