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 <[email protected]>
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) {