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 2020/06/01 11:15:30 UTC
[johnzon] 01/02: [JOHNZON-314] ensure @JohnzonAny on a field does
not duplicate explicit bindings
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
commit f7343bad9cd3fe249edc09a5e2a9429c28e916ef
Author: Romain Manni-Bucau <rm...@gmail.com>
AuthorDate: Mon Jun 1 13:15:12 2020 +0200
[JOHNZON-314] ensure @JohnzonAny on a field does not duplicate explicit bindings
---
.../java/org/apache/johnzon/jsonb/AnySupportTest.java | 15 +++++++++++++++
.../java/org/apache/johnzon/mapper/MappingParserImpl.java | 1 +
2 files changed, 16 insertions(+)
diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AnySupportTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AnySupportTest.java
index 1cf040f..0eb0946 100644
--- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AnySupportTest.java
+++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AnySupportTest.java
@@ -49,6 +49,21 @@ public class AnySupportTest {
assertEquals("{\"a\":{\"b\":\"c\"}}", rule.toJson(object));
}
+ @Test
+ public void mixed() {
+ final Mixed object = rule.fromJson("{\"explicit\":\"a\",\"bar\":\"dummy\"}", Mixed.class);
+ assertEquals("a", object.explicit);
+ assertEquals(singletonMap("bar", "dummy"), object.values);
+ assertEquals("{\"explicit\":\"a\",\"bar\":\"dummy\"}", rule.toJson(object));
+ }
+
+ public static class Mixed {
+ public String explicit;
+
+ @JohnzonAny
+ private Map<String, String> values;
+ }
+
public static class Foo {
@JohnzonAny
private Map<String, String> values;
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 1b7a3a9..1e90acf 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
@@ -440,6 +440,7 @@ public class MappingParserImpl implements MappingParser {
final Type tRef = type;
try {
classMapping.anyField.set(t, object.entrySet().stream()
+ .filter(it -> !classMapping.setters.containsKey(it.getKey()))
.collect(toMap(Map.Entry::getKey, e -> toValue(null, e.getValue(), null, null,
ParameterizedType.class.cast(classMapping.anyField.getGenericType()).getActualTypeArguments()[1], null,
isDeduplicateObjects ? new JsonPointerTracker(jsonPointer, e.getKey()) : null, tRef))));