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) {

Reply via email to