[johnzon] branch master updated: [JOHNZON-369] adding org.apache.johnzon.boundedoutputstreamwriter support
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 6571c776 [JOHNZON-369] adding org.apache.johnzon.boundedoutputstreamwriter support 6571c776 is described below commit 6571c7768b4897034a134b8664068b0f8bb2b02e Author: Romain Manni-Bucau AuthorDate: Wed Apr 27 09:48:53 2022 +0200 [JOHNZON-369] adding org.apache.johnzon.boundedoutputstreamwriter support --- .../johnzon/core/JsonGeneratorFactoryImpl.java | 20 - .../org/apache/johnzon/core/JsonGeneratorImpl.java | 9 -- .../johnzon/core/io/BoundedOutputStreamWriter.java | 98 ++ .../johnzon/core/JsonGeneratorFactoryImplTest.java | 70 .../core/io/BoundedOutputStreamWriterTest.java | 64 ++ src/site/markdown/index.md | 11 +++ 6 files changed, 260 insertions(+), 12 deletions(-) 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 c4748697..af1b905d 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,6 +18,8 @@ */ package org.apache.johnzon.core; +import org.apache.johnzon.core.io.BoundedOutputStreamWriter; + import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Arrays.asList; import static java.util.Optional.ofNullable; @@ -35,21 +37,24 @@ import javax.json.stream.JsonGeneratorFactory; public class JsonGeneratorFactoryImpl extends AbstractJsonFactory implements JsonGeneratorFactory { public static final String GENERATOR_BUFFER_LENGTH = "org.apache.johnzon.default-char-buffer-generator"; +public static final String BOUNDED_OUTPUT_STREAM_WRITER_LEN = "org.apache.johnzon.boundedoutputstreamwriter"; public static final int DEFAULT_GENERATOR_BUFFER_LENGTH = Integer.getInteger(GENERATOR_BUFFER_LENGTH, 64 * 1024); //64k static final Collection SUPPORTED_CONFIG_KEYS = asList( -JsonGenerator.PRETTY_PRINTING, GENERATOR_BUFFER_LENGTH, BUFFER_STRATEGY, ENCODING +JsonGenerator.PRETTY_PRINTING, GENERATOR_BUFFER_LENGTH, BUFFER_STRATEGY, ENCODING, BOUNDED_OUTPUT_STREAM_WRITER_LEN ); private final Charset defaultEncoding; //key caching currently disabled private final boolean pretty; +private final int boundedOutputStreamWriter; private final BufferStrategy.BufferProvider bufferProvider; public JsonGeneratorFactoryImpl(final Map config) { super(config, SUPPORTED_CONFIG_KEYS, null); this.pretty = getBool(JsonGenerator.PRETTY_PRINTING, false); +this.boundedOutputStreamWriter = getInt(BOUNDED_OUTPUT_STREAM_WRITER_LEN, -1); this.defaultEncoding = ofNullable(getString(ENCODING, null)) .map(Charset::forName) .orElse(UTF_8); @@ -68,12 +73,21 @@ public class JsonGeneratorFactoryImpl extends AbstractJsonFactory implements Jso @Override public JsonGenerator createGenerator(final OutputStream out) { -return new JsonGeneratorImpl(new OutputStreamWriter(out, defaultEncoding), bufferProvider, pretty); +return new JsonGeneratorImpl( +boundedOutputStreamWriter <= 0 ? +new OutputStreamWriter(out, defaultEncoding) : +new BoundedOutputStreamWriter(out, defaultEncoding, boundedOutputStreamWriter), +bufferProvider, pretty); } @Override public JsonGenerator createGenerator(final OutputStream out, final Charset charset) { -return new JsonGeneratorImpl(out,charset, bufferProvider, pretty); +final Charset cs = charset == null ? defaultEncoding : charset; +return new JsonGeneratorImpl( +boundedOutputStreamWriter <= 0 ? +new OutputStreamWriter(out, cs) : +new BoundedOutputStreamWriter(out, cs, boundedOutputStreamWriter), +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 0913804f..c011b1f6 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 @@ -27,13 +27,10 @@ import javax.json.JsonValue; import javax.json.stream.JsonGenerationException; import javax.json.stream.JsonGenerator; import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.io.Serializable; import java.io.Writer; import
[johnzon] branch master updated: [JOHNZON-368] ensure JsonGeneratorFactory respects the configured encoding
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 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 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 bufferProvider; public JsonGeneratorFactoryImpl(final Map 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 ---