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 <[email protected]>
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)) {