This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/johnzon.git
The following commit(s) were added to refs/heads/master by this push: new a20a8e57 [JOHNZON-368] ensure JsonGeneratorFactory respects the configured encoding a20a8e57 is described below commit a20a8e570d4623147d86a05610310c99ed1d355b Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Wed Apr 27 09:05:04 2022 +0200 [JOHNZON-368] ensure JsonGeneratorFactory respects the configured encoding --- .../apache/johnzon/core/AbstractJsonFactory.java | 2 +- .../johnzon/core/JsonGeneratorFactoryImpl.java | 30 +++++++++++++--------- .../org/apache/johnzon/core/JsonGeneratorImpl.java | 8 ------ .../apache/johnzon/core/JsonParserFactoryImpl.java | 1 - .../apache/johnzon/core/JsonWriterFactoryImpl.java | 4 +-- .../org/apache/johnzon/mapper/MapperBuilder.java | 6 ++--- 6 files changed, 24 insertions(+), 27 deletions(-) diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/AbstractJsonFactory.java b/johnzon-core/src/main/java/org/apache/johnzon/core/AbstractJsonFactory.java index c8517173..9b448a6f 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/AbstractJsonFactory.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/AbstractJsonFactory.java @@ -26,7 +26,7 @@ import java.util.Map; import java.util.logging.Logger; public abstract class AbstractJsonFactory implements Serializable { - + public static final String ENCODING = "org.apache.johnzon.encoding"; public static final String BUFFER_STRATEGY = "org.apache.johnzon.buffer-strategy"; public static final BufferStrategy DEFAULT_BUFFER_STRATEGY = BufferStrategyFactory.valueOf(System.getProperty(BUFFER_STRATEGY, "QUEUE")); diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorFactoryImpl.java index 8d1f6ec2..c4748697 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorFactoryImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorFactoryImpl.java @@ -18,9 +18,12 @@ */ package org.apache.johnzon.core; +import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Arrays.asList; +import static java.util.Optional.ofNullable; import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.Charset; import java.util.Collection; @@ -35,24 +38,27 @@ public class JsonGeneratorFactoryImpl extends AbstractJsonFactory implements Jso public static final int DEFAULT_GENERATOR_BUFFER_LENGTH = Integer.getInteger(GENERATOR_BUFFER_LENGTH, 64 * 1024); //64k static final Collection<String> SUPPORTED_CONFIG_KEYS = asList( - JsonGenerator.PRETTY_PRINTING, GENERATOR_BUFFER_LENGTH, BUFFER_STRATEGY + JsonGenerator.PRETTY_PRINTING, GENERATOR_BUFFER_LENGTH, BUFFER_STRATEGY, ENCODING ); + + private final Charset defaultEncoding; + //key caching currently disabled private final boolean pretty; private final BufferStrategy.BufferProvider<char[]> bufferProvider; public JsonGeneratorFactoryImpl(final Map<String, ?> config) { - - super(config, SUPPORTED_CONFIG_KEYS, null); - - this.pretty = getBool(JsonGenerator.PRETTY_PRINTING, false); - - final int bufferSize = getInt(GENERATOR_BUFFER_LENGTH, DEFAULT_GENERATOR_BUFFER_LENGTH); - if (bufferSize <= 0) { - throw new IllegalArgumentException("buffer length must be greater than zero"); - } + super(config, SUPPORTED_CONFIG_KEYS, null); + this.pretty = getBool(JsonGenerator.PRETTY_PRINTING, false); + this.defaultEncoding = ofNullable(getString(ENCODING, null)) + .map(Charset::forName) + .orElse(UTF_8); - this.bufferProvider = getBufferProvider().newCharProvider(bufferSize); + final int bufferSize = getInt(GENERATOR_BUFFER_LENGTH, DEFAULT_GENERATOR_BUFFER_LENGTH); + if (bufferSize <= 0) { + throw new IllegalArgumentException("buffer length must be greater than zero"); + } + this.bufferProvider = getBufferProvider().newCharProvider(bufferSize); } @Override @@ -62,7 +68,7 @@ public class JsonGeneratorFactoryImpl extends AbstractJsonFactory implements Jso @Override public JsonGenerator createGenerator(final OutputStream out) { - return new JsonGeneratorImpl(out, bufferProvider, pretty); + return new JsonGeneratorImpl(new OutputStreamWriter(out, defaultEncoding), bufferProvider, pretty); } @Override diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java index f15078b6..0913804f 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java @@ -34,13 +34,10 @@ import java.io.Writer; import java.math.BigDecimal; import java.math.BigInteger; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.util.Iterator; import java.util.Map; class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable { - private static final Charset UTF8_CHARSET = StandardCharsets.UTF_8; - private final transient Writer writer; private final BufferStrategy.BufferProvider<char[]> bufferProvider; private final char[] buffer; @@ -80,11 +77,6 @@ class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable { state.push(GeneratorState.INITIAL); } - JsonGeneratorImpl(final OutputStream out, final BufferStrategy.BufferProvider<char[]> bufferProvider, - final boolean prettyPrint) { - this(new OutputStreamWriter(out, UTF8_CHARSET), bufferProvider, prettyPrint); - } - JsonGeneratorImpl(final OutputStream out, final Charset encoding, final BufferStrategy.BufferProvider<char[]> bufferProvider, final boolean prettyPrint) { this(new OutputStreamWriter(out, encoding), bufferProvider, prettyPrint); diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java index b1ef5c6f..85174bce 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java @@ -41,7 +41,6 @@ public class JsonParserFactoryImpl extends AbstractJsonFactory implements JsonPa public static final int DEFAULT_BUFFER_LENGTH = Integer.getInteger(BUFFER_LENGTH, 64 * 1024); //64k public static final String SUPPORTS_COMMENTS = "org.apache.johnzon.supports-comments"; - public static final String ENCODING = "org.apache.johnzon.encoding"; public static final boolean DEFAULT_SUPPORTS_COMMENT = Boolean.getBoolean(SUPPORTS_COMMENTS); //default is false; static final Collection<String> SUPPORTED_CONFIG_KEYS = asList( diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterFactoryImpl.java index 84f3df25..8e8585af 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterFactoryImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterFactoryImpl.java @@ -18,6 +18,7 @@ */ package org.apache.johnzon.core; +import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Arrays.asList; import java.io.OutputStream; @@ -33,7 +34,6 @@ import javax.json.JsonWriterFactory; import javax.json.stream.JsonGeneratorFactory; class JsonWriterFactoryImpl extends AbstractJsonFactory implements JsonWriterFactory{ - private static final Charset UTF8_CHARSET = Charset.forName("UTF-8"); static final Collection<String> SUPPORTED_CONFIG_KEYS = asList( ); @@ -51,7 +51,7 @@ class JsonWriterFactoryImpl extends AbstractJsonFactory implements JsonWriterFac @Override public JsonWriter createWriter(final OutputStream out) { - return createWriter(new OutputStreamWriter(out, UTF8_CHARSET)); + return createWriter(new OutputStreamWriter(out, UTF_8)); } @Override diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java index 5075ed43..56b8fa25 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java @@ -127,6 +127,9 @@ public class MapperBuilder { if (bufferStrategy != null) { config.put("org.apache.johnzon.buffer-strategy", bufferStrategy); } + if (encoding != null) { + config.put("org.apache.johnzon.encoding", encoding.name()); + } if (generatorFactory == null) { if (pretty) { @@ -149,9 +152,6 @@ public class MapperBuilder { if (autoAdjustStringBuffers) { config.put("org.apache.johnzon.auto-adjust-buffer", true); } - if (encoding != null) { - config.put("org.apache.johnzon.encoding", encoding.name()); - } readerFactory = provider.createReaderFactory(config); } } else if (this.provider == null) {