[johnzon] branch master updated: [JOHNZON-369] adding org.apache.johnzon.boundedoutputstreamwriter support

2022-04-27 Thread rmannibucau
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

2022-04-27 Thread rmannibucau
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
---