Most situations where a JSON-P impl is available you have just JSON-P-1.0.
And this doesn't work with our Mapper. We require JSON-P-1.1 in the meantime.
So this argument imo doesn't cut it.

LieGrue,
strub


> Am 30.07.2019 um 14:37 schrieb Romain Manni-Bucau <rmannibu...@gmail.com>:
> 
> Le mar. 30 juil. 2019 à 14:27, Mark Struberg <strub...@yahoo.de.invalid> a
> écrit :
> 
>> Btw, I don't think Mapper and JSON-B must be independent of our jsonp
>> impl. I cannot think of any legit use.
>> 
> 
> You already have a jsonp impl and need it for some other vendor specific
> stuff and want to add johnzon-mapper/jsonb - yes yes it happens, even
> without the RI ;).
> 
> 
>> 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?
>> 
> 
> EE servers are out of game there as you mention but all other use cases are
> not and it quickly becomes tricky to manage its deps so I'd really like to
> keep that original design constraint in.
> 
> 
>> 
>> 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) {
>>> 
>> 
>> 

Reply via email to