This is an automated email from the ASF dual-hosted git repository.

nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 006f95acd5a IGNITE-25186 Move BinaryArray to package-private (#12014)
006f95acd5a is described below

commit 006f95acd5adb9834e4fafe87c81841e04f67ec2
Author: Nikolay <nizhi...@apache.org>
AuthorDate: Tue Apr 29 13:38:11 2025 +0300

    IGNITE-25186 Move BinaryArray to package-private (#12014)
---
 .../org/apache/ignite/IgniteSystemProperties.java  |   6 +-
 .../org/apache/ignite/internal/IgnitionEx.java     |   4 +-
 .../apache/ignite/internal/binary/BinaryArray.java |  44 +----
 .../binary/BinaryArrayIdentityResolver.java        |  16 +-
 .../internal/binary/BinaryClassDescriptor.java     |   4 +-
 .../ignite/internal/binary/BinaryObjectEx.java     |  21 +++
 .../ignite/internal/binary/BinaryObjectExImpl.java |   8 +-
 .../ignite/internal/binary/BinaryObjectImpl.java   |   4 +-
 .../internal/binary/BinaryObjectOffheapImpl.java   |   4 +-
 .../ignite/internal/binary/BinaryReaderExImpl.java |   4 +-
 .../binary/BinarySerializedFieldComparator.java    |   2 +-
 .../apache/ignite/internal/binary/BinaryUtils.java |  43 ++++-
 .../ignite/internal/binary/BinaryWriterExImpl.java |   2 +-
 .../binary/builder/BinaryBuilderReader.java        |   2 +-
 .../binary/builder/BinaryBuilderSerializer.java    |   8 +-
 .../binary/builder/BinaryObjectBuilderImpl.java    |   3 +-
 .../ignite/internal/client/thin/ClientUtils.java   |   2 +-
 .../processors/cache/CacheObjectUtils.java         |   5 +-
 .../binary/CacheObjectBinaryProcessorImpl.java     |   3 +-
 .../client/service/ClientServiceInvokeRequest.java |   4 +-
 .../platform/compute/PlatformCompute.java          |   4 +-
 .../platform/services/PlatformServices.java        |   4 +-
 .../processors/query/QueryTypeDescriptorImpl.java  |   3 +-
 .../query/stat/ColumnStatisticsCollector.java      |   2 +-
 .../processors/service/GridServiceProxy.java       |   4 +-
 .../apache/ignite/internal/util/lang/GridFunc.java |   4 +-
 .../ignite/startup/cmdline/CommandLineStartup.java |   4 +-
 .../internal/binary/AbstractBinaryArraysTest.java  |   4 +-
 .../BinaryArrayIdentityResolverSelfTest.java       |   4 +-
 .../internal/binary/BinaryArraySelfTest.java       |   4 +-
 .../internal/binary/BinaryMarshallerSelfTest.java  |  30 ++--
 .../binary/BinaryObjectExceptionSelfTest.java      |   2 +-
 .../BinarySerialiedFieldComparatorSelfTest.java    |   4 +-
 .../BinaryObjectBuilderAdditionalSelfTest.java     |  12 +-
 .../ignite/internal/client/thin/ServicesTest.java  |   6 +-
 .../cache/AbstractDataTypesCoverageTest.java       |   8 +-
 .../ignite/platform/PlatformDeployServiceTask.java |   9 +-
 .../platform/PlatformSetUseBinaryArrayTask.java    |   4 +-
 .../internal/processors/query/h2/H2Utils.java      |   3 +-
 .../internal/processors/query/h2/dml/DmlUtils.java |   4 +-
 .../processors/cache/index/ArrayIndexTest.java     |   6 +-
 .../internal/binary/BinaryArraySerializer.java}    |  25 ++-
 .../binary/BinaryObjectImplSerializer.java         |  75 ++++++++
 .../ignite/internal/binary/BinarySerializers.java} |  18 +-
 .../internal/jackson/IgniteObjectMapper.java       |  66 +------
 .../org/apache/ignite/dump/IgniteJsonSuite.java    |   3 +-
 .../java/org/apache/ignite/dump/JsonArrayTest.java | 192 +++++++++++++++++++++
 parent/pom.xml                                     |  15 +-
 48 files changed, 468 insertions(+), 240 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java 
b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index 7b91c68792e..f0430f0178d 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -32,7 +32,7 @@ import 
org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.DeploymentMode;
 import org.apache.ignite.configuration.DiskPageCompression;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.binary.BinaryArray;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import 
org.apache.ignite.internal.cache.query.index.sorted.inline.InlineRecommender;
 import org.apache.ignite.internal.client.GridClient;
 import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
@@ -58,7 +58,7 @@ import static 
org.apache.ignite.internal.IgniteKernal.DFLT_LONG_OPERATIONS_DUMP_
 import static 
org.apache.ignite.internal.LongJVMPauseDetector.DEFAULT_JVM_PAUSE_DETECTOR_THRESHOLD;
 import static 
org.apache.ignite.internal.LongJVMPauseDetector.DFLT_JVM_PAUSE_DETECTOR_LAST_EVENTS_COUNT;
 import static 
org.apache.ignite.internal.LongJVMPauseDetector.DFLT_JVM_PAUSE_DETECTOR_PRECISION;
-import static 
org.apache.ignite.internal.binary.BinaryArray.DFLT_IGNITE_USE_BINARY_ARRAYS;
+import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_IGNITE_USE_BINARY_ARRAYS;
 import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
 import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
 import static 
org.apache.ignite.internal.cache.query.index.sorted.inline.InlineRecommender.DFLT_THROTTLE_INLINE_SIZE_CALCULATION;
@@ -2051,7 +2051,7 @@ public final class IgniteSystemProperties extends 
IgniteCommonsSystemProperties
 
     /**
      * Enables storage of typed arrays.
-     * The default value is {@link BinaryArray#DFLT_IGNITE_USE_BINARY_ARRAYS}.
+     * The default value is {@link BinaryUtils#DFLT_IGNITE_USE_BINARY_ARRAYS}.
      */
     @SystemProperty(value = "Flag to enable store of array in binary format 
and keep component type",
         defaults = "" + DFLT_IGNITE_USE_BINARY_ARRAYS)
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java 
b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
index 3f56675c95e..867aaf81f5c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
@@ -73,7 +73,7 @@ import 
org.apache.ignite.configuration.SystemDataRegionConfiguration;
 import org.apache.ignite.configuration.TransactionConfiguration;
 import org.apache.ignite.failure.FailureContext;
 import org.apache.ignite.failure.FailureType;
-import org.apache.ignite.internal.binary.BinaryArray;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
 import org.apache.ignite.internal.processors.cache.CacheGroupContext;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap;
