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/08/19 17:04:59 UTC
incubator-johnzon git commit: JOHNZON-54 JOHNZON-55 avoid NPE if no
json value is provided + fixing primitive/enum handling when root in
collections
Repository: incubator-johnzon
Updated Branches:
refs/heads/master 0c105624d -> 14234d20e
JOHNZON-54 JOHNZON-55 avoid NPE if no json value is provided + fixing primitive/enum handling when root in collections
Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/14234d20
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/14234d20
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/14234d20
Branch: refs/heads/master
Commit: 14234d20ec87efdce26752eb586e390eeeaa1c73
Parents: 0c10562
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Wed Aug 19 08:04:52 2015 -0700
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Wed Aug 19 08:04:52 2015 -0700
----------------------------------------------------------------------
.../java/org/apache/johnzon/mapper/Mapper.java | 27 ++++++-
.../org/apache/johnzon/mapper/MapperTest.java | 81 +++++++++++++++++++-
2 files changed, 105 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/14234d20/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 45899c4..8d94bf9 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
@@ -287,6 +287,18 @@ public class Mapper {
doWriteHandlingNullObject(object, generator);
}
+ public String writeArrayAsString(final Collection<?> instance) {
+ final StringWriter writer = new StringWriter();
+ writeArray(instance, writer);
+ return writer.toString();
+ }
+
+ public <T> String writeArrayAsString(final T[] instance) {
+ final StringWriter writer = new StringWriter();
+ writeArray(instance, writer);
+ return writer.toString();
+ }
+
public String writeObjectAsString(final Object instance) {
final StringWriter writer = new StringWriter();
writeObject(instance, writer);
@@ -322,6 +334,16 @@ public class Mapper {
return gen;
}
+ final JsonGenerator jsonGenerator = writePrimitives(generator, object);
+ if (jsonGenerator != null) {
+ return jsonGenerator;
+ }
+
+ final Class<?> objectClass = object.getClass();
+ if (objectClass.isEnum()) {
+ return gen.write(findConverter(objectClass).toString(object));
+ }
+
gen = gen.writeStartObject();
gen = doWriteObjectBody(gen, object);
return gen.writeEnd();
@@ -605,10 +627,13 @@ public class Mapper {
classMapping.constructor.newInstance() : classMapping.constructor.newInstance(createParameters(classMapping, object));
for (final Map.Entry<String, Mappings.Setter> setter : classMapping.setters.entrySet()) {
final JsonValue jsonValue = object.get(setter.getKey());
+ if (jsonValue == null) {
+ continue;
+ }
+
final Mappings.Setter value = setter.getValue();
final AccessMode.Writer setterMethod = value.writer;
final Object convertedValue = toValue(jsonValue, value.converter, value.itemConverter, value.paramType);
-
if (convertedValue != null) {
setterMethod.write(t, convertedValue);
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/14234d20/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 97e8362..f5817bb 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
@@ -28,6 +28,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import java.io.StringWriter;
+import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -84,13 +85,66 @@ public class MapperTest {
assertEquals(1, object.size());
final Collection<TheObject> object2 = new MapperBuilder().build()
.readJohnzonCollection(new ByteArrayInputStream("[{}]".getBytes()),
- new JohnzonCollectionType<List<TheObject>>() {
- });
+ new JohnzonCollectionType<List<TheObject>>() {
+ });
assertNotNull(object2);
assertEquals(1, object2.size());
}
@Test
+ public void testShouldMapACollection() throws Exception {
+ final Mapper mapper = new MapperBuilder().setAttributeOrder(new Comparator<String>() {
+ @Override
+ public int compare(final String o1, final String o2) {
+ return o1.compareTo(o2);
+ }
+ }).build();
+ final String json = "[" +
+ "{\"name\":\"addKey\"}," +
+ "{\"action\":\"REMOVE\",\"name\":\"removeKey\"}]";
+
+ final ParameterizedType type = new JohnzonParameterizedType(List.class, Command.class);
+ final List<Command> properties = new ArrayList(mapper.readCollection(new StringReader(json), type));
+
+ assertNotNull(properties);
+ assertEquals(2, properties.size());
+ assertEquals("addKey", properties.get(0).getName());
+ assertEquals("removeKey", properties.get(1).getName());
+ assertEquals(Command.Action.REMOVE, properties.get(1).getAction());
+ assertEquals(json, mapper.writeArrayAsString(properties));
+ }
+
+ @Test
+ public void enumCollection() throws Exception {
+ final Mapper mapper = new MapperBuilder().build();
+ final String json = "[\"REMOVE\",\"ADD\"]";
+
+ final ParameterizedType type = new JohnzonParameterizedType(List.class, Command.Action.class);
+ final List<Command.Action> properties = new ArrayList(mapper.readCollection(new StringReader(json), type));
+
+ assertNotNull(properties);
+ assertEquals(2, properties.size());
+ assertEquals(Command.Action.ADD, properties.get(1));
+ assertEquals(Command.Action.REMOVE, properties.get(0));
+ assertEquals(json, mapper.writeArrayAsString(properties));
+ }
+
+ @Test
+ public void primitiveCollection() throws Exception {
+ final Mapper mapper = new MapperBuilder().build();
+ final String json = "[1,2]";
+
+ final ParameterizedType type = new JohnzonParameterizedType(List.class, Integer.class);
+ final List<Integer> properties = new ArrayList(mapper.readCollection(new StringReader(json), type));
+
+ assertNotNull(properties);
+ assertEquals(2, properties.size());
+ assertEquals(2, properties.get(1).intValue());
+ assertEquals(1, properties.get(0).intValue());
+ assertEquals(json, mapper.writeArrayAsString(properties));
+ }
+
+ @Test
public void readMapObject() {
final Map<String, Object> data = new MapperBuilder().build()
.readObject(new ByteArrayInputStream(("{\"a\":1,\"b\":true,\"c\":null,\"d\":[1, 2], " +
@@ -936,6 +990,29 @@ public class MapperTest {
}
}
+ public static class Command {
+ public enum Action { ADD, REMOVE }
+
+ private Action action;
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(final String name) {
+ this.name = name;
+ }
+
+ public Action getAction() {
+ return action;
+ }
+
+ public void setAction(final Action action) {
+ this.action = action;
+ }
+ }
+
/*public static class ByteArray {
public byte[] byteArray;