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 f96fcea [JOHNZON-333] align both writePrimitives methods of MappingGeneratorImpl f96fcea is described below commit f96fceae0316cdf5f7cf406def46486d48c4805c Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Tue Jan 26 08:56:04 2021 +0100 [JOHNZON-333] align both writePrimitives methods of MappingGeneratorImpl --- .../apache/johnzon/jsonb/DefaultMappingTest.java | 2 +- .../org/apache/johnzon/jsonb/JsonbWriteTest.java | 22 +++++++++++++ .../java/org/apache/johnzon/mapper/Mapper.java | 37 ++++++---------------- .../johnzon/mapper/MappingGeneratorImpl.java | 6 +++- 4 files changed, 37 insertions(+), 30 deletions(-) diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java index c930b44..5c7f4e2 100644 --- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java @@ -151,7 +151,7 @@ public class DefaultMappingTest { @Test public void simpleValues() { - assertEquals("\"\"strValue\"\"", JSONB.toJson("\"strValue\"")); + assertEquals("\"\\\"strValue\\\"\"", JSONB.toJson("\"strValue\"")); assertEquals("\"true\"", JSONB.toJson("true")); assertEquals("\"false\"", JSONB.toJson("false")); assertEquals("\"null\"", JSONB.toJson("null")); diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java index 36b41a5..60fbfdb 100644 --- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import javax.json.bind.Jsonb; import javax.json.bind.JsonbBuilder; import javax.json.bind.JsonbConfig; +import javax.json.bind.adapter.JsonbAdapter; import javax.json.bind.annotation.JsonbCreator; import javax.json.bind.annotation.JsonbDateFormat; import javax.json.bind.annotation.JsonbProperty; @@ -44,6 +45,27 @@ import static org.junit.Assert.assertEquals; public class JsonbWriteTest { @Test + public void rawAdapter() throws Exception { + try (final Jsonb jsonb = JsonbBuilder.create(new JsonbConfig() + .withAdapters(new JsonbAdapter<SimpleProperty, String>() { + @Override + public String adaptToJson(final SimpleProperty obj) { + return obj.getValue(); + } + + @Override + public SimpleProperty adaptFromJson(final String obj) { + throw new UnsupportedOperationException(); + } + }))) { + final SimpleProperty property = new SimpleProperty(); + property.setValue("ok"); + final String json = jsonb.toJson(property, Throwable.class); + assertEquals("\"ok\"", json); + } + } + + @Test public void throwable() throws Exception { try (final Jsonb jsonb = JsonbBuilder.create(new JsonbConfig() .withPropertyOrderStrategy(PropertyOrderStrategy.LEXICOGRAPHICAL))){ 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 775e7b6..3e7aaf7 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 @@ -168,45 +168,26 @@ public class Mapper implements Closeable { } public void writeObject(final Object object, final Writer stream) { - if (JsonValue.class.isInstance(object) - || Boolean.class.isInstance(object) || String.class.isInstance(object) || Number.class.isInstance(object) - || object == null) { - try { - final String valueOf = String.valueOf(object); - if (object instanceof String) { - stream.write('"'); - stream.write(valueOf); - stream.write('"'); - } else { - stream.write(valueOf); - } + if (object == null) { + try (final Writer w = stream) { + w.write("null"); } catch (final IOException e) { throw new MapperException(e); - } finally { - if (config.isClose()) { - try { - stream.close(); - } catch (final IOException e) { - // no-op - } - } else { - try { - stream.flush(); - } catch (final IOException e) { - // no-op - } - } } return; } - final Adapter adapter = config.findAdapter(object.getClass()); if (adapter != null && TypeAwareAdapter.class.isInstance(adapter) && TypeAwareAdapter.class.cast(adapter).getTo() == JsonString.class) { writeObject(adapter.from(object), stream); return; } try (final JsonGenerator generator = generatorFactory.createGenerator(stream(stream))) { - writeObjectWithGenerator(adapter == null ? object : adapter.from(object), generator); + final Object converted = adapter == null ? object : adapter.from(object); + if (CharSequence.class.isInstance(converted)) { + writeObjectWithGenerator(provider.createValue(converted.toString()), generator); + } else { + writeObjectWithGenerator(converted, generator); + } } } diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java index 7e4d749..0a4ec42 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java @@ -120,7 +120,8 @@ public class MappingGeneratorImpl implements MappingGenerator { return this; } - public void doWriteObject(Object object, JsonGenerator generator, boolean writeBody, final Collection<String> ignoredProperties, JsonPointerTracker jsonPointer) { + public void doWriteObject(Object object, JsonGenerator generator, boolean writeBody, final Collection<String> ignoredProperties, + JsonPointerTracker jsonPointer) { try { if (object instanceof Map) { @@ -229,6 +230,9 @@ public class MappingGeneratorImpl implements MappingGenerator { if (type == String.class) { generator.write(value.toString()); handled = true; + } else if (JsonValue.class.isAssignableFrom(type)) { + generator.write(JsonValue.class.cast(value)); + handled = true; } else if (type == long.class || type == Long.class) { final long longValue = Long.class.cast(value).longValue(); if (isInJsRange(longValue)) {