@@ -115,6 +115,7 @@ void setUp() {
115115 mappingContext .getPersistentEntity (WithCustomMappedPrimitiveCollection .class );
116116 mappingContext .getPersistentEntity (BugModel .class );
117117 mappingContext .getPersistentEntity (ArrayListHolder .class );
118+ mappingContext .getPersistentEntity (MapWrapper .class );
118119 mappingContext .afterPropertiesSet ();
119120
120121 this .entities = new PersistentEntities (Collections .singleton (mappingContext ));
@@ -742,6 +743,39 @@ void arraysCanRemoveElementsDuringMerge() throws Exception {
742743 assertThat (updated .array ).containsExactly ("ancient" );
743744 }
744745
746+ @ Test // GH-2350
747+ void replacesArrays () throws Exception {
748+
749+ ArrayHolder holder = new ArrayHolder (new String [] { "original" });
750+
751+ ObjectMapper mapper = new ObjectMapper ();
752+
753+ JsonNode node = mapper .readTree ("{ \" array\" : [ \" first\" , \" update\" ] }" );
754+ ArrayHolder result = reader .doMerge ((ObjectNode ) node , holder , mapper );
755+
756+ node = mapper .readTree ("{ \" array\" : [ \" second\" , \" update\" ] }" );
757+ result = reader .doMerge ((ObjectNode ) node , holder , mapper );
758+
759+ assertThat (result .getArray ()).isEqualTo (new String [] { "second" , "update" });
760+ }
761+
762+ @ Test // GH-2350
763+ void replacesNestedArrays () throws Exception {
764+
765+ MapWrapper wrapper = new MapWrapper ();
766+ wrapper .map .put ("array" , new String [] { "original" });
767+
768+ ObjectMapper mapper = new ObjectMapper ();
769+
770+ JsonNode node = mapper .readTree ("{ \" map\" : { \" array\" : [ \" first\" , \" update\" ] } }" );
771+ MapWrapper result = reader .doMerge ((ObjectNode ) node , wrapper , mapper );
772+
773+ node = mapper .readTree ("{ \" map\" : { \" array\" : [ \" second\" , \" update\" ] } }" );
774+ result = reader .doMerge ((ObjectNode ) node , wrapper , mapper );
775+
776+ assertThat (result .map .get ("array" )).isEqualTo (new String [] { "second" , "update" });
777+ }
778+
745779 @ SuppressWarnings ("unchecked" )
746780 private static <T > T as (Object source , Class <T > type ) {
747781
@@ -1046,4 +1080,8 @@ public void setValues(Collection<String> values) {
10461080 this .values = values ;
10471081 }
10481082 }
1083+
1084+ static class MapWrapper {
1085+ public Map <String , Object > map = new HashMap <>();
1086+ }
10491087}
0 commit comments