@@ -109,6 +109,7 @@ void setUp() {
109109 mappingContext .getPersistentEntity (WithCustomMappedPrimitiveCollection .class );
110110 mappingContext .getPersistentEntity (BugModel .class );
111111 mappingContext .getPersistentEntity (ArrayListHolder .class );
112+ mappingContext .getPersistentEntity (MapWrapper .class );
112113 mappingContext .afterPropertiesSet ();
113114
114115 this .entities = new PersistentEntities (Collections .singleton (mappingContext ));
@@ -736,6 +737,39 @@ void arraysCanRemoveElementsDuringMerge() throws Exception {
736737 assertThat (updated .array ).containsExactly ("ancient" );
737738 }
738739
740+ @ Test // GH-2350
741+ void replacesArrays () throws Exception {
742+
743+ ArrayHolder holder = new ArrayHolder (new String [] { "original" });
744+
745+ ObjectMapper mapper = new ObjectMapper ();
746+
747+ JsonNode node = mapper .readTree ("{ \" array\" : [ \" first\" , \" update\" ] }" );
748+ ArrayHolder result = reader .doMerge ((ObjectNode ) node , holder , mapper );
749+
750+ node = mapper .readTree ("{ \" array\" : [ \" second\" , \" update\" ] }" );
751+ result = reader .doMerge ((ObjectNode ) node , holder , mapper );
752+
753+ assertThat (result .getArray ()).isEqualTo (new String [] { "second" , "update" });
754+ }
755+
756+ @ Test // GH-2350
757+ void replacesNestedArrays () throws Exception {
758+
759+ MapWrapper wrapper = new MapWrapper ();
760+ wrapper .map .put ("array" , new String [] { "original" });
761+
762+ ObjectMapper mapper = new ObjectMapper ();
763+
764+ JsonNode node = mapper .readTree ("{ \" map\" : { \" array\" : [ \" first\" , \" update\" ] } }" );
765+ MapWrapper result = reader .doMerge ((ObjectNode ) node , wrapper , mapper );
766+
767+ node = mapper .readTree ("{ \" map\" : { \" array\" : [ \" second\" , \" update\" ] } }" );
768+ result = reader .doMerge ((ObjectNode ) node , wrapper , mapper );
769+
770+ assertThat (result .map .get ("array" )).isEqualTo (new String [] { "second" , "update" });
771+ }
772+
739773 @ SuppressWarnings ("unchecked" )
740774 private static <T > T as (Object source , Class <T > type ) {
741775
@@ -1128,4 +1162,8 @@ public void setValues(Collection<String> values) {
11281162 this .values = values ;
11291163 }
11301164 }
1165+
1166+ static class MapWrapper {
1167+ public Map <String , Object > map = new HashMap <>();
1168+ }
11311169}
0 commit comments