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 <rmannibu...@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))));