@@ -1794,7 +1794,7 @@ public class IgnitionEx {
          */
         private IgniteConfiguration 
initializeConfiguration(IgniteConfiguration cfg)
             throws IgniteCheckedException {
-            BinaryArray.initUseBinaryArrays();
+            BinaryUtils.initUseBinaryArrays();
 
             IgniteConfiguration myCfg = new IgniteConfiguration(cfg);
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java
index fdecc30fae8..b5269f4a11d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArray.java
@@ -24,7 +24,6 @@ import java.io.ObjectOutput;
 import java.lang.reflect.Array;
 import java.util.Arrays;
 import java.util.Objects;
-import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.binary.BinaryObjectBuilder;
 import org.apache.ignite.binary.BinaryObjectException;
@@ -39,20 +38,12 @@ import org.apache.ignite.internal.util.typedef.internal.S;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_USE_BINARY_ARRAYS;
 import static 
org.apache.ignite.internal.binary.GridBinaryMarshaller.UNREGISTERED_TYPE_ID;
 
 /**
  * Binary object representing array.
  */
-public class BinaryArray implements BinaryObjectEx, Externalizable, 
Comparable<BinaryArray> {
-    /** Default value of {@link 
IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS}. */
-    public static final boolean DFLT_IGNITE_USE_BINARY_ARRAYS = false;
-
-    /** Value of {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS}. */
-    private static boolean USE_BINARY_ARRAYS =
-        IgniteSystemProperties.getBoolean(IGNITE_USE_BINARY_ARRAYS, 
DFLT_IGNITE_USE_BINARY_ARRAYS);
-
+class BinaryArray implements BinaryObjectEx, Externalizable, 
Comparable<BinaryArray> {
     /** */
     private static final long serialVersionUID = 0L;
 
@@ -143,17 +134,13 @@ public class BinaryArray implements BinaryObjectEx, 
Externalizable, Comparable<B
         }
     }
 
-    /**
-     * @return Underlying array.
-     */
-    public Object[] array() {
+    /** {@inheritDoc} */
+    @Override public Object[] array() {
         return arr;
     }
 
-    /**
-     * @return Component type ID.
-     */
-    public int componentTypeId() {
+    /** {@inheritDoc} */
+    @Override public int componentTypeId() {
         // This can happen when binary type was not registered in time of 
binary array creation.
         // In this case same type will be written differently:
         // arr1 = 
[compTypeId=UNREGISTERED_TYPE_ID,compClsName="org.apache.Pojo"]
@@ -162,10 +149,8 @@ public class BinaryArray implements BinaryObjectEx, 
Externalizable, Comparable<B
         return compTypeId == UNREGISTERED_TYPE_ID ? ctx.typeId(compClsName) : 
compTypeId;
     }
 
-    /**
-     * @return Component class name.
-     */
-    public String componentClassName() {
+    /** {@inheritDoc} */
+    @Override public String componentClassName() {
         return compClsName;
     }
 
@@ -268,19 +253,4 @@ public class BinaryArray implements BinaryObjectEx, 
Externalizable, Comparable<B
     @Override public String toString() {
         return S.toString(BinaryArray.class, this);
     }
-
-    /** @return {@code True} if typed arrays should be used, {@code false} 
otherwise. */
-    public static boolean useBinaryArrays() {
-        return USE_BINARY_ARRAYS;
-    }
-
-    /**
-     * Initialize {@link #USE_BINARY_ARRAYS} value with
-     * {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS} system property 
value.
-     *
-     * This method invoked using reflection in tests.
-     */
-    public static void initUseBinaryArrays() {
-        USE_BINARY_ARRAYS = 
IgniteSystemProperties.getBoolean(IGNITE_USE_BINARY_ARRAYS, 
DFLT_IGNITE_USE_BINARY_ARRAYS);
-    }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java
index 9f7e6572d80..7a17dfd2f63 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolver.java
@@ -56,8 +56,8 @@ class BinaryArrayIdentityResolver extends 
BinaryAbstractIdentityResolver {
             int start = ex.dataStartOffset();
             int end = ex.footerStartOffset();
 
-            if (ex.hasArray())
-                return hashCode(ex.array(), start, end);
+            if (ex.hasBytes())
+                return hashCode(ex.bytes(), start, end);
             else {
                 // Handle offheap object.
                 int hash = 1;
@@ -114,10 +114,10 @@ class BinaryArrayIdentityResolver extends 
BinaryAbstractIdentityResolver {
                 BinaryObjectExImpl exx1 = (BinaryObjectExImpl)ex1;
                 BinaryObjectExImpl exx2 = (BinaryObjectExImpl)ex2;
 
-                if (exx1.hasArray())
-                    return exx2.hasArray() ? equalsHeap(exx1, exx2) : 
equalsHeapOffheap(exx1, exx2);
+                if (exx1.hasBytes())
+                    return exx2.hasBytes() ? equalsHeap(exx1, exx2) : 
equalsHeapOffheap(exx1, exx2);
                 else
-                    return exx2.hasArray() ? equalsHeapOffheap(exx2, exx1) : 
equalsOffheap(exx1, exx2);
+                    return exx2.hasBytes() ? equalsHeapOffheap(exx2, exx1) : 
equalsOffheap(exx1, exx2);
             }
             else {
                 // Handle enums.
@@ -142,8 +142,8 @@ class BinaryArrayIdentityResolver extends 
BinaryAbstractIdentityResolver {
      * @return Result.
      */
     private static boolean equalsHeap(BinaryObjectExImpl o1, 
BinaryObjectExImpl o2) {
-        byte[] arr1 = o1.array();
-        byte[] arr2 = o2.array();
+        byte[] arr1 = o1.bytes();
+        byte[] arr2 = o2.bytes();
 
         assert arr1 != null && arr2 != null;
 
@@ -172,7 +172,7 @@ class BinaryArrayIdentityResolver extends 
BinaryAbstractIdentityResolver {
      * @return Result.
      */
     private static boolean equalsHeapOffheap(BinaryObjectExImpl o1, 
BinaryObjectExImpl o2) {
-        byte[] arr1 = o1.array();
+        byte[] arr1 = o1.bytes();
         long ptr2 = o2.offheapAddress();
 
         assert arr1 != null && ptr2 != 0;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
index f0266038c35..c5841e8c7c0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
@@ -769,7 +769,7 @@ class BinaryClassDescriptor {
                     break;
 
                 case OBJECT_ARR:
-                    if (obj instanceof BinaryArray)
+                    if (BinaryUtils.isBinaryArray(obj))
                         writer.writeBinaryArray(((BinaryArray)obj));
                     else
                         writer.writeObjectArray((Object[])obj);
@@ -797,7 +797,7 @@ class BinaryClassDescriptor {
                     break;
 
                 case ENUM_ARR:
-                    if (obj instanceof BinaryArray)
+                    if (BinaryUtils.isBinaryArray(obj))
                         writer.writeBinaryArray(((BinaryArray)obj));
                     else
                         writer.doWriteEnumArray((Object[])obj);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
index 4e137b7c816..80402a42382 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectEx.java
@@ -46,4 +46,25 @@ public interface BinaryObjectEx extends BinaryObject {
      * @return {@code true} if flag is set, {@code false} otherwise.
      */
     public boolean isFlagSet(short flag);
+
+    /**
+     * @return Component class name.
+     */
+    public default String componentClassName() {
+        throw new UnsupportedOperationException("Not array");
+    }
+
+    /**
+     * @return Component type ID.
+     */
+    public default int componentTypeId() {
+        throw new UnsupportedOperationException("Not array");
+    }
+
+    /**
+     * @return Underlying array.
+     */
+    public default Object[] array() {
+        throw new UnsupportedOperationException("Not array");
+    }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java
index efd868293bf..33c1853552c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java
@@ -53,14 +53,14 @@ public abstract class BinaryObjectExImpl implements 
BinaryObjectEx {
     public abstract int start();
 
     /**
-     * @return {@code True} if object is array based.
+     * @return {@code True} if object has bytes array.
      */
-    public abstract boolean hasArray();
+    public abstract boolean hasBytes();
 
     /**
-     * @return Object array if object is array based, otherwise {@code null}.
+     * @return Object array if object has byte array based, otherwise {@code 
null}.
      */
-    public abstract byte[] array();
+    public abstract byte[] bytes();
 
     /**
      * @return Object offheap address is object is offheap based, otherwise 0.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
index 8e5e50ac967..0e9cb65787c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
@@ -341,7 +341,7 @@ public final class BinaryObjectImpl extends 
BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
-    @Override public byte[] array() {
+    @Override public byte[] bytes() {
         return arr;
     }
 
@@ -356,7 +356,7 @@ public final class BinaryObjectImpl extends 
BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
-    @Override public boolean hasArray() {
+    @Override public boolean hasBytes() {
         return true;
     }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
index 3e8eaeeae26..fba0e6d06d2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
@@ -145,7 +145,7 @@ class BinaryObjectOffheapImpl extends BinaryObjectExImpl 
implements Externalizab
     }
 
     /** {@inheritDoc} */
-    @Override public byte[] array() {
+    @Override public byte[] bytes() {
         return null;
     }
 
@@ -176,7 +176,7 @@ class BinaryObjectOffheapImpl extends BinaryObjectExImpl 
implements Externalizab
     }
 
     /** {@inheritDoc} */
-    @Override public boolean hasArray() {
+    @Override public boolean hasBytes() {
         return false;
     }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
index 3f17f5c2066..01f72d4408a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
@@ -1349,7 +1349,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
             case HANDLE:
                 Object arr = readHandleField();
 
-                if (arr instanceof BinaryArray)
+                if (BinaryUtils.isBinaryArray(arr))
                     return ((BinaryArray)arr).deserialize(ldr);
                 else
                     return (Object[])arr;
@@ -1462,7 +1462,7 @@ class BinaryReaderExImpl implements BinaryReaderEx {
             case HANDLE:
                 Object arr = readHandleField();
 
-                if (arr instanceof BinaryArray)
+                if (BinaryUtils.isBinaryArray(arr))
                     return ((BinaryArray)arr).deserialize(ldr);
                 else
                     return (Object[])arr;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java
index 4c2b3da313c..d69094b336d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinarySerializedFieldComparator.java
@@ -246,7 +246,7 @@ class BinarySerializedFieldComparator {
                 Object val1 = c1.currentField();
                 Object val2 = c2.currentField();
 
-                return (F.isArray(val1) || val1 instanceof BinaryArray) ? 
F.arrayEq(val1, val2) : Objects.equals(val1, val2);
+                return (F.isArray(val1) || BinaryUtils.isBinaryArray(val1)) ? 
F.arrayEq(val1, val2) : Objects.equals(val1, val2);
         }
     }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index 053be3e4c72..b9033da21e6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -85,6 +85,7 @@ import org.jetbrains.annotations.Nullable;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2;
+import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_USE_BINARY_ARRAYS;
 import static org.apache.ignite.internal.util.GridUnsafe.align;
 
 /**
@@ -113,6 +114,13 @@ public class BinaryUtils {
     public static final boolean USE_STR_SERIALIZATION_VER_2 = 
IgniteSystemProperties.getBoolean(
         IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2, false);
 
+    /** Default value of {@link 
IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS}. */
+    public static final boolean DFLT_IGNITE_USE_BINARY_ARRAYS = false;
+
+    /** Value of {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS}. */
+    private static boolean USE_BINARY_ARRAYS =
+        IgniteSystemProperties.getBoolean(IGNITE_USE_BINARY_ARRAYS, 
DFLT_IGNITE_USE_BINARY_ARRAYS);
+
     /** Map from class to associated write replacer. */
     public static final Map<Class, BinaryWriteReplacer> CLS_TO_WRITE_REPLACER 
= Map.of(
         TreeMap.class, new BinaryTreeMapWriteReplacer(),
@@ -2032,7 +2040,7 @@ public class BinaryUtils {
                 return doReadTimeArray(in);
 
             case GridBinaryMarshaller.OBJ_ARR:
-                if (BinaryArray.useBinaryArrays() && !deserialize)
+                if (useBinaryArrays() && !deserialize)
                     return doReadBinaryArray(in, ctx, ldr, handles, detach, 
deserialize, false);
                 else
                     return doReadObjectArray(in, ctx, ldr, handles, detach, 
deserialize);
@@ -2051,7 +2059,7 @@ public class BinaryUtils {
                 return doReadBinaryEnum(in, ctx, doReadEnumType(in));
 
             case GridBinaryMarshaller.ENUM_ARR:
-                if (BinaryArray.useBinaryArrays() && !deserialize)
+                if (useBinaryArrays() && !deserialize)
                     return doReadBinaryArray(in, ctx, ldr, handles, detach, 
deserialize, true);
                 else {
                     doReadEnumType(in); // Simply skip this part as we do not 
need it.
@@ -2100,7 +2108,7 @@ public class BinaryUtils {
         for (int i = 0; i < len; i++) {
             Object res = deserializeOrUnmarshal(in, ctx, ldr, handles, detach, 
deserialize);
 
-            if (deserialize && BinaryArray.useBinaryArrays() && res instanceof 
BinaryObject)
+            if (deserialize && useBinaryArrays() && res instanceof 
BinaryObject)
                 arr[i] = ((BinaryObject)res).deserialize(ldr);
             else
                 arr[i] = res;
@@ -2686,9 +2694,9 @@ public class BinaryUtils {
      * @return Objects array.
      */
     public static Object[] rawArrayFromBinary(Object obj) {
-        if (obj instanceof BinaryArray)
+        if (isBinaryArray(obj))
             // We want raw data(no deserialization).
-            return ((BinaryArray)obj).array();
+            return ((BinaryObjectEx)obj).array();
         else
             // This can happen even in BinaryArray.USE_TYPED_ARRAY = true.
             // In case user pass special array type to arguments, String[], 
for example.
@@ -2766,7 +2774,7 @@ public class BinaryUtils {
                 private final long byteArrOffset = 
GridUnsafe.arrayBaseOffset(byte[].class);
 
                 @Override public int applyAsInt(Object bo) {
-                    return (int)align(byteArrOffset + 
((BinaryObjectImpl)bo).array().length);
+                    return (int)align(byteArrOffset + 
((BinaryObjectImpl)bo).bytes().length);
                 }
             },
             BinaryEnumObjectImpl.class, bo -> ((BinaryObject)bo).size()
@@ -2864,6 +2872,29 @@ public class BinaryUtils {
         return BinaryCachingMetadataHandler.create();
     }
 
+    /**
+     * @param val Value to check.
+     * @return {@code True} if {@code val} instance of {@link BinaryArray}.
+     */
+    public static boolean isBinaryArray(Object val) {
+        return val instanceof BinaryArray;
+    }
+
+    /** @return {@code True} if typed arrays should be used, {@code false} 
otherwise. */
+    public static boolean useBinaryArrays() {
+        return USE_BINARY_ARRAYS;
+    }
+
+    /**
+     * Initialize {@link #USE_BINARY_ARRAYS} value with
+     * {@link IgniteSystemProperties#IGNITE_USE_BINARY_ARRAYS} system property 
value.
+     *
+     * This method invoked using reflection in tests.
+     */
+    public static void initUseBinaryArrays() {
+        USE_BINARY_ARRAYS = 
IgniteSystemProperties.getBoolean(IGNITE_USE_BINARY_ARRAYS, 
DFLT_IGNITE_USE_BINARY_ARRAYS);
+    }
+
     /**
      * Enum type.
      */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
index 1936c680f48..bc9fb24143f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
@@ -604,7 +604,7 @@ class BinaryWriterExImpl implements BinaryWriterEx {
         if (po == null)
             out.writeByte(GridBinaryMarshaller.NULL);
         else {
-            byte[] poArr = po.array();
+            byte[] poArr = po.bytes();
 
             out.unsafeEnsure(1 + 4 + poArr.length + 4);
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
index e9e152b01ca..11170bae4cc 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderReader.java
@@ -64,7 +64,7 @@ class BinaryBuilderReader implements BinaryPositionReadable {
      */
     BinaryBuilderReader(BinaryObjectImpl objImpl) {
         ctx = objImpl.context();
-        arr = objImpl.array();
+        arr = objImpl.bytes();
         pos = objImpl.start();
 
         reader = BinaryUtils.reader(ctx,
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
index f5348e76b3f..73df4a8aebb 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryBuilderSerializer.java
@@ -21,8 +21,8 @@ import java.util.Collection;
 import java.util.IdentityHashMap;
 import java.util.Map;
 import org.apache.ignite.binary.BinaryObject;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryEnumObjectImpl;
+import org.apache.ignite.internal.binary.BinaryObjectEx;
 import org.apache.ignite.internal.binary.BinaryObjectExImpl;
 import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.binary.BinaryWriterEx;
@@ -181,7 +181,7 @@ class BinaryBuilderSerializer {
         }
 
         if (BinaryUtils.isBinaryEnumArray(val)) {
-            BinaryArray val0 = (BinaryArray)val;
+            BinaryObjectEx val0 = (BinaryObjectEx)val;
 
             if (val0.componentTypeId() == 
GridBinaryMarshaller.UNREGISTERED_TYPE_ID)
                 writeArray(writer, GridBinaryMarshaller.ENUM_ARR, 
val0.array(), val0.componentClassName());
@@ -191,8 +191,8 @@ class BinaryBuilderSerializer {
             return;
         }
 
-        if (val instanceof BinaryArray) {
-            BinaryArray val0 = (BinaryArray)val;
+        if (BinaryUtils.isBinaryArray(val)) {
+            BinaryObjectEx val0 = (BinaryObjectEx)val;
 
             if (val0.componentTypeId() == 
GridBinaryMarshaller.UNREGISTERED_TYPE_ID)
                 writeArray(writer, GridBinaryMarshaller.OBJ_ARR, val0.array(), 
val0.componentClassName());
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
index 142462abac8..8cc91713a5d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
@@ -30,7 +30,6 @@ import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.binary.BinaryObjectBuilder;
 import org.apache.ignite.binary.BinaryObjectException;
 import org.apache.ignite.binary.BinaryType;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryContext;
 import org.apache.ignite.internal.binary.BinaryEnumObjectImpl;
 import org.apache.ignite.internal.binary.BinaryFieldMetadata;
@@ -384,7 +383,7 @@ class BinaryObjectBuilderImpl implements 
BinaryObjectBuilder {
         else if (BinaryUtils.isBinaryEnumArray(newVal))
             newFldTypeId = GridBinaryMarshaller.ENUM_ARR;
 
-        else if (newVal instanceof BinaryArray)
+        else if (BinaryUtils.isBinaryArray(newVal))
             newFldTypeId = GridBinaryMarshaller.OBJ_ARR;
 
         else
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
index 9930be83d0b..31f782e0a68 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
@@ -585,7 +585,7 @@ public final class ClientUtils {
         if (obj instanceof BinaryObjectImpl) {
             BinaryObjectImpl obj0 = (BinaryObjectImpl)obj;
 
-            return marsh.deserialize(BinaryStreams.inputStream(obj0.array(), 
obj0.start()), hnds);
+            return marsh.deserialize(BinaryStreams.inputStream(obj0.bytes(), 
obj0.start()), hnds);
         }
         else if (obj instanceof BinaryObject)
             return ((BinaryObject)obj).deserialize();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java
index 88eaeaf0916..a08ab1cf40d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java
@@ -21,7 +21,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 import org.apache.ignite.binary.BinaryObject;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.util.MutableSingletonList;
 import org.apache.ignite.internal.util.typedef.F;
@@ -203,9 +202,9 @@ public class CacheObjectUtils {
             return unwrapKnownCollection(ctx, (Collection<Object>)o, 
keepBinary, cpy);
         else if (BinaryUtils.knownMap(o))
             return unwrapBinariesIfNeeded(ctx, (Map<Object, Object>)o, 
keepBinary, cpy);
-        else if (o instanceof Object[] && !BinaryArray.useBinaryArrays())
+        else if (o instanceof Object[] && !BinaryUtils.useBinaryArrays())
             return unwrapBinariesInArrayIfNeeded(ctx, (Object[])o, keepBinary, 
cpy);
-        else if (o instanceof BinaryArray && !keepBinary)
+        else if (BinaryUtils.isBinaryArray(o) && !keepBinary)
             return ((BinaryObject)o).deserialize(ldr);
 
         return o;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
index 027a12389dc..55be4d92641 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
@@ -58,7 +58,6 @@ import 
org.apache.ignite.internal.IgniteInterruptedCheckedException;
 import org.apache.ignite.internal.IgniteNodeAttributes;
 import org.apache.ignite.internal.NodeStoppingException;
 import org.apache.ignite.internal.UnregisteredBinaryTypeException;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryContext;
 import org.apache.ignite.internal.binary.BinaryEnumObjectImpl;
 import org.apache.ignite.internal.binary.BinaryFieldMetadata;
@@ -459,7 +458,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
             for (int i = 0; i < arr.length; i++)
                 pArr[i] = marshalToBinary(arr[i], failIfUnregistered);
 
-            if (!BinaryArray.useBinaryArrays())
+            if (!BinaryUtils.useBinaryArrays())
                 return pArr;
 
             return 
binaryCtx.createBinaryArray(obj.getClass().getComponentType(), pArr);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/service/ClientServiceInvokeRequest.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/service/ClientServiceInvokeRequest.java
index 83b09c4e8e5..3c10a8231fd 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/service/ClientServiceInvokeRequest.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/service/ClientServiceInvokeRequest.java
@@ -28,8 +28,8 @@ import org.apache.ignite.IgniteBinary;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteServices;
 import org.apache.ignite.internal.IgniteServicesImpl;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryReaderEx;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.cluster.ClusterGroupAdapter;
 import org.apache.ignite.internal.processors.platform.PlatformNativeException;
 import 
org.apache.ignite.internal.processors.platform.client.ClientConnectionContext;
@@ -183,7 +183,7 @@ public class ClientServiceInvokeRequest extends 
ClientRequest {
 
                 Method method = resolveMethod(ctx, svcCls);
 
-                if (!BinaryArray.useBinaryArrays())
+                if (!BinaryUtils.useBinaryArrays())
                     PlatformServices.convertArrayArgs(args, method);
 
                 res = proxy.invokeMethod(method, args, callAttrs);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/compute/PlatformCompute.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/compute/PlatformCompute.java
index e7ba512df09..7ab823211bc 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/compute/PlatformCompute.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/compute/PlatformCompute.java
@@ -30,9 +30,9 @@ import org.apache.ignite.cluster.ClusterGroup;
 import org.apache.ignite.compute.ComputeTaskFuture;
 import org.apache.ignite.internal.IgniteComputeHandler;
 import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryObjectImpl;
 import org.apache.ignite.internal.binary.BinaryReaderEx;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.binary.BinaryWriterEx;
 import org.apache.ignite.internal.processors.platform.PlatformAbstractTarget;
 import org.apache.ignite.internal.processors.platform.PlatformContext;
@@ -387,7 +387,7 @@ public class PlatformCompute extends PlatformAbstractTarget 
{
 
         Collection<UUID> nodeIds = readNodeIds(reader);
 
-        if (!keepBinary && (arg instanceof BinaryObjectImpl || arg instanceof 
BinaryArray))
+        if (!keepBinary && (arg instanceof BinaryObjectImpl || 
BinaryUtils.isBinaryArray(arg)))
             arg = ((BinaryObject)arg).deserialize();
 
         if (nodeIds != null)
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/services/PlatformServices.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/services/PlatformServices.java
index f51506b04c0..4b91eb94c86 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/services/PlatformServices.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/services/PlatformServices.java
@@ -29,8 +29,8 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteServices;
 import org.apache.ignite.internal.IgniteServicesImpl;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryReaderEx;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.binary.BinaryWriterEx;
 import org.apache.ignite.internal.processors.platform.PlatformAbstractTarget;
 import org.apache.ignite.internal.processors.platform.PlatformContext;
@@ -638,7 +638,7 @@ public class PlatformServices extends 
PlatformAbstractTarget {
 
                 Method mtd = getMethod(serviceClass, mthdName, args);
 
-                if (!BinaryArray.useBinaryArrays())
+                if (!BinaryUtils.useBinaryArrays())
                     convertArrayArgs(args, mtd);
 
                 return ((GridServiceProxy)proxy).invokeMethod(mtd, args, 
callAttrs);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
index f24850a04bb..bdd8b810e4c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
@@ -32,7 +32,6 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.cache.QueryIndexType;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.CacheObjectContext;
@@ -718,7 +717,7 @@ public class QueryTypeDescriptorImpl implements 
GridQueryTypeDescriptor {
      * @param expColType Type of the column based on Query Property info.
      */
     private boolean isCompatibleWithPropertyType(Object val, Class<?> 
expColType) {
-        if (!(val instanceof BinaryObject) || val instanceof BinaryArray) {
+        if (!(val instanceof BinaryObject) || BinaryUtils.isBinaryArray(val)) {
             if (U.box(expColType).isAssignableFrom(U.box(val.getClass())))
                 return true;
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/ColumnStatisticsCollector.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/ColumnStatisticsCollector.java
index 4967f882e56..7d59c4a1dd7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/ColumnStatisticsCollector.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/ColumnStatisticsCollector.java
@@ -319,7 +319,7 @@ public class ColumnStatisticsCollector {
         else if (cls.isAssignableFrom(String.class))
             buf = ((String)obj).getBytes(StandardCharsets.UTF_8);
         else if (obj instanceof BinaryObjectImpl)
-            buf = ((BinaryObjectImpl)obj).array();
+            buf = ((BinaryObjectImpl)obj).bytes();
         else {
             try {
                 buf = IndexProcessor.serializer.serialize(obj);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
index 2601bce8d3b..80ee4f0d600 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
@@ -44,8 +44,8 @@ import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.GridClosureCallMode;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
 import org.apache.ignite.internal.processors.metric.impl.HistogramMetricImpl;
 import org.apache.ignite.internal.processors.platform.PlatformNativeException;
@@ -344,7 +344,7 @@ public class GridServiceProxy<T> implements Serializable {
     private Object unmarshalResult(byte[] res) throws IgniteCheckedException {
         BinaryMarshaller marsh = ctx.marshaller();
 
-        if (keepBinary && BinaryArray.useBinaryArrays()) {
+        if (keepBinary && BinaryUtils.useBinaryArrays()) {
             // To avoid deserializing of enum types and BinaryArrays.
             return marsh.binaryMarshaller().unmarshal(res, null);
         }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
index 5299d53b0fe..f6fdda25c6b 100755
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
@@ -39,7 +39,7 @@ import java.util.concurrent.ThreadLocalRandom;
 import javax.cache.Cache;
 import org.apache.ignite.cluster.BaselineNode;
 import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.internal.binary.BinaryArray;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.util.F0;
 import org.apache.ignite.internal.util.GridCommonFunc;
 import org.apache.ignite.internal.util.GridConcurrentHashSet;
@@ -2035,7 +2035,7 @@ public class GridFunc extends GridCommonFunc {
             return Arrays.equals((float[])a1, (float[])a2);
         else if (a1 instanceof double[])
             return Arrays.equals((double[])a1, (double[])a2);
-        else if (a1 instanceof BinaryArray)
+        else if (BinaryUtils.isBinaryArray(a1))
             return a1.equals(a2);
 
         return Arrays.deepEquals((Object[])a1, (Object[])a2);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java
 
b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java
index 90d46f88eae..59fe4a22035 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/startup/cmdline/CommandLineStartup.java
@@ -40,7 +40,6 @@ import org.apache.ignite.IgniteState;
 import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.IgnitionListener;
 import org.apache.ignite.SystemProperty;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.processors.cache.GridCacheMapEntry;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.topology.PartitionsEvictManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
@@ -98,8 +97,7 @@ public final class CommandLineStartup {
         CacheContinuousQueryEventBuffer.class,
         CacheContinuousQueryHandler.class,
         OffheapReadWriteLock.class,
-        TcpCommunicationConfiguration.class,
-        BinaryArray.class
+        TcpCommunicationConfiguration.class
     ));
 
     static {
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/AbstractBinaryArraysTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/AbstractBinaryArraysTest.java
index b5f31738886..3c0f74d6fc0 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/AbstractBinaryArraysTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/AbstractBinaryArraysTest.java
@@ -41,7 +41,7 @@ public abstract class AbstractBinaryArraysTest extends 
GridCommonAbstractTest {
     /** {@inheritDoc} */
     @Override protected void beforeTest() throws Exception {
         System.setProperty(IGNITE_USE_BINARY_ARRAYS, 
Boolean.toString(useBinaryArrays));
-        BinaryArray.initUseBinaryArrays();
+        BinaryUtils.initUseBinaryArrays();
 
         super.beforeTest();
     }
@@ -51,6 +51,6 @@ public abstract class AbstractBinaryArraysTest extends 
GridCommonAbstractTest {
         super.afterTest();
 
         System.clearProperty(IGNITE_USE_BINARY_ARRAYS);
-        BinaryArray.initUseBinaryArrays();
+        BinaryUtils.initUseBinaryArrays();
     }
 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolverSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolverSelfTest.java
index 57e47c3f9e3..a0e53442792 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolverSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArrayIdentityResolverSelfTest.java
@@ -246,7 +246,7 @@ public class BinaryArrayIdentityResolverSelfTest extends 
GridCommonAbstractTest
         BinaryObjectExImpl obj0 = (BinaryObjectExImpl)obj;
 
         if (offheap) {
-            byte[] arr = obj0.array();
+            byte[] arr = obj0.bytes();
 
             long ptr = GridUnsafe.allocateMemory(arr.length);
 
@@ -254,7 +254,7 @@ public class BinaryArrayIdentityResolverSelfTest extends 
GridCommonAbstractTest
 
             GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, 
arr.length);
 
-            obj0 = new BinaryObjectOffheapImpl(obj0.context(), ptr, 0, 
obj0.array().length);
+            obj0 = new BinaryObjectOffheapImpl(obj0.context(), ptr, 0, 
obj0.bytes().length);
         }
 
         return obj0;
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArraySelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArraySelfTest.java
index 1d047eeb000..a6e7a05d449 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArraySelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryArraySelfTest.java
@@ -240,7 +240,7 @@ public class BinaryArraySelfTest extends 
AbstractBinaryArraysTest {
         Object[] res0;
 
         if (useBinaryArrays) {
-            assertTrue(res instanceof BinaryArray);
+            assertTrue(BinaryUtils.isBinaryArray(res));
 
             res0 = ((BinaryArray)res).deserialize();
         }
@@ -269,7 +269,7 @@ public class BinaryArraySelfTest extends 
AbstractBinaryArraysTest {
         Object deser;
 
         if (useBinaryArrays) {
-            assertTrue(obj instanceof BinaryArray);
+            assertTrue(BinaryUtils.isBinaryArray(obj));
 
             deser = ((BinaryArray)obj).deserialize();
         }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
index 26b0854a04a..f870bf1bf81 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
@@ -2821,7 +2821,7 @@ public class BinaryMarshallerSelfTest extends 
AbstractBinaryArraysTest {
             BinaryObjectOffheapImpl offheapObj = new 
BinaryObjectOffheapImpl(ctx,
                 ptr,
                 0,
-                obj.array().length);
+                obj.bytes().length);
 
             assertTrue(offheapObj.equals(offheapObj));
             assertEquals(offheapObj.size(), obj.size());
@@ -2835,7 +2835,7 @@ public class BinaryMarshallerSelfTest extends 
AbstractBinaryArraysTest {
             BinaryObjectOffheapImpl offheapObj1 = new 
BinaryObjectOffheapImpl(ctx,
                 ptr1,
                 0,
-                obj.array().length);
+                obj.bytes().length);
 
             assertTrue(offheapObj.equals(offheapObj1));
             assertTrue(offheapObj1.equals(offheapObj));
@@ -2876,7 +2876,7 @@ public class BinaryMarshallerSelfTest extends 
AbstractBinaryArraysTest {
             BinaryObjectOffheapImpl offheapObj2 = new 
BinaryObjectOffheapImpl(ctx,
                 ptr2,
                 0,
-                obj.array().length);
+                obj.bytes().length);
 
             assertFalse(offheapObj.equals(offheapObj2));
             assertFalse(offheapObj2.equals(offheapObj));
@@ -2903,7 +2903,7 @@ public class BinaryMarshallerSelfTest extends 
AbstractBinaryArraysTest {
 
         BinaryObjectImpl binaryObj = marshal(MySingleton.INSTANCE, marsh);
 
-        assertTrue(binaryObj.array().length <= 1024); // Check that big string 
was not serialized.
+        assertTrue(binaryObj.bytes().length <= 1024); // Check that big string 
was not serialized.
 
         MySingleton singleton = binaryObj.deserialize();
 
@@ -3519,9 +3519,9 @@ public class BinaryMarshallerSelfTest extends 
AbstractBinaryArraysTest {
         BinaryObjectImpl binObjRaw0 = marshal(objRaw, m0);
         BinaryObjectImpl binObjRaw1 = marshal(objRaw, m1);
 
-        assertNotEquals(binObj0.array().length, binObj1.array().length);
-        assertNotEquals(binObjWithRaw0.array().length, 
binObjWithRaw1.array().length);
-        assertNotEquals(binObjRaw0.array().length, binObjRaw1.array().length);
+        assertNotEquals(binObj0.bytes().length, binObj1.bytes().length);
+        assertNotEquals(binObjWithRaw0.bytes().length, 
binObjWithRaw1.bytes().length);
+        assertNotEquals(binObjRaw0.bytes().length, binObjRaw1.bytes().length);
 
         checkEquals(binObj0, binObj1);
 
@@ -3649,18 +3649,18 @@ public class BinaryMarshallerSelfTest extends 
AbstractBinaryArraysTest {
         BinaryObjectImpl binObj02 = marshal(obj2, m0);
 
         // The length of array must be equal. Object are different only by the 
class.
-        assertEquals(binObj00.array().length, binObj01.array().length);
-        assertEquals(binObj00.array().length, binObj02.array().length);
+        assertEquals(binObj00.bytes().length, binObj01.bytes().length);
+        assertEquals(binObj00.bytes().length, binObj02.bytes().length);
 
         BinaryObjectImpl binObj10 = marshal(obj0, m1);
         BinaryObjectImpl binObj11 = marshal(obj1, m1);
         BinaryObjectImpl binObj12 = marshal(obj2, m1);
 
         // The length of array must be equal. Object are different only by the 
class.
-        assertEquals(binObj10.array().length, binObj11.array().length);
-        assertEquals(binObj10.array().length, binObj12.array().length);
+        assertEquals(binObj10.bytes().length, binObj11.bytes().length);
+        assertEquals(binObj10.bytes().length, binObj12.bytes().length);
 
-        assertNotEquals(binObj10.array().length, binObj00.array().length);
+        assertNotEquals(binObj10.bytes().length, binObj00.bytes().length);
 
         assertEquals(binObj00, binObj10);
         assertEquals(binObj01, binObj11);
@@ -3759,7 +3759,7 @@ public class BinaryMarshallerSelfTest extends 
AbstractBinaryArraysTest {
         return new BinaryObjectOffheapImpl(binaryContext(marsh),
             ptr,
             0,
-            obj.array().length);
+            obj.bytes().length);
     }
 
     /**
@@ -3980,7 +3980,7 @@ public class BinaryMarshallerSelfTest extends 
AbstractBinaryArraysTest {
      * @return Offheap address.
      */
     private long copyOffheap(BinaryObjectImpl obj) {
-        byte[] arr = obj.array();
+        byte[] arr = obj.bytes();
 
         long ptr = GridUnsafe.allocateMemory(arr.length);
 
@@ -4064,7 +4064,7 @@ public class BinaryMarshallerSelfTest extends 
AbstractBinaryArraysTest {
      * @return Result object.
      */
     private <T> T unmarshal(BinaryObjectImpl bo, BinaryMarshaller marsh) 
throws IgniteCheckedException {
-        return marsh.unmarshal(bo.array(), null);
+        return marsh.unmarshal(bo.bytes(), null);
     }
 
     /**
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java
index 7203c6c6d17..878a9aa41fa 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java
@@ -90,7 +90,7 @@ public class BinaryObjectExceptionSelfTest extends 
GridCommonAbstractTest {
 
         b.deserialize(); // deserialize working
 
-        byte[] a = b.array();
+        byte[] a = b.bytes();
 
         int unexpectedCnt = 0;
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java
index 3591b47db9d..736129dd90e 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinarySerialiedFieldComparatorSelfTest.java
@@ -507,7 +507,7 @@ public class BinarySerialiedFieldComparatorSelfTest extends 
GridCommonAbstractTe
      */
     private BinaryObjectExImpl convert(BinaryObjectExImpl obj, boolean 
offheap) {
         if (offheap) {
-            byte[] arr = obj.array();
+            byte[] arr = obj.bytes();
 
             long ptr = GridUnsafe.allocateMemory(arr.length);
 
@@ -515,7 +515,7 @@ public class BinarySerialiedFieldComparatorSelfTest extends 
GridCommonAbstractTe
 
             GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, 
arr.length);
 
-            obj = new BinaryObjectOffheapImpl(obj.context(), ptr, 0, 
obj.array().length);
+            obj = new BinaryObjectOffheapImpl(obj.context(), ptr, 0, 
obj.bytes().length);
         }
 
         return obj;
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderAdditionalSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderAdditionalSelfTest.java
index 168e466f7cb..dada3c48938 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderAdditionalSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderAdditionalSelfTest.java
@@ -58,9 +58,9 @@ import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.MarshallerPlatformIds;
 import org.apache.ignite.internal.binary.AbstractBinaryArraysTest;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryContext;
 import org.apache.ignite.internal.binary.BinaryMarshallerSelfTest.TestClass1;
+import org.apache.ignite.internal.binary.BinaryObjectEx;
 import org.apache.ignite.internal.binary.BinaryObjectTestUtils;
 import 
org.apache.ignite.internal.binary.mutabletest.GridBinaryMarshalerAwareTestClass;
 import org.apache.ignite.internal.binary.mutabletest.GridBinaryTestClasses;
@@ -1655,7 +1655,7 @@ public class BinaryObjectBuilderAdditionalSelfTest 
extends AbstractBinaryArraysT
         assertEquals(exp, extObj.field("extVal"));
         Assert.assertArrayEquals(
             expArr,
-            useBinaryArrays ? extObj.<BinaryArray>field("extArr").array() : 
extObj.field("extArr")
+            useBinaryArrays ? extObj.<BinaryObjectEx>field("extArr").array() : 
extObj.field("extArr")
         );
 
         builder = extObj.toBuilder();
@@ -1665,7 +1665,7 @@ public class BinaryObjectBuilderAdditionalSelfTest 
extends AbstractBinaryArraysT
         assertEquals(exp, extObj.field("extVal"));
         Assert.assertArrayEquals(
             expArr,
-            useBinaryArrays ? extObj.<BinaryArray>field("extArr").array() : 
extObj.field("extArr")
+            useBinaryArrays ? extObj.<BinaryObjectEx>field("extArr").array() : 
extObj.field("extArr")
         );
         assertEquals(Integer.valueOf(10), extObj.field("intVal"));
 
@@ -1676,7 +1676,7 @@ public class BinaryObjectBuilderAdditionalSelfTest 
extends AbstractBinaryArraysT
         assertEquals(exp, extObj.field("extVal"));
         Assert.assertArrayEquals(
             expArr,
-            useBinaryArrays ? extObj.<BinaryArray>field("extArr").array() : 
extObj.field("extArr")
+            useBinaryArrays ? extObj.<BinaryObjectEx>field("extArr").array() : 
extObj.field("extArr")
         );
         assertEquals(Integer.valueOf(10), extObj.field("intVal"));
         assertEquals("some string", extObj.field("strVal"));
@@ -1790,7 +1790,7 @@ public class BinaryObjectBuilderAdditionalSelfTest 
extends AbstractBinaryArraysT
 
             BiConsumer<TestClass1[], BinaryObject> checker = (arr, bobj) -> {
                 Object[] val = useBinaryArrays
-                    ? bobj.<BinaryArray>field("arr").deserialize()
+                    ? bobj.<BinaryObjectEx>field("arr").deserialize()
                     : PlatformUtils.unwrapBinariesInArray(bobj.field("arr"));
 
                 Assert.assertArrayEquals(arr, val);
@@ -1838,7 +1838,7 @@ public class BinaryObjectBuilderAdditionalSelfTest 
extends AbstractBinaryArraysT
      */
     private TestEnum[] deserializeEnumBinaryArray(Object obj) {
         if (useBinaryArrays)
-            return ((BinaryArray)obj).deserialize();
+            return ((BinaryObject)obj).deserialize();
 
         Object[] arr;
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ServicesTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ServicesTest.java
index 306fd1ca222..14fc4e0c4ad 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ServicesTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ServicesTest.java
@@ -32,7 +32,7 @@ import org.apache.ignite.client.ClientException;
 import org.apache.ignite.client.ClientServiceDescriptor;
 import org.apache.ignite.client.IgniteClient;
 import org.apache.ignite.client.Person;
-import org.apache.ignite.internal.binary.BinaryArray;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.platform.PlatformType;
 import org.apache.ignite.resources.IgniteInstanceResource;
@@ -71,7 +71,7 @@ public class ServicesTest extends AbstractThinClientTest {
         super.beforeTestsStarted();
 
         System.setProperty(IGNITE_USE_BINARY_ARRAYS, 
Boolean.toString(useBinaryArrays));
-        BinaryArray.initUseBinaryArrays();
+        BinaryUtils.initUseBinaryArrays();
 
         startGrids(3);
 
@@ -103,7 +103,7 @@ public class ServicesTest extends AbstractThinClientTest {
         super.afterTestsStopped();
 
         System.clearProperty(IGNITE_USE_BINARY_ARRAYS);
-        BinaryArray.initUseBinaryArrays();
+        BinaryUtils.initUseBinaryArrays();
     }
 
     /**
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/AbstractDataTypesCoverageTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/AbstractDataTypesCoverageTest.java
index 742b01e9ef8..f558b3f0512 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/AbstractDataTypesCoverageTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/AbstractDataTypesCoverageTest.java
@@ -45,7 +45,7 @@ import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicyFactory;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.binary.BinaryArray;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -54,7 +54,7 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_USE_BINARY_ARRAYS;
-import static 
org.apache.ignite.internal.binary.BinaryArray.DFLT_IGNITE_USE_BINARY_ARRAYS;
+import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_IGNITE_USE_BINARY_ARRAYS;
 
 /**
  * Abstract data types coverage  test.
@@ -249,7 +249,7 @@ public abstract class AbstractDataTypesCoverageTest extends 
GridCommonAbstractTe
     /** {@inheritDoc} */
     @Override protected void beforeTest() throws Exception {
         System.setProperty(IGNITE_USE_BINARY_ARRAYS, 
Boolean.toString(useBinaryArrays));
-        BinaryArray.initUseBinaryArrays();
+        BinaryUtils.initUseBinaryArrays();
 
         super.beforeTest();
     }
@@ -259,7 +259,7 @@ public abstract class AbstractDataTypesCoverageTest extends 
GridCommonAbstractTe
         super.afterTest();
 
         System.clearProperty(IGNITE_USE_BINARY_ARRAYS);
-        BinaryArray.initUseBinaryArrays();
+        BinaryUtils.initUseBinaryArrays();
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/core/src/test/java/org/apache/ignite/platform/PlatformDeployServiceTask.java
 
b/modules/core/src/test/java/org/apache/ignite/platform/PlatformDeployServiceTask.java
index 21c14c01cef..2a6b5a525d5 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/platform/PlatformDeployServiceTask.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/platform/PlatformDeployServiceTask.java
@@ -45,7 +45,8 @@ import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.compute.ComputeTaskAdapter;
 import org.apache.ignite.compute.ComputeTaskSplitAdapter;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.binary.BinaryArray;
+import org.apache.ignite.internal.binary.BinaryObjectEx;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.util.lang.IgnitePair;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -451,10 +452,10 @@ public class PlatformDeployServiceTask extends 
ComputeTaskAdapter<Object[], Obje
         public BinaryObject[] testBinaryObjectArray(Object arg0) {
             Object[] arg;
 
-            if (BinaryArray.useBinaryArrays()) {
-                assertTrue(arg0 instanceof BinaryArray);
+            if (BinaryUtils.useBinaryArrays()) {
+                assertTrue(BinaryUtils.isBinaryArray(arg0));
 
-                arg = ((BinaryArray)arg0).array();
+                arg = ((BinaryObjectEx)arg0).array();
             }
             else {
                 assertTrue(arg0 instanceof Object[]);
diff --git 
a/modules/core/src/test/java/org/apache/ignite/platform/PlatformSetUseBinaryArrayTask.java
 
b/modules/core/src/test/java/org/apache/ignite/platform/PlatformSetUseBinaryArrayTask.java
index 15797351b59..a0ce0714097 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/platform/PlatformSetUseBinaryArrayTask.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/platform/PlatformSetUseBinaryArrayTask.java
@@ -27,7 +27,7 @@ import org.apache.ignite.compute.ComputeJob;
 import org.apache.ignite.compute.ComputeJobAdapter;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.internal.binary.BinaryArray;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -63,7 +63,7 @@ public class PlatformSetUseBinaryArrayTask extends 
ComputeTaskAdapter<Boolean, V
         /** {@inheritDoc} */
         @Nullable @Override public Object execute() {
             System.setProperty(IGNITE_USE_BINARY_ARRAYS, 
Boolean.toString(argument(0)));
-            BinaryArray.initUseBinaryArrays();
+            BinaryUtils.initUseBinaryArrays();
 
             return null;
         }
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java
index 88293c5a582..2f66cea08ee 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java
@@ -44,7 +44,6 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.indexing.IndexingQueryEngineConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
-import org.apache.ignite.internal.binary.BinaryArray;
 import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
@@ -760,7 +759,7 @@ public class H2Utils {
                 stmt.setObject(idx, obj, Types.JAVA_OBJECT);
             else if (obj instanceof BigDecimal)
                 stmt.setObject(idx, obj, Types.DECIMAL);
-            else if (obj instanceof BinaryArray)
+            else if (BinaryUtils.isBinaryArray(obj))
                 stmt.setObject(idx, BinaryUtils.rawArrayFromBinary(obj));
             else
                 stmt.setObject(idx, obj);
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java
index 354f15b5cba..44bc49b07be 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/DmlUtils.java
@@ -31,7 +31,7 @@ import java.util.Map;
 import javax.cache.processor.MutableEntry;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.internal.binary.BinaryArray;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.processors.cache.CacheOperationContext;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.QueryCursorImpl;
@@ -109,7 +109,7 @@ public class DmlUtils {
             // We have to convert arrays of reference types manually -
             // see https://issues.apache.org/jira/browse/IGNITE-4327
             // Still, we only can convert from Object[] to something more 
precise.
-            if (type == Value.ARRAY && val instanceof BinaryArray)
+            if (type == Value.ARRAY && BinaryUtils.isBinaryArray(val))
                 return val;
 
             if (type == Value.ARRAY && currCls != expCls) {
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/ArrayIndexTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/ArrayIndexTest.java
index d7aa7af97a9..57ab4f34db9 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/ArrayIndexTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/ArrayIndexTest.java
@@ -36,7 +36,7 @@ import 
org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.binary.BinaryArray;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.processors.query.GridQueryProcessor;
 import org.junit.After;
 import org.junit.Before;
@@ -185,7 +185,7 @@ public class ArrayIndexTest extends 
AbstractIndexingCommonTest {
     /** */
     private void checkTableExpression(boolean useTypedArrays) throws Exception 
{
         System.setProperty(IGNITE_USE_BINARY_ARRAYS, 
Boolean.toString(useTypedArrays));
-        BinaryArray.initUseBinaryArrays();
+        BinaryUtils.initUseBinaryArrays();
 
         try (IgniteEx ex = startGrid(0);
              IgniteEx cli = startClientGrid(1);
@@ -221,7 +221,7 @@ public class ArrayIndexTest extends 
AbstractIndexingCommonTest {
         }
         finally {
             System.clearProperty(IGNITE_USE_BINARY_ARRAYS);
-            BinaryArray.initUseBinaryArrays();
+            BinaryUtils.initUseBinaryArrays();
         }
     }
 
diff --git 
a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java 
b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryArraySerializer.java
similarity index 56%
copy from modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java
copy to 
modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryArraySerializer.java
index b82cbe8ef2b..114e8aab4a6 100644
--- a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java
+++ 
b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryArraySerializer.java
@@ -15,17 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.dump;
+package org.apache.ignite.internal.binary;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
+import java.io.IOException;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
 
 /**
- * Json test suite.
+ * Custom serializer for {@link BinaryArray}.
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
-    JsonDumpConsumerTest.class
-})
-public class IgniteJsonSuite {
+class BinaryArraySerializer extends JsonSerializer<BinaryArray> {
+    /** {@inheritDoc} */
+    @Override public void serialize(BinaryArray val, JsonGenerator gen, 
SerializerProvider serializers) throws IOException {
+        gen.writeStartArray();
+
+        for (Object o : val.array())
+            gen.writeObject(o);
+
+        gen.writeEndArray();
+    }
 }
diff --git 
a/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImplSerializer.java
 
b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImplSerializer.java
new file mode 100644
index 00000000000..20d2d131b18
--- /dev/null
+++ 
b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImplSerializer.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.binary;
+
+import java.io.IOException;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import org.apache.ignite.binary.BinaryObject;
+import org.apache.ignite.binary.BinaryObjectException;
+import org.apache.ignite.binary.BinaryType;
+import 
org.apache.ignite.internal.processors.cache.query.GridCacheSqlIndexMetadata;
+import org.apache.ignite.internal.util.typedef.F;
+
+/**
+ * Custom serializer for {@link GridCacheSqlIndexMetadata}
+ */
+class BinaryObjectImplSerializer extends JsonSerializer<BinaryObjectImpl> {
+    /** {@inheritDoc} */
+    @Override public void serialize(BinaryObjectImpl bin, JsonGenerator gen, 
SerializerProvider ser) throws IOException {
+        try {
+            BinaryType meta = bin.rawType();
+
+            // Serialize to JSON if we have metadata.
+            if (meta != null && !F.isEmpty(meta.fieldNames())) {
+                gen.writeStartObject();
+
+                for (String name : meta.fieldNames()) {
+                    Object val = bin.field(name);
+
+                    if (val instanceof BinaryObjectImpl) {
+                        BinaryObjectImpl ref = (BinaryObjectImpl)val;
+
+                        if (ref.hasCircularReferences()) {
+                            throw ser.mappingException("Failed convert to JSON 
object for circular references");
+                        }
+                    }
+
+                    if (val instanceof BinaryEnumObjectImpl) {
+                        gen.writeObjectField(name, 
((BinaryObject)val).enumName());
+                    }
+                    else {
+                        gen.writeObjectField(name, val);
+                    }
+                }
+
+                gen.writeEndObject();
+            }
+            else {
+                // Otherwise serialize as Java object.
+                Object obj = bin.deserialize();
+
+                gen.writeObject(obj);
+            }
+        }
+        catch (BinaryObjectException ignore) {
+            gen.writeNull();
+        }
+    }
+}
diff --git 
a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java 
b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinarySerializers.java
similarity index 63%
copy from modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java
copy to 
modules/json/src/main/java/org/apache/ignite/internal/binary/BinarySerializers.java
index b82cbe8ef2b..a1a1f671106 100644
--- a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java
+++ 
b/modules/json/src/main/java/org/apache/ignite/internal/binary/BinarySerializers.java
@@ -15,17 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.dump;
+package org.apache.ignite.internal.binary;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
+import com.fasterxml.jackson.databind.module.SimpleModule;
 
 /**
- * Json test suite.
+ * Simple utility class to init binary related serializers.
  */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
-    JsonDumpConsumerTest.class
-})
-public class IgniteJsonSuite {
+public class BinarySerializers {
+    /** Adds binary serializers to module. */
+    public static void init(SimpleModule module) {
+        module.addSerializer(BinaryObjectImpl.class, new 
BinaryObjectImplSerializer());
+        module.addSerializer(BinaryArray.class, new BinaryArraySerializer());
+    }
 }
diff --git 
a/modules/json/src/main/java/org/apache/ignite/internal/jackson/IgniteObjectMapper.java
 
b/modules/json/src/main/java/org/apache/ignite/internal/jackson/IgniteObjectMapper.java
index 804f5159532..07456e2fb20 100644
--- 
a/modules/json/src/main/java/org/apache/ignite/internal/jackson/IgniteObjectMapper.java
+++ 
b/modules/json/src/main/java/org/apache/ignite/internal/jackson/IgniteObjectMapper.java
@@ -42,12 +42,8 @@ import 
com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
 import com.fasterxml.jackson.databind.ser.SerializerFactory;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.binary.BinaryObject;
-import org.apache.ignite.binary.BinaryObjectException;
-import org.apache.ignite.binary.BinaryType;
 import org.apache.ignite.internal.GridKernalContext;
-import org.apache.ignite.internal.binary.BinaryArray;
-import org.apache.ignite.internal.binary.BinaryEnumObjectImpl;
-import org.apache.ignite.internal.binary.BinaryObjectImpl;
+import org.apache.ignite.internal.binary.BinarySerializers;
 import 
org.apache.ignite.internal.processors.cache.query.GridCacheSqlIndexMetadata;
 import org.apache.ignite.internal.processors.cache.query.GridCacheSqlMetadata;
 import org.apache.ignite.internal.util.typedef.F;
@@ -85,8 +81,8 @@ public class IgniteObjectMapper extends ObjectMapper {
         module.addSerializer(IgniteUuid.class, IGNITE_UUID_SERIALIZER);
         module.addSerializer(GridCacheSqlMetadata.class, 
IGNITE_SQL_METADATA_SERIALIZER);
         module.addSerializer(GridCacheSqlIndexMetadata.class, 
IGNITE_SQL_INDEX_METADATA_SERIALIZER);
-        module.addSerializer(BinaryObjectImpl.class, 
IGNITE_BINARY_OBJECT_SERIALIZER);
-        module.addSerializer(BinaryArray.class, 
IGNITE_BINARY_ARRAY_SERIALIZER);
+
+        BinarySerializers.init(module);
 
         // Standard serializer loses nanoseconds.
         module.addSerializer(Timestamp.class, IGNITE_TIMESTAMP_SERIALIZER);
@@ -268,61 +264,6 @@ public class IgniteObjectMapper extends ObjectMapper {
             }
         };
 
-    /** Custom serializer for {@link GridCacheSqlIndexMetadata} */
-    private static final JsonSerializer<BinaryObjectImpl> 
IGNITE_BINARY_OBJECT_SERIALIZER = new JsonSerializer<BinaryObjectImpl>() {
-        /** {@inheritDoc} */
-        @Override public void serialize(BinaryObjectImpl bin, JsonGenerator 
gen, SerializerProvider ser) throws IOException {
-            try {
-                BinaryType meta = bin.rawType();
-
-                // Serialize to JSON if we have metadata.
-                if (meta != null && !F.isEmpty(meta.fieldNames())) {
-                    gen.writeStartObject();
-
-                    for (String name : meta.fieldNames()) {
-                        Object val = bin.field(name);
-
-                        if (val instanceof BinaryObjectImpl) {
-                            BinaryObjectImpl ref = (BinaryObjectImpl)val;
-
-                            if (ref.hasCircularReferences())
-                                throw ser.mappingException("Failed convert to 
JSON object for circular references");
-                        }
-
-                        if (val instanceof BinaryEnumObjectImpl)
-                            gen.writeObjectField(name, 
((BinaryObject)val).enumName());
-                        else
-                            gen.writeObjectField(name, val);
-                    }
-
-                    gen.writeEndObject();
-                }
-                else {
-                    // Otherwise serialize as Java object.
-                    Object obj = bin.deserialize();
-
-                    gen.writeObject(obj);
-                }
-            }
-            catch (BinaryObjectException ignore) {
-                gen.writeNull();
-            }
-        }
-    };
-
-    /** Custom serializer for {@link BinaryArray}. */
-    private static final JsonSerializer<BinaryArray> 
IGNITE_BINARY_ARRAY_SERIALIZER = new JsonSerializer<BinaryArray>() {
-        /** {@inheritDoc} */
-        @Override public void serialize(BinaryArray val, JsonGenerator gen, 
SerializerProvider serializers) throws IOException {
-            gen.writeStartArray();
-
-            for (Object o : val.array())
-                gen.writeObject(o);
-
-            gen.writeEndArray();
-        }
-    };
-
     /** Custom serializer for {@link java.sql.Timestamp}. */
     private static final JsonSerializer<Timestamp> IGNITE_TIMESTAMP_SERIALIZER 
= new JsonSerializer<Timestamp>() {
         /** {@inheritDoc} */
@@ -382,4 +323,5 @@ public class IgniteObjectMapper extends ObjectMapper {
             return false;
         }
     }
+
 }
diff --git 
a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java 
b/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java
index b82cbe8ef2b..1eab144c5a5 100644
--- a/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java
+++ b/modules/json/src/test/java/org/apache/ignite/dump/IgniteJsonSuite.java
@@ -25,7 +25,8 @@ import org.junit.runners.Suite;
  */
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
-    JsonDumpConsumerTest.class
+    JsonDumpConsumerTest.class,
+    JsonArrayTest.class
 })
 public class IgniteJsonSuite {
 }
diff --git 
a/modules/json/src/test/java/org/apache/ignite/dump/JsonArrayTest.java 
b/modules/json/src/test/java/org/apache/ignite/dump/JsonArrayTest.java
new file mode 100644
index 00000000000..ad2cd069698
--- /dev/null
+++ b/modules/json/src/test/java/org/apache/ignite/dump/JsonArrayTest.java
@@ -0,0 +1,192 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.dump;
+
+import java.util.Map;
+import com.fasterxml.jackson.core.type.TypeReference;
+import org.apache.ignite.binary.BinaryObject;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.binary.BinaryUtils;
+import org.apache.ignite.internal.jackson.IgniteObjectMapper;
+import org.apache.ignite.platform.model.Department;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_USE_BINARY_ARRAYS;
+import static 
org.apache.ignite.internal.binary.BinaryUtils.DFLT_IGNITE_USE_BINARY_ARRAYS;
+
+/** */
+@RunWith(Parameterized.class)
+public class JsonArrayTest extends GridCommonAbstractTest {
+    /** */
+    @Parameterized.Parameter
+    public boolean useBinaryArrays;
+
+    /**
+     * @return Test parameters.
+     */
+    @Parameterized.Parameters(name = "useBinaryArrays={0}")
+    public static Object[] parameters() {
+        return new Object[] {true, false};
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        super.beforeTest();
+
+        System.setProperty(IGNITE_USE_BINARY_ARRAYS, useBinaryArrays + "");
+        BinaryUtils.initUseBinaryArrays();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        super.afterTest();
+
+        System.setProperty(IGNITE_USE_BINARY_ARRAYS, 
DFLT_IGNITE_USE_BINARY_ARRAYS + "");
+        BinaryUtils.initUseBinaryArrays();
+    }
+
+    /** */
+    @Test
+    public void testArrayFieldToBinary() throws Exception {
+        try (IgniteEx srv = startGrid(0)) {
+            IgniteObjectMapper mapper = new IgniteObjectMapper(srv.context());
+
+            Strings strs = new Strings();
+
+            strs.setValues(new String[]{"John Connor", "Sarah Connor", "Kyle 
Reese"});
+
+            BinaryObject binary = srv.binary().toBinary(strs);
+
+            String json = mapper.writeValueAsString(binary);
+
+            assertNotNull(json);
+
+            Strings fromJson = mapper.readValue(json, new TypeReference<>() 
{});
+
+            assertNotNull(fromJson);
+            assertEquals(strs.values.length, fromJson.values.length);
+
+            for (int i = 0; i < strs.values.length; i++)
+                assertEquals(strs.values[i], fromJson.values[i]);
+        }
+    }
+
+    /** */
+    @Test
+    public void testCustomClassArrayToBinary() throws Exception {
+        try (IgniteEx srv = startGrid(0)) {
+            IgniteObjectMapper mapper = new IgniteObjectMapper(srv.context());
+
+            User[] raw = new User[]{
+                new User("John Connor", 10.0d, new Department("IT")),
+                new User("Sarah Connor", 20.0d, new Department("SEC")),
+                new User("Kyle Reese", 50.0d, new Department("SEC")),
+            };
+
+            Object binary = srv.binary().toBinary(raw);
+
+            assertEquals(useBinaryArrays, BinaryUtils.isBinaryArray(binary));
+
+            String json = mapper.writeValueAsString(binary);
+
+            assertNotNull(json);
+
+            Object[] fromJson = mapper.readValue(json, new TypeReference<>() 
{});
+
+            assertNotNull(fromJson);
+            assertEquals(raw.length, fromJson.length);
+
+            for (int i = 0; i < raw.length; i++) {
+                User user = raw[i];
+                Map<String, Object> data = (Map<String, Object>)fromJson[i];
+
+                assertEquals(user.name, data.get("name"));
+                assertEquals(user.salary, data.get("salary"));
+                assertEquals(user.dep.getName(), 
((Map)data.get("dep")).get("name"));
+            }
+        }
+    }
+
+    /** */
+    public static class User {
+        /** */
+        private String name;
+
+        /** */
+        private Double salary;
+
+        /** */
+        private Department dep;
+
+        /** */
+        public User(String name, Double salary, Department dep) {
+            this.name = name;
+            this.salary = salary;
+            this.dep = dep;
+        }
+
+        /** */
+        public String getName() {
+            return name;
+        }
+
+        /** */
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        /** */
+        public Double getSalary() {
+            return salary;
+        }
+
+        /** */
+        public void setSalary(Double salary) {
+            this.salary = salary;
+        }
+
+        /** */
+        public Department getDep() {
+            return dep;
+        }
+
+        /** */
+        public void setDep(Department dep) {
+            this.dep = dep;
+        }
+    }
+
+    /** */
+    public static class Strings {
+        /** */
+        public String[] values;
+
+        /** */
+        public String[] getValues() {
+            return values;
+        }
+
+        /** */
+        public void setValues(String[] values) {
+            this.values = values;
+        }
+    }
+}
diff --git a/parent/pom.xml b/parent/pom.xml
index 5f0367c94fb..57e2a80b581 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -930,16 +930,11 @@
                         <version>3.7.0</version>
                         <configuration>
                             <compilerArgs>
-                                <arg>--add-exports</arg>
-                                
<arg>java.base/jdk.internal.misc=ALL-UNNAMED</arg>
-                                <arg>--add-exports</arg>
-                                <arg>java.base/sun.nio.ch=ALL-UNNAMED</arg>
-                                <arg>--add-exports</arg>
-                                
<arg>java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED</arg>
-                                <arg>--add-exports</arg>
-                                
<arg>jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED</arg>
-                                <arg>--add-exports</arg>
-                                <arg>java.base/sun.net.util=ALL-UNNAMED</arg>
+                                
<arg>--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED</arg>
+                                
<arg>--add-exports=java.base/sun.nio.ch=ALL-UNNAMED</arg>
+                                
<arg>--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED</arg>
+                                
<arg>--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED</arg>
+                                
<arg>--add-exports=java.base/sun.net.util=ALL-UNNAMED</arg>
                             </compilerArgs>
                         </configuration>
                     </plugin>


Reply via email to