diff --git a/jetty-util-ajax/src/main/java/org/eclipse/jetty/util/ajax/JSON.java b/jetty-util-ajax/src/main/java/org/eclipse/jetty/util/ajax/JSON.java index 483494ca6345..6d681355d469 100644 --- a/jetty-util-ajax/src/main/java/org/eclipse/jetty/util/ajax/JSON.java +++ b/jetty-util-ajax/src/main/java/org/eclipse/jetty/util/ajax/JSON.java @@ -33,6 +33,7 @@ import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; +import java.util.stream.IntStream; import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.Loader; @@ -97,7 +98,7 @@ public class JSON private final Map _convertors = new ConcurrentHashMap<>(); private int _stringBufferSize = 1024; - private Function, Object> _arrayConverter = List::toArray; + private Function, Object> _arrayConverter = this::defaultArrayConverter; public JSON() { @@ -1070,6 +1071,14 @@ protected Object parseObject(Source source) return map; } + private Object defaultArrayConverter(List list) + { + // Call newArray() to keep backward compatibility. + Object[] objects = newArray(list.size()); + IntStream.range(0, list.size()).forEach(i -> objects[i] = list.get(i)); + return objects; + } + protected Object parseArray(Source source) { if (source.next() != '[')