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;