diff --git a/release-notes/VERSION b/release-notes/VERSION index 564b8a87e8..f3ec9fca93 100644 --- a/release-notes/VERSION +++ b/release-notes/VERSION @@ -53,6 +53,9 @@ JSON library. #1385: Create `jackson-core-[VERSION]-tests.jar` to contain shared test utility classes #1401: Rename `TreeNode.isContainerNode()` as `isContainer()` (3.0) +#1411: Add `JsonFactoryBuilder.configureForJackson2()`, + `JsonFactoryBuilder builderWithJackson2Defaults()` + (fixed by @pjfanning) - Rename `JsonGenerator.Feature.AUTO_CLOSE_JSON_CONTENT` as `AUTO_CLOSE_CONTENT` - Add `TreeCodec.nullNode()`, `TreeNode.isNull()` methods - Change the way `JsonLocation.NA` is included in exception messages diff --git a/src/main/java/tools/jackson/core/TSFBuilder.java b/src/main/java/tools/jackson/core/TSFBuilder.java index ed9465c152..dd385d6e5e 100644 --- a/src/main/java/tools/jackson/core/TSFBuilder.java +++ b/src/main/java/tools/jackson/core/TSFBuilder.java @@ -192,6 +192,19 @@ public B configure(StreamWriteFeature f, boolean state) { return state ? enable(f) : disable(f); } + /** + * The builder returned uses default settings more closely + * matching the default configs used in Jackson 2.x versions. + *
+ * This method is still a work in progress and may not yet fully replicate the + * default settings of Jackson 2.x. + *
+ */ + public B configureForJackson2() { + return disable(StreamReadFeature.USE_FAST_DOUBLE_PARSER) + .disable(StreamReadFeature.USE_FAST_BIG_NUMBER_PARSER); + } + // // // Other configuration, constraints /** diff --git a/src/main/java/tools/jackson/core/json/JsonFactory.java b/src/main/java/tools/jackson/core/json/JsonFactory.java index 430cad5cde..57470ad613 100644 --- a/src/main/java/tools/jackson/core/json/JsonFactory.java +++ b/src/main/java/tools/jackson/core/json/JsonFactory.java @@ -191,6 +191,21 @@ public static JsonFactoryBuilder builder() { return new JsonFactoryBuilder(); } + /** + * Factory method to use for constructing {@link JsonFactory} instances with + * different configuration. The builder returned uses default settings more closely + * matching the default configs used in Jackson 2.x versions. + *+ * This method is still a work in progress and may not yet fully replicate the + * default settings of Jackson 2.x. + *
+ * + * @return Builder instance to use + */ + public static JsonFactoryBuilder builderWithJackson2Defaults() { + return builder().configureForJackson2(); + } + /** * Method for constructing a new {@link JsonFactory} that has * the same settings as this instance, but is otherwise diff --git a/src/main/java/tools/jackson/core/json/JsonFactoryBuilder.java b/src/main/java/tools/jackson/core/json/JsonFactoryBuilder.java index 7ecdc45608..679fd9c48b 100644 --- a/src/main/java/tools/jackson/core/json/JsonFactoryBuilder.java +++ b/src/main/java/tools/jackson/core/json/JsonFactoryBuilder.java @@ -116,6 +116,13 @@ public JsonFactoryBuilder configure(JsonWriteFeature f, boolean state) { return state ? enable(f) : disable(f); } + @Override + public JsonFactoryBuilder configureForJackson2() { + return super.configureForJackson2() + .disable(JsonWriteFeature.ESCAPE_FORWARD_SLASHES) + .disable(JsonWriteFeature.COMBINE_UNICODE_SURROGATES_IN_UTF8); + } + // // // Other JSON-specific configuration /** diff --git a/src/test/java/tools/jackson/core/unittest/json/JsonFactoryTest.java b/src/test/java/tools/jackson/core/unittest/json/JsonFactoryTest.java index 6e41e229ea..d13568127e 100644 --- a/src/test/java/tools/jackson/core/unittest/json/JsonFactoryTest.java +++ b/src/test/java/tools/jackson/core/unittest/json/JsonFactoryTest.java @@ -345,6 +345,15 @@ public void testCanonicalizationDisabled() throws Exception { doCanonicalizationTest(false); } + @Test + public void testBuilderWithJackson2Defaults() { + JsonFactory factory = JsonFactory.builderWithJackson2Defaults().build(); + assertFalse(factory.isEnabled(StreamReadFeature.USE_FAST_DOUBLE_PARSER)); + assertFalse(factory.isEnabled(StreamReadFeature.USE_FAST_BIG_NUMBER_PARSER)); + assertFalse(factory.isEnabled(JsonWriteFeature.ESCAPE_FORWARD_SLASHES)); + assertFalse(factory.isEnabled(JsonWriteFeature.COMBINE_UNICODE_SURROGATES_IN_UTF8)); + } + // Configure the JsonFactory as expected, and verify across common shapes of input // to cover common JsonParser implementations. private void doCanonicalizationTest(boolean canonicalize) throws Exception {