From d73535c03c8865ba9433e7569daee6fdda698944 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Mon, 27 Sep 2021 20:16:08 +0200 Subject: [PATCH] Issue #6558 - Allow configuring return type in JSON array parsing. Updated JSON implementation to keep backward compatibility by calling newArray(), now deprecated. Signed-off-by: Simone Bordet (cherry picked from commit 1d542be610b9d7def8fb5080f6e9cd492d6838bb) --- .../main/java/org/eclipse/jetty/util/ajax/JSON.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 719745c27369..42368a9218de 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 @@ -27,6 +27,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.Loader; import org.eclipse.jetty.util.TypeUtil; @@ -84,7 +85,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; /** * @return the initial stringBuffer size to use when creating JSON strings @@ -937,6 +938,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() != '[')