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 2016/06/03 09:49:43 UTC
incubator-johnzon git commit: JOHNZON-81 better support of Object as
mapping type - write side
Repository: incubator-johnzon
Updated Branches:
refs/heads/master 95f0c4662 -> 0020886be
JOHNZON-81 better support of Object as mapping type - write side
Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/0020886b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/0020886b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/0020886b
Branch: refs/heads/master
Commit: 0020886be089320b7802090d4dd03c9b39c4c5de
Parents: 95f0c46
Author: Romain manni-Bucau <rm...@gmail.com>
Authored: Fri Jun 3 11:49:01 2016 +0200
Committer: Romain manni-Bucau <rm...@gmail.com>
Committed: Fri Jun 3 11:49:01 2016 +0200
----------------------------------------------------------------------
.../apache/johnzon/jsonb/JsonbAccessMode.java | 10 +++++
.../java/org/apache/johnzon/mapper/Mapper.java | 7 +++-
.../org/apache/johnzon/mapper/Mappings.java | 10 +++--
.../johnzon/mapper/access/AccessMode.java | 2 +
.../johnzon/mapper/access/BaseAccessMode.java | 11 ++++++
.../org/apache/johnzon/mapper/MapperTest.java | 41 ++++++++++++++------
6 files changed, 65 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/0020886b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java
index fa2e536..f660a5e 100644
--- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java
+++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java
@@ -560,6 +560,16 @@ public class JsonbAccessMode implements AccessMode, Closeable {
return result;
}
+ @Override
+ public Reader findReader(final Class<?> clazz) {
+ throw new UnsupportedOperationException("TODO");
+ }
+
+ @Override
+ public Writer findWriter(final Class<?> clazz) {
+ throw new UnsupportedOperationException("TODO");
+ }
+
private boolean isOptional(final DecoratedType value) {
return ParameterizedType.class.isInstance(value.getType()) && Optional.class == ParameterizedType.class.cast(value.getType()).getRawType();
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/0020886b/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 5935c36..3826c4a 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
@@ -102,9 +102,12 @@ public class Mapper implements Closeable {
}
public void writeObject(final Object object, final Writer stream) {
- if (JsonValue.class.isInstance(object) || String.class.isInstance(object) || Number.class.isInstance(object) || object == null) {
+ if (JsonValue.class.isInstance(object)
+ || Boolean.class.isInstance(object) || String.class.isInstance(object) || Number.class.isInstance(object)
+ || object == null) {
try {
- stream.write(String.valueOf(object));
+ final String valueOf = String.valueOf(object);
+ stream.write(String.class.isInstance(object) ? '"' + valueOf + '"' : valueOf);
} catch (final IOException e) {
throw new MapperException(e);
} finally {
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/0020886b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java
index db0ce1c..dcdb5bf 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java
@@ -57,14 +57,18 @@ public class Mappings {
final AccessMode.Factory factory;
final Map<String, Getter> getters;
final Map<String, Setter> setters;
-
+ final ObjectConverter.Reader<?> reader;
+ final ObjectConverter.Writer<?> writer;
protected ClassMapping(final Class<?> clazz, final AccessMode.Factory factory,
- final Map<String, Getter> getters, final Map<String, Setter> setters) {
+ final Map<String, Getter> getters, final Map<String, Setter> setters,
+ final ObjectConverter.Reader<?> reader, final ObjectConverter.Writer<?> writer) {
this.clazz = clazz;
this.factory = factory;
this.getters = getters;
this.setters = setters;
+ this.writer = writer;
+ this.reader = reader;
}
}
@@ -365,7 +369,7 @@ public class Mappings {
}
addSetterIfNeeded(setters, key, writer.getValue(), copyDate);
}
- return new ClassMapping(clazz, accessMode.findFactory(clazz), getters, setters);
+ return new ClassMapping(clazz, accessMode.findFactory(clazz), getters, setters, accessMode.findReader(clazz), accessMode.findWriter(clazz));
}
protected Class<?> findModelClass(final Class<?> inClazz) {
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/0020886b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/AccessMode.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/AccessMode.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/AccessMode.java
index f47e0d0..e34facf 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/AccessMode.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/AccessMode.java
@@ -57,4 +57,6 @@ public interface AccessMode {
Comparator<String> fieldComparator(Class<?> clazz);
Map<String, Reader> findReaders(Class<?> clazz);
Map<String, Writer> findWriters(Class<?> clazz);
+ ObjectConverter.Reader<?> findReader(Class<?> clazz);
+ ObjectConverter.Writer<?> findWriter(Class<?> clazz);
}
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/0020886b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/BaseAccessMode.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/BaseAccessMode.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/BaseAccessMode.java
index cca3a8c..2eb7b11 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/BaseAccessMode.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/BaseAccessMode.java
@@ -22,6 +22,7 @@ import org.apache.johnzon.mapper.Adapter;
import org.apache.johnzon.mapper.Converter;
import org.apache.johnzon.mapper.JohnzonConverter;
import org.apache.johnzon.mapper.MapperConverter;
+import org.apache.johnzon.mapper.ObjectConverter;
import org.apache.johnzon.mapper.internal.ConverterAdapter;
import org.apache.johnzon.mapper.reflection.JohnzonParameterizedType;
@@ -82,6 +83,16 @@ public abstract class BaseAccessMode implements AccessMode {
}
@Override
+ public ObjectConverter.Reader<?> findReader(final Class<?> clazz) {
+ return null; // TODO: converter?
+ }
+
+ @Override
+ public ObjectConverter.Writer<?> findWriter(final Class<?> clazz) {
+ return null; // TODO: converter?
+ }
+
+ @Override
public Factory findFactory(final Class<?> clazz) {
Constructor<?> constructor = null;
for (final Constructor<?> c : clazz.getDeclaredConstructors()) {
http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/0020886b/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 8da2388..db2a212 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
@@ -38,6 +38,7 @@ import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertArrayEquals;
@@ -159,31 +160,49 @@ public class MapperTest {
}
@Test
- public void readMapWithJustObject() {
+ public void justObjectAsModel() {
+ final Mapper encodingAwareMapper = new MapperBuilder().setEncoding("UTF-8" /*otherwise guess algo fails for too small string*/).build();
+ final Mapper simpleMapper = new MapperBuilder().build();
{ // object
- final Object raw = new MapperBuilder().build()
- .readObject(new ByteArrayInputStream(("{\"a\":1,\"b\":true,\"c\":null,\"d\":[1, 2], " +
- "\"e\":[\"i\", \"j\"],\"k\":{\"a\":1,\"b\":true,\"c\":null,\"d\":[1, 2], \"e\":[\"i\", \"j\"]}}").getBytes()),
- Object.class);
+ final String object = "{\"a\":1,\"b\":true,\"c\":null,\"d\":[1,2]," +
+ "\"e\":[\"i\",\"j\"],\"k\":{\"a\":1,\"b\":true,\"c\":null,\"d\":[1,2],\"e\":[\"i\",\"j\"]}}";
+ final Mapper mapper = simpleMapper;
+ final Object raw = mapper.readObject(new ByteArrayInputStream(object.getBytes()), Object.class);
final Map<String, Object> data = Map.class.cast(raw);
assertOneDimension(data, 6);
final Map<String, Object> k = (Map<String, Object>) data.get("k");
assertNotNull(k);
assertOneDimension(k, 5);
+
+ final Map<String, Object> sorted = new TreeMap<String, Object>(data);
+ assertEquals(object.replace(",\"c\":null", ""), mapper.writeObjectAsString(sorted));
}
{ // primitives
- assertEquals(Boolean.TRUE, new MapperBuilder().build().readObject(new ByteArrayInputStream("true".getBytes()), Object.class));
- assertEquals(Boolean.FALSE, new MapperBuilder().build().readObject(new ByteArrayInputStream("false".getBytes()), Object.class));
- assertEquals(1., new MapperBuilder().setEncoding("UTF-8" /*otherwise guess algo fails, too small string*/).build()
+ // read
+ assertEquals(Boolean.TRUE, simpleMapper.readObject(new ByteArrayInputStream("true".getBytes()), Object.class));
+ assertEquals(Boolean.FALSE, simpleMapper.readObject(new ByteArrayInputStream("false".getBytes()), Object.class));
+ assertEquals(1., encodingAwareMapper
.readObject(new ByteArrayInputStream("1".getBytes()), Object.class));
- assertEquals("val", new MapperBuilder().build().readObject(new ByteArrayInputStream("\"val\"".getBytes()), Object.class));
- assertEquals(asList("val1", "val2"), new MapperBuilder().build().readObject(new ByteArrayInputStream("[\"val1\", \"val2\"]".getBytes()), Object.class));
+ assertEquals("val", simpleMapper.readObject(new ByteArrayInputStream("\"val\"".getBytes()), Object.class));
+ assertEquals(asList("val1", "val2"), simpleMapper.readObject(new ByteArrayInputStream("[\"val1\", \"val2\"]".getBytes()), Object.class));
assertEquals(new HashMap<String, Object>() {{
put("a", "val");
put("b", true);
put("c", 1);
- }}, new MapperBuilder().build().readObject(new ByteArrayInputStream("{\"a\":\"val\", \"b\": true, \"c\": 1}".getBytes()), Object.class));
+ }}, simpleMapper.readObject(new ByteArrayInputStream("{\"a\":\"val\", \"b\": true, \"c\": 1}".getBytes()), Object.class));
+
+ // write
+ assertEquals("true", simpleMapper.writeObjectAsString(true));
+ assertEquals("false", simpleMapper.writeObjectAsString(false));
+ assertEquals("1", simpleMapper.writeObjectAsString(1));
+ assertEquals("\"val\"", simpleMapper.writeObjectAsString("val"));
+ assertEquals("[\"val1\",\"val2\"]", simpleMapper.writeObjectAsString(asList("val1", "val2")));
+ assertEquals("{\"a\":\"val\",\"b\":true,\"c\":1}", simpleMapper.writeObjectAsString(new TreeMap<String, Object>() {{
+ put("a", "val");
+ put("b", true);
+ put("c", 1);
+ }}));
}
}