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)) {

Reply via email to