FELIX-6560 : Interpolation of embedded arrays does not work
diff --git a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java
index f2e7b67..30435f4 100644
--- a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java
+++ b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java
@@ -20,6 +20,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Array;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.util.ArrayList;
@@ -136,19 +137,30 @@
                 }
             } else if (val instanceof String[]) {
                 String[] array = (String[]) val;
-                String[] newArray = null;
+                List<String> newArray = null;
                 for (int i = 0; i < array.length; i++) {
                     Object newVal = getNewValue(key, array[i], pid, properties);
                     if (newVal != null && !newVal.equals(array[i])) {
                         if (newArray == null) {
-                            newArray = new String[array.length];
-                            System.arraycopy(array, 0, newArray, 0, array.length);
+                            newArray = new ArrayList<>();
+                            for(int m=0;m<i;m++) {
+                                newArray.add(array[m]);
+                            }
                         }
-                        newArray[i] = newVal.toString();
+                        if ( newVal.getClass().isArray() ) {
+                            for(int m=0;m<Array.getLength(newVal);m++ ) {
+                                newArray.add(Array.get(newVal, m).toString());
+                            }
+                        } else {
+                            newArray.add(newVal.toString());
+                        }
+                    } else if ( newArray != null ) {
+                        newArray.add(array[i]);
                     }
                 }
                 if (newArray != null) {
-                    properties.put(key, newArray);
+                    final String[] update = newArray.toArray(new String[newArray.size()]);
+                    properties.put(key, update);
                     getLog().info("Replaced value of configuration property '{}' for PID {}", key, pid);
                 }
             }
diff --git a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java
index 4fdeab0..1e99664 100644
--- a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java
+++ b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java
@@ -306,4 +306,18 @@
         obj = plugin.convertType("String", "a,b", ",");
         assertEquals("a,b", obj);
     }
+
+    @Test
+    public void testModifyConfigurationWithArrayInArray() throws Exception {
+        BundleContext bc = Mockito.mock(BundleContext.class);
+        Mockito.when(bc.getProperty("foo")).thenReturn("2000,3000");
+        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc::getProperty, null, null);
+
+        Dictionary<String, Object> dict = new Hashtable<>();
+        dict.put("array", new String[] {"1000", "$[prop:foo;type=String[];delimiter=,]", "4000"});
+        plugin.modifyConfiguration(null, dict);
+
+        assertEquals(1, dict.size());
+        assertArrayEquals(new String[] {"1000", "2000", "3000", "4000"}, (String[])dict.get("array"));
+    }
 }
diff --git a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
index 74c892c..05132a9 100755
--- a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
+++ b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
@@ -18,7 +18,6 @@
 
 import static org.junit.Assert.assertEquals;
 
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.felix.configadmin.plugin.interpolation.Interpolator.Provider;