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 203b7ae JOHNZON-251 ensure adapters are used in arrays
203b7ae is described below
commit 203b7aed30bd8874ac965e6eab631054ac6310f1
Author: Romain Manni-Bucau <[email protected]>
AuthorDate: Wed Aug 14 10:31:06 2019 +0200
JOHNZON-251 ensure adapters are used in arrays
---
.../java/org/apache/johnzon/jsonb/DefaultMappingTest.java | 2 +-
.../java/org/apache/johnzon/mapper/MappingParserImpl.java | 11 +++++++++--
.../org/apache/johnzon/mapper/access/MethodAccessMode.java | 14 ++++++++++++--
3 files changed, 22 insertions(+), 5 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 33c9fd6..af6930c 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
@@ -669,7 +669,7 @@ public class DefaultMappingTest {
POJOWithMixedFieldAccess pojoWithMixedFieldAccess = new
POJOWithMixedFieldAccess();
-
assertEquals("{\"active\":true,\"id\":2,\"name\":\"pojoName\"}"/*,\"valid\":false}"*/,
JSONB.toJson(pojoWithMixedFieldAccess));
+
assertEquals("{\"active\":true,\"id\":2,\"name\":\"pojoName\",\"valid\":false}",
JSONB.toJson(pojoWithMixedFieldAccess));
//composite class
CompositePOJO compositePOJO = new CompositePOJO();
diff --git
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
index c259756..d6bf2cd 100644
---
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
+++
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
@@ -437,7 +437,8 @@ public class MappingParserImpl implements MappingParser {
}
}
- private Object convertTo(final Adapter converter, final JsonValue
jsonValue, JsonPointerTracker jsonPointer) {
+ private Object convertTo(final Adapter converter, final JsonValue
jsonValue, final JsonPointerTracker jsonPointer,
+ final Type targetType) {
final JsonValue.ValueType valueType = jsonValue != null ?
jsonValue.getValueType() : null;
final AdapterKey key = getAdapterKey(converter);
@@ -504,6 +505,12 @@ public class MappingParserImpl implements MappingParser {
if (JsonArray.class == key.getTo() || JsonStructure.class ==
key.getTo()) {
return converter.to(jsonValue.asJsonObject());
}
+ if (TypeAwareAdapter.class.isInstance(converter)) {
+ final TypeAwareAdapter adapter =
TypeAwareAdapter.class.cast(converter);
+ if (adapter.getFrom().equals(targetType)) {
+ return converter.to(readObject(jsonValue,
adapter.getTo()));
+ }
+ }
return buildArray(key.getTo(), jsonValue.asJsonArray(), null,
null, jsonPointer, null);
}
return converter.to(jsonValue.toString());
@@ -969,7 +976,7 @@ public class MappingParserImpl implements MappingParser {
try {
return converter == null ?
toObject(baseInstance, jsonValue, type, itemConverter,
jsonPointer, rootType) :
- convertTo(converter, jsonValue, jsonPointer);
+ convertTo(converter, jsonValue, jsonPointer, type);
} catch (Exception e) {
if (e instanceof MapperException) {
throw e;
diff --git
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
index e35c425..c43ef3b 100644
---
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
+++
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java
@@ -48,11 +48,21 @@ public class MethodAccessMode extends BaseAccessMode {
final PropertyDescriptor[] propertyDescriptors =
getPropertyDescriptors(clazz);
for (final PropertyDescriptor descriptor : propertyDescriptors) {
final Method readMethod = descriptor.getReadMethod();
+ final String name = descriptor.getName();
if (readMethod != null && readMethod.getDeclaringClass() !=
Object.class) {
- if (isIgnored(descriptor.getName()) ||
Meta.getAnnotation(readMethod, JohnzonAny.class) != null) {
+ if (isIgnored(name) || Meta.getAnnotation(readMethod,
JohnzonAny.class) != null) {
continue;
}
- readers.put(extractKey(descriptor.getName(), readMethod,
null), new MethodReader(readMethod, readMethod.getGenericReturnType()));
+ readers.put(extractKey(name, readMethod, null), new
MethodReader(readMethod, readMethod.getGenericReturnType()));
+ } else if (readMethod == null && descriptor.getWriteMethod() !=
null && // isXXX, not supported by javabeans
+ (descriptor.getPropertyType() == Boolean.class ||
descriptor.getPropertyType() == boolean.class)) {
+ try {
+ final Method method = clazz.getMethod(
+ "is" + Character.toUpperCase(name.charAt(0)) +
(name.length() > 1 ? name.substring(1) : ""));
+ readers.put(extractKey(name, method, null), new
MethodReader(method, method.getGenericReturnType()));
+ } catch (final NoSuchMethodException e) {
+ // no-op
+ }
}
}
return readers;