Btw, I don't think Mapper and JSON-B must be independent of our jsonp impl. I cannot think of any legit use. With older EE7 servers you might have jsonp, but then we require EE8. But every EE8 server always also comes with JSON-B as requirement. So what use case do you think of?
LieGrue, strub > Am 30.07.2019 um 14:19 schrieb Mark Struberg <strub...@yahoo.de.INVALID>: > > > Will do. > LieGrue, > strub > > >> Am 29.07.2019 um 23:12 schrieb Romain Manni-Bucau <rmannibu...@gmail.com>: >> >> Hmm, this breaks the isolation between our modules - jsonp impl must stay >> switchable in mapper and jsonb modules. >> >> Can we just duplicate the class - the old shade+relocation hack is fine for >> me? >> >> Also, does Foo[] match Object[] or do we have some regression - think we >> should harness such an utility with an exhaustive test kit? >> >> Romain >> >> >> ---------- Forwarded message --------- >> De : <strub...@apache.org> >> Date: lun. 29 juil. 2019 à 23:08 >> Subject: [johnzon] branch master updated: JOHNZON-226 use own Array.length >> To: comm...@johnzon.apache.org <comm...@johnzon.apache.org> >> >> >> This is an automated email from the ASF dual-hosted git repository. >> >> struberg pushed a commit to branch master >> in repository https://gitbox.apache.org/repos/asf/johnzon.git >> >> >> The following commit(s) were added to refs/heads/master by this push: >> new 41e0fdc JOHNZON-226 use own Array.length >> 41e0fdc is described below >> >> commit 41e0fdc50c59153a03e49e85afac534949ece4e6 >> Author: Mark Struberg <strub...@apache.org> >> AuthorDate: Mon Jul 29 22:49:54 2019 +0200 >> >> JOHNZON-226 use own Array.length >> --- >> .../apache/johnzon/core/JsonArrayBuilderImpl.java | 4 ++- >> .../org/apache/johnzon/core}/util/ArrayUtil.java | 36 >> +++++++++++++++++++++- >> .../org/apache/johnzon/jsonb/JohnzonJsonb.java | 15 ++++----- >> .../java/org/apache/johnzon/mapper/Mapper.java | 2 +- >> .../johnzon/mapper/MappingGeneratorImpl.java | 35 >> ++------------------- >> 5 files changed, 49 insertions(+), 43 deletions(-) >> >> diff --git >> a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java >> b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java >> index f105eaf..effd30a 100644 >> --- >> a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java >> +++ >> b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java >> @@ -33,6 +33,8 @@ import java.util.Collections; >> import java.util.List; >> import java.util.Map; >> >> +import org.apache.johnzon.core.util.ArrayUtil; >> + >> class JsonArrayBuilderImpl implements JsonArrayBuilder, Serializable { >> private List<JsonValue> tmpList; >> private BufferStrategy.BufferProvider<char[]> bufferProvider; >> @@ -223,7 +225,7 @@ class JsonArrayBuilderImpl implements JsonArrayBuilder, >> Serializable { >> } else if (value instanceof Collection) { >> add(new JsonArrayBuilderImpl(Collection.class.cast(value), >> bufferProvider).build()); >> } else if (value.getClass().isArray()) { >> - final int length = Array.getLength(value); >> + final int length = ArrayUtil.getArrayLength(value); >> final Collection<Object> collection = new ArrayList<>(length); >> for (int i = 0; i < length; i++) { >> collection.add(Array.get(value, i)); >> diff --git >> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/util/ArrayUtil.java >> b/johnzon-core/src/main/java/org/apache/johnzon/core/util/ArrayUtil.java >> similarity index 75% >> rename from >> johnzon-mapper/src/main/java/org/apache/johnzon/mapper/util/ArrayUtil.java >> rename to >> johnzon-core/src/main/java/org/apache/johnzon/core/util/ArrayUtil.java >> index a7a6c57..646c112 100644 >> --- >> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/util/ArrayUtil.java >> +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/util/ArrayUtil.java >> @@ -14,7 +14,7 @@ >> * See the License for the specific language governing permissions and >> * limitations under the License. >> */ >> -package org.apache.johnzon.mapper.util; >> +package org.apache.johnzon.core.util; >> >> import java.util.AbstractList; >> import java.util.List; >> @@ -27,6 +27,40 @@ public final class ArrayUtil { >> // utility class ct >> } >> >> + public static int getArrayLength(Object array) { >> + // Note: all types of multidimensional arrays are instanceof >> Object[] >> + if (array instanceof Object[]) { >> + return ((Object[]) array).length; >> + } >> + if (array instanceof boolean[]) { >> + return ((boolean[])array).length; >> + } >> + if (array instanceof byte[]) { >> + return ((byte[])array).length; >> + } >> + if (array instanceof char[]) { >> + return ((char[]) array).length; >> + } >> + if (array instanceof short[]) { >> + return ((short[]) array).length; >> + } >> + if (array instanceof int[]) { >> + return ((int[]) array).length; >> + } >> + if (array instanceof long[]) { >> + return ((long[]) array).length; >> + } >> + if (array instanceof float[]) { >> + return ((float[]) array).length; >> + } >> + if (array instanceof double[]) { >> + return ((double[]) array).length; >> + } >> + >> + throw new IllegalArgumentException("This is not an array! " + >> array); >> + } >> + >> + >> public static List<Integer> asList(final int[] vals) { >> return new AbstractList<Integer>() { >> @Override >> diff --git >> a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java >> b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java >> index a9adada..7965519 100644 >> --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java >> +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java >> @@ -18,6 +18,7 @@ >> */ >> package org.apache.johnzon.jsonb; >> >> +import org.apache.johnzon.core.util.ArrayUtil; >> import org.apache.johnzon.jsonb.api.experimental.JsonbExtension; >> import org.apache.johnzon.jsonb.extension.JsonValueReader; >> import org.apache.johnzon.jsonb.extension.JsonValueWriter; >> @@ -254,43 +255,43 @@ public class JohnzonJsonb implements Jsonb, >> AutoCloseable, JsonbExtension { >> final Class<?> componentType = >> object.getClass().getComponentType(); >> Object[] array; >> if (int.class == componentType) { >> - final int length = Array.getLength(object); >> + final int length = ArrayUtil.getArrayLength(object); >> array = new Integer[length]; >> for (int i = 0; i < length; i++) { >> array[i] = Array.getInt(object, i); >> } >> } else if (double.class == componentType) { >> - final int length = Array.getLength(object); >> + final int length = ArrayUtil.getArrayLength(object); >> array = new Integer[length]; >> for (int i = 0; i < length; i++) { >> array[i] = Array.getDouble(object, i); >> } >> } else if (byte.class == componentType) { >> - final int length = Array.getLength(object); >> + final int length = ArrayUtil.getArrayLength(object); >> array = new Integer[length]; >> for (int i = 0; i < length; i++) { >> array[i] = Array.getByte(object, i); >> } >> } else if (char.class == componentType) { >> - final int length = Array.getLength(object); >> + final int length = ArrayUtil.getArrayLength(object); >> array = new Integer[length]; >> for (int i = 0; i < length; i++) { >> array[i] = Array.getChar(object, i); >> } >> } else if (float.class == componentType) { >> - final int length = Array.getLength(object); >> + final int length = ArrayUtil.getArrayLength(object); >> array = new Integer[length]; >> for (int i = 0; i < length; i++) { >> array[i] = Array.getFloat(object, i); >> } >> } else if (long.class == componentType) { >> - final int length = Array.getLength(object); >> + final int length = ArrayUtil.getArrayLength(object); >> array = new Integer[length]; >> for (int i = 0; i < length; i++) { >> array[i] = Array.getLong(object, i); >> } >> } else if (short.class == componentType) { >> - final int length = Array.getLength(object); >> + final int length = ArrayUtil.getArrayLength(object); >> array = new Integer[length]; >> for (int i = 0; i < length; i++) { >> array[i] = Array.getShort(object, i); >> diff --git >> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java >> b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java >> index 1027fca..b95935e 100644 >> --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java >> +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java >> @@ -53,7 +53,7 @@ import javax.json.stream.JsonGeneratorFactory; >> >> import org.apache.johnzon.mapper.internal.JsonPointerTracker; >> import org.apache.johnzon.mapper.reflection.JohnzonCollectionType; >> -import org.apache.johnzon.mapper.util.ArrayUtil; >> +import org.apache.johnzon.core.util.ArrayUtil; >> >> public class Mapper implements Closeable { >> >> diff --git >> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java >> b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java >> index 1b4d4e8..27de775 100644 >> --- >> a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java >> +++ >> b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java >> @@ -21,6 +21,7 @@ package org.apache.johnzon.mapper; >> import static java.util.Collections.emptyList; >> >> import org.apache.johnzon.mapper.internal.JsonPointerTracker; >> +import org.apache.johnzon.core.util.ArrayUtil; >> >> import javax.json.JsonValue; >> import javax.json.stream.JsonGenerator; >> @@ -470,7 +471,7 @@ public class MappingGeneratorImpl implements >> MappingGenerator { >> * @param key either the attribute key or {@code null} if the array >> should be rendered without key >> */ >> private void writeArray(Class<?> type, Adapter itemConverter, String >> key, Object arrayValue, Collection<String> ignoredProperties, >> JsonPointerTracker jsonPointer) { >> - final int length = getArrayLength(arrayValue); >> + final int length = ArrayUtil.getArrayLength(arrayValue); >> if (length == 0 && config.isSkipEmptyArray()) { >> return; >> } >> @@ -582,38 +583,6 @@ public class MappingGeneratorImpl implements >> MappingGenerator { >> generator.writeEnd(); >> } >> >> - private int getArrayLength(Object array) { >> - // Note: all types of multidimensional arrays are instanceof >> Object[] >> - if (array instanceof Object[]) { >> - return ((Object[]) array).length; >> - } >> - if (array instanceof boolean[]) { >> - return ((boolean[])array).length; >> - } >> - if (array instanceof byte[]) { >> - return ((byte[])array).length; >> - } >> - if (array instanceof char[]) { >> - return ((char[]) array).length; >> - } >> - if (array instanceof short[]) { >> - return ((short[]) array).length; >> - } >> - if (array instanceof int[]) { >> - return ((int[]) array).length; >> - } >> - if (array instanceof long[]) { >> - return ((long[]) array).length; >> - } >> - if (array instanceof float[]) { >> - return ((float[]) array).length; >> - } >> - if (array instanceof double[]) { >> - return ((double[]) array).length; >> - } >> - >> - throw new IllegalArgumentException("This is not an array! " + >> array); >> - } >> >> private void writeItem(final Object o, final Collection<String> >> ignoredProperties, JsonPointerTracker jsonPointer) { >> if (o == null) { >