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