You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2015/04/04 00:08:13 UTC
incubator-johnzon git commit: JOHNZON-43 adding encoding as parameter
to builder + using utf8 by default in mapper + adding johnzon.mapper.encoding
system property for external config
Repository: incubator-johnzon
Updated Branches:
refs/heads/master 3eecf6b63 -> 14a12f6a6
JOHNZON-43 adding encoding as parameter to builder + using utf8 by default in mapper + adding johnzon.mapper.encoding system property for external config
Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/14a12f6a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/14a12f6a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/14a12f6a
Branch: refs/heads/master
Commit: 14a12f6a6484ce2b4f2ff1bed5512cc5a801c827
Parents: 3eecf6b
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sat Apr 4 00:08:05 2015 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Sat Apr 4 00:08:05 2015 +0200
----------------------------------------------------------------------
.../jaxrs/ConfigurableJohnzonProvider.java | 4 +++
.../java/org/apache/johnzon/mapper/Mapper.java | 12 +++++---
.../apache/johnzon/mapper/MapperBuilder.java | 16 +++++++----
.../org/apache/johnzon/mapper/MapperTest.java | 29 +++++++++++++++++++-
4 files changed, 50 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/14a12f6a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java
----------------------------------------------------------------------
diff --git a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java
index 8235853..3e08eb5 100644
--- a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java
+++ b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java
@@ -175,4 +175,8 @@ public class ConfigurableJohnzonProvider<T> implements MessageBodyWriter<T>, Mes
public void setTreatByteArrayAsBase64(final boolean treatByteArrayAsBase64) {
builder.setTreatByteArrayAsBase64(treatByteArrayAsBase64);
}
+
+ public void setEncoding(final String encoding) {
+ builder.setEncoding(encoding);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/14a12f6a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
index efe1868..199add5 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
@@ -33,6 +33,7 @@ import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
@@ -81,13 +82,15 @@ public class Mapper {
protected final boolean skipNull;
protected final boolean skipEmptyArray;
protected final boolean treatByteArrayAsBase64;
+ protected final Charset encoding;
// CHECKSTYLE:OFF
public Mapper(final JsonReaderFactory readerFactory, final JsonGeneratorFactory generatorFactory,
final boolean doClose, final Map<Class<?>, Converter<?>> converters,
final int version, final Comparator<String> attributeOrder, final boolean skipNull, final boolean skipEmptyArray,
final AccessMode accessMode, final boolean hiddenConstructorSupported, final boolean useConstructors,
- final boolean treatByteArrayAsBase64) {
+ final boolean treatByteArrayAsBase64,
+ final Charset encoding) {
// CHECKSTYLE:ON
this.readerFactory = readerFactory;
this.generatorFactory = generatorFactory;
@@ -98,6 +101,7 @@ public class Mapper {
this.skipNull = skipNull;
this.skipEmptyArray = skipEmptyArray;
this.treatByteArrayAsBase64 = treatByteArrayAsBase64;
+ this.encoding = encoding;
}
private static JsonGenerator writePrimitives(final JsonGenerator generator, final Object value) {
@@ -219,7 +223,7 @@ public class Mapper {
}
public <T> void writeArray(final Collection<T> object, final OutputStream stream) {
- writeArray(object, new OutputStreamWriter(stream));
+ writeArray(object, new OutputStreamWriter(stream, encoding));
}
public <T> void writeArray(final Collection<T> object, final Writer stream) {
@@ -254,7 +258,7 @@ public class Mapper {
}
public <T> void writeIterable(final Iterable<T> object, final OutputStream stream) {
- writeIterable(object, new OutputStreamWriter(stream));
+ writeIterable(object, new OutputStreamWriter(stream, encoding));
}
public <T> void writeIterable(final Iterable<T> object, final Writer stream) {
@@ -280,7 +284,7 @@ public class Mapper {
}
public void writeObject(final Object object, final OutputStream stream) {
- final JsonGenerator generator = generatorFactory.createGenerator(stream);
+ final JsonGenerator generator = generatorFactory.createGenerator(stream, encoding);
doWriteHandlingNullObject(object, generator);
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/14a12f6a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java
----------------------------------------------------------------------
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 5802ae8..9ad7838 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
@@ -20,6 +20,7 @@ package org.apache.johnzon.mapper;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.Charset;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
@@ -81,7 +82,6 @@ public class MapperBuilder {
private JsonGeneratorFactory generatorFactory;
private boolean doCloseOnStreams = false;
private boolean supportHiddenAccess = true;
- private boolean supportGetterForCollections = false;
private int version = -1;
private int maxSize = -1;
private int bufferSize = -1;
@@ -95,6 +95,7 @@ public class MapperBuilder {
private boolean treatByteArrayAsBase64;
private final Map<Class<?>, Converter<?>> converters = new HashMap<Class<?>, Converter<?>>(DEFAULT_CONVERTERS);
private boolean supportConstructors;
+ private Charset encoding = Charset.forName(System.getProperty("johnzon.mapper.encoding", "UTF-8"));
public Mapper build() {
if (readerFactory == null || generatorFactory == null) {
@@ -136,14 +137,12 @@ public class MapperBuilder {
accessMode,
supportHiddenAccess,
supportConstructors,
- treatByteArrayAsBase64);
+ treatByteArrayAsBase64,
+ encoding);
}
public MapperBuilder setSupportGetterForCollections(final boolean useGetterForCollections) {
- this.supportGetterForCollections = useGetterForCollections;
- if (supportGetterForCollections) {
- accessMode = new MethodAccessMode(supportGetterForCollections);
- }
+ accessMode = new MethodAccessMode(useGetterForCollections);
return this;
}
@@ -246,4 +245,9 @@ public class MapperBuilder {
this.supportConstructors = supportConstructors;
return this;
}
+
+ public MapperBuilder setEncoding(final String encoding) {
+ this.encoding = Charset.forName(encoding);
+ return this;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/14a12f6a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
index c39a9d5..97e8362 100644
--- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
+++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
@@ -41,6 +41,7 @@ import static java.util.Arrays.asList;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -502,6 +503,16 @@ public class MapperTest {
assertEquals(source.children, childOfFakedObject.children);
}
+ @Test
+ public void encodingTest() {
+ final ByteArrayOutputStream utf8 = new ByteArrayOutputStream();
+ final ByteArrayOutputStream latin = new ByteArrayOutputStream();
+
+ new MapperBuilder().setEncoding("UTF-8").build().writeObject(new StringHolder("摩"), utf8);
+ new MapperBuilder().setEncoding("Latin1").build().writeObject(new StringHolder("摩"), latin);
+ assertNotEquals(utf8, latin); // means encoding was considered, we don't need more here
+ }
+
public static class NanHolder {
private Double nan = Double.NaN;
@@ -908,7 +919,23 @@ public class MapperTest {
public static class ChildOfFakedObject extends FakeNestedObject {
protected List<String> children;
}
-
+
+ public static class StringHolder {
+ private String value;
+
+ public StringHolder(final String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(final String value) {
+ this.value = value;
+ }
+ }
+
/*public static class ByteArray {
public byte[] byteArray;