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 af2741d6a41 IGNITE-28819 [2/N] Thin client extraction (#13322)
af2741d6a41 is described below

commit af2741d6a41c6cf6189b2845ca7e6ff52e9952fc
Author: Nikolay <[email protected]>
AuthorDate: Wed Jul 8 13:17:54 2026 +0300

    IGNITE-28819 [2/N] Thin client extraction (#13322)
---
 .../apache/ignite/internal/binary/BinaryUtils.java | 11 ++++
 .../marshaller/IgniteMarshallerClassFilter.java    |  0
 .../ignite/marshaller/IgniteObjectInputFilter.java |  0
 .../apache/ignite/marshaller/MarshallerUtils.java  | 31 +++---------
 .../ignite/IgniteCommonsSystemProperties.java      | 32 ++++++++++++
 .../org/apache/ignite/cache/CacheEntryVersion.java | 18 +++----
 .../ignite/cache/query/CacheEntryEventAdapter.java |  0
 .../org/apache/ignite/cache/query/IndexQuery.java  |  0
 .../ignite/cache/query/IndexQueryCriterion.java    |  0
 .../org/apache/ignite/cache/query/SqlQuery.java    |  6 +--
 .../java/org/apache/ignite/internal/ClassSet.java  |  0
 .../cache/query/InIndexQueryCriterion.java         |  0
 .../cache/query/RangeIndexQueryCriterion.java      |  0
 .../communication/UnknownMessageException.java     |  0
 .../processors/cache/CacheInvokeResult.java        | 10 +---
 .../processors/cache/version/GridCacheVersion.java |  9 ----
 .../apache/ignite/internal/util/CommonUtils.java   | 58 ++++++++++++++++++++++
 .../ignite/platform/PlatformServiceMethod.java     |  0
 .../plugin/extensions/communication/Message.java   |  0
 ...CommandHandlerCheckIncrementalSnapshotTest.java | 11 ++--
 .../org/apache/ignite/IgniteSystemProperties.java  | 32 ------------
 .../ignite/internal/MarshallerContextImpl.java     | 28 ++++++++++-
 .../internal/client/thin/ReliableChannelImpl.java  |  6 +--
 .../internal/client/thin/TcpIgniteClient.java      |  7 +--
 .../internal/jdbc/thin/JdbcThinConnection.java     |  2 +-
 .../management/tx/FetchNearXidVersionTask.java     |  3 +-
 .../ignite/internal/management/tx/TxTask.java      |  7 +--
 .../internal/processors/cache/GridCacheReturn.java |  5 +-
 .../internal/processors/cache/GridCacheUtils.java  | 23 +++++++++
 .../cache/distributed/dht/GridDhtLockFuture.java   |  5 +-
 .../distributed/dht/atomic/GridDhtAtomicCache.java |  2 +-
 .../cache/transactions/IgniteTxAdapter.java        |  3 +-
 .../internal/processors/query/QueryUtils.java      | 42 +---------------
 .../internal/codegen/MessageProcessorTest.java     |  4 +-
 .../IncrementalSnapshotJoiningClientTest.java      |  3 +-
 .../IncrementalSnapshotRestoreTest.java            |  3 +-
 .../TxPartitionCounterStateAbstractTest.java       | 22 ++++----
 ...rtitionCounterStateOnePrimaryOneBackupTest.java |  3 +-
 38 files changed, 222 insertions(+), 164 deletions(-)

diff --git 
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index bbf64210804..fcbd74fe0c5 100644
--- 
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -79,6 +79,7 @@ import org.apache.ignite.cache.affinity.AffinityKeyMapped;
 import org.apache.ignite.configuration.BinaryConfiguration;
 import org.apache.ignite.internal.binary.streams.BinaryInputStream;
 import org.apache.ignite.internal.binary.streams.BinaryOutputStream;
+import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.MutableSingletonList;
 import org.apache.ignite.internal.util.typedef.F;
@@ -3283,4 +3284,14 @@ public class BinaryUtils {
                 listeners.clear();
         }
     }
+
+    /**
+     * Represents the given cache version as an {@link IgniteUuid}.
+     *
+     * @param ver Cache version.
+     * @return Version represented as {@code IgniteUuid}.
+     */
+    public static IgniteUuid asIgniteUuid(GridCacheVersion ver) {
+        return new IgniteUuid(new UUID(ver.topologyVersion(), 
ver.nodeOrderAndDrIdRaw()), ver.order());
+    }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/marshaller/IgniteMarshallerClassFilter.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/IgniteMarshallerClassFilter.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/marshaller/IgniteMarshallerClassFilter.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/marshaller/IgniteMarshallerClassFilter.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/marshaller/IgniteObjectInputFilter.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/IgniteObjectInputFilter.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/marshaller/IgniteObjectInputFilter.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/marshaller/IgniteObjectInputFilter.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
similarity index 86%
rename from 
modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
index 4d474aa826a..9248181aa07 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
@@ -26,19 +26,16 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.ObjectInputFilter;
 import java.net.URL;
-import java.util.Collection;
 import java.util.Enumeration;
 import java.util.Objects;
 import java.util.function.Consumer;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteCommonsSystemProperties;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.internal.ClassSet;
-import org.apache.ignite.plugin.PluginProvider;
-import org.jetbrains.annotations.Nullable;
 
-import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION;
-import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHALLER_BLACKLIST;
+import static 
org.apache.ignite.IgniteCommonsSystemProperties.IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION;
+import static 
org.apache.ignite.IgniteCommonsSystemProperties.IGNITE_MARSHALLER_BLACKLIST;
 
 /**
  * Utility marshaller methods.
@@ -81,7 +78,7 @@ public class MarshallerUtils {
      * @throws IgniteCheckedException if autoconfiguration failed.
      */
     public static void 
autoconfigureObjectInputFilter(IgniteMarshallerClassFilter clsFilter) throws 
IgniteCheckedException {
-        if 
(!IgniteSystemProperties.getBoolean(IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION,
 true))
+        if 
(!IgniteCommonsSystemProperties.getBoolean(IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION,
 true))
             return;
 
         synchronized (MUX) {
@@ -116,7 +113,7 @@ public class MarshallerUtils {
     private static ClassSet classWhiteList(ClassLoader clsLdr) throws 
IgniteCheckedException {
         ClassSet clsSet = null;
 
-        String fileName = 
IgniteSystemProperties.getString(IgniteSystemProperties.IGNITE_MARSHALLER_WHITELIST);
+        String fileName = 
IgniteCommonsSystemProperties.getString(IgniteCommonsSystemProperties.IGNITE_MARSHALLER_WHITELIST);
 
         if (fileName != null) {
             clsSet = new ClassSet();
@@ -139,7 +136,7 @@ public class MarshallerUtils {
 
         addClassNames(DEFAULT_BLACKLIST_CLS_NAMES_FILE, clsSet, clsLdr);
 
-        String blackListFileName = 
IgniteSystemProperties.getString(IGNITE_MARSHALLER_BLACKLIST);
+        String blackListFileName = 
IgniteCommonsSystemProperties.getString(IGNITE_MARSHALLER_BLACKLIST);
 
         if (blackListFileName != null)
             addClassNames(blackListFileName, clsSet, clsLdr);
@@ -197,11 +194,9 @@ public class MarshallerUtils {
      * Find all system class names (for JDK or Ignite classes) and process 
them with a given consumer.
      *
      * @param ldr Class loader.
-     * @param plugins Plugins.
      * @param proc Class processor (class name consumer).
      */
-    public static void processSystemClasses(ClassLoader ldr, @Nullable 
Collection<PluginProvider> plugins,
-        Consumer<String> proc) throws IOException {
+    public static void processSystemClasses(ClassLoader ldr, Consumer<String> 
proc) throws IOException {
         Enumeration<URL> urls = ldr.getResources(CLS_NAMES_FILE);
 
         boolean foundClsNames = false;
@@ -223,16 +218,6 @@ public class MarshallerUtils {
                 "[file=" + JDK_CLS_NAMES_FILE + ", ldr=" + ldr + ']');
 
         processResource(jdkClsNames, proc);
-
-        if (plugins != null && !plugins.isEmpty()) {
-            for (PluginProvider plugin : plugins) {
-                Enumeration<URL> pluginUrls = ldr.getResources("META-INF/" + 
plugin.name().toLowerCase()
-                    + ".classnames.properties");
-
-                while (pluginUrls.hasMoreElements())
-                    processResource(pluginUrls.nextElement(), proc);
-            }
-        }
     }
 
     /**
@@ -242,7 +227,7 @@ public class MarshallerUtils {
      * @param proc Class processor (class name consumer).
      * @throws IOException In case of error.
      */
-    private static void processResource(URL url, Consumer<String> proc) throws 
IOException {
+    public static void processResource(URL url, Consumer<String> proc) throws 
IOException {
         try (BufferedReader rdr = new BufferedReader(new 
InputStreamReader(url.openStream()))) {
             String line;
 
diff --git 
a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
 
b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
index 6aa8c01e957..d424f23cfe7 100644
--- 
a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
@@ -19,6 +19,7 @@ package org.apache.ignite;
 
 import java.io.Serializable;
 import org.apache.ignite.internal.util.GridLogThrottle;
+import org.apache.ignite.lang.IgniteExperimental;
 import org.jetbrains.annotations.Nullable;
 
 import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
@@ -153,6 +154,37 @@ public class IgniteCommonsSystemProperties {
         "memory block is released. This will help to recognize cases when 
already released memory is accessed")
     public static final String IGNITE_OFFHEAP_SAFE_RELEASE = 
"IGNITE_OFFHEAP_SAFE_RELEASE";
 
+    /** Human-readable ID of a data center where the node is running. */
+    @IgniteExperimental
+    @SystemProperty(value = "Data Center ID where local node is running. Not 
required for a single Data Center deployments",
+        type = String.class)
+    public static final String IGNITE_DATA_CENTER_ID = "IGNITE_DATA_CENTER_ID";
+
+    /** Defines path to the file that contains list of classes allowed to safe 
deserialization.*/
+    @SystemProperty(value = "Path to the file that contains list of classes 
allowed to safe deserialization",
+        type = String.class)
+    public static final String IGNITE_MARSHALLER_WHITELIST = 
"IGNITE_MARSHALLER_WHITELIST";
+
+    /** Defines path to the file that contains list of classes disallowed to 
safe deserialization.*/
+    @SystemProperty(value = "Path to the file that contains list of classes 
disallowed to safe deserialization",
+        type = String.class)
+    public static final String IGNITE_MARSHALLER_BLACKLIST = 
"IGNITE_MARSHALLER_BLACKLIST";
+
+    /**
+     * If this parameter is set to true, Ignite will automatically configure 
an ObjectInputFilter instance for the
+     * current JVM it is running in.
+     * Default value is {@code true}.
+     */
+    @SystemProperty(
+        value = "If this parameter is set to true, Ignite will automatically 
configure an ObjectInputFilter" +
+            " instance for the current JVM it is running in. Filtering is 
based on class lists defined by the" +
+            " `IGNITE_MARSHALLER_WHITELIST` and `IGNITE_MARSHALLER_BLACKLIST` 
system properties or their default values." +
+            " Disabling it is not recommended because the Ignite host may be 
vulnerable to RCE attacks based on Java" +
+            " serialization mechanisms",
+        defaults = "true"
+    )
+    public static final String 
IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION = 
"IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION";
+
     /**
      * @param enumCls Enum type.
      * @param name Name of the system property or environment variable.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java 
b/modules/commons/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
similarity index 74%
rename from 
modules/core/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
rename to 
modules/commons/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
index 0953740f957..71046d1239c 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
@@ -18,18 +18,15 @@
 package org.apache.ignite.cache;
 
 import java.io.Serializable;
-import java.util.Map;
-import 
org.apache.ignite.internal.processors.cache.CacheConflictResolutionManager;
-import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
-import 
org.apache.ignite.internal.processors.cache.version.GridCacheVersionManager;
 
 /**
  * Entry event order.
  * Two concurrent updates of the same entry can be ordered based on {@link 
CacheEntryVersion} comparsion.
  * Greater value means that event occurs later.
  *
- * @see CacheConflictResolutionManager
- * @see GridCacheVersionManager#dataCenterId(byte)
+ *
+ * {@ignitelink 
org.apache.ignite.internal.processors.cache.CacheConflictResolutionManager}
+ * {@ignitelink 
org.apache.ignite.internal.processors.cache.version.GridCacheVersionManager#dataCenterId(byte)}
  */
 public interface CacheEntryVersion extends Comparable<CacheEntryVersion>, 
Serializable {
     /**
@@ -44,7 +41,7 @@ public interface CacheEntryVersion extends 
Comparable<CacheEntryVersion>, Serial
     /**
      * Cluster id is a value to distinguish updates in case user wants to 
aggregate and sort updates from several
      * Ignite clusters. {@code clusterId} id can be set for the node using
-     * {@link GridCacheVersionManager#dataCenterId(byte)}.
+     * {@ignitelink 
org.apache.ignite.internal.processors.cache.version.GridCacheVersionManager#dataCenterId(byte)}
      *
      * @return Cluster id.
      */
@@ -55,11 +52,12 @@ public interface CacheEntryVersion extends 
Comparable<CacheEntryVersion>, Serial
 
     /**
      * If source of the update is "local" cluster then {@code null} will be 
returned.
-     * If updated comes from the other cluster using {@link 
IgniteInternalCache#putAllConflict(Map)}
+     * If updated comes from the other cluster using
+     * {@ignitelink 
org.apache.ignite.internal.processors.cache.IgniteInternalCache#putAllConflict(Map)}
      * then entry version for other cluster.
      * @return Replication version.
-     * @see IgniteInternalCache#putAllConflict(Map)
-     * @see IgniteInternalCache#removeAllConflict(Map)
+     * {@ignitelink 
org.apache.ignite.internal.processors.cache.IgniteInternalCache#putAllConflict(Map)}
+     * {@ignitelink 
org.apache.ignite.internal.processors.cache.IgniteInternalCache#removeAllConflict(Map)}
      */
     public CacheEntryVersion otherClusterVersion();
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/query/CacheEntryEventAdapter.java
 
b/modules/commons/src/main/java/org/apache/ignite/cache/query/CacheEntryEventAdapter.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/cache/query/CacheEntryEventAdapter.java
rename to 
modules/commons/src/main/java/org/apache/ignite/cache/query/CacheEntryEventAdapter.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/query/IndexQuery.java 
b/modules/commons/src/main/java/org/apache/ignite/cache/query/IndexQuery.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/cache/query/IndexQuery.java
rename to 
modules/commons/src/main/java/org/apache/ignite/cache/query/IndexQuery.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/query/IndexQueryCriterion.java
 
b/modules/commons/src/main/java/org/apache/ignite/cache/query/IndexQueryCriterion.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/cache/query/IndexQueryCriterion.java
rename to 
modules/commons/src/main/java/org/apache/ignite/cache/query/IndexQueryCriterion.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/query/SqlQuery.java 
b/modules/commons/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
similarity index 97%
rename from 
modules/core/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
rename to 
modules/commons/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
index 64864b35104..b7be00fc6b7 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
+++ b/modules/commons/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
@@ -19,8 +19,6 @@ package org.apache.ignite.cache.query;
 
 import java.util.concurrent.TimeUnit;
 import javax.cache.Cache;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.internal.processors.query.QueryUtils;
 import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.internal.A;
@@ -30,7 +28,7 @@ import org.jetbrains.annotations.Nullable;
 /**
  * SQL Query.
  *
- * @see IgniteCache#query(Query)
+ * {@ignitelink org.apache.ignite.IgniteCache#query(Query)}
  *
  * @deprecated Since 2.8, please use {@link SqlFieldsQuery} instead.
  */
@@ -209,7 +207,7 @@ public final class SqlQuery<K, V> extends 
Query<Cache.Entry<K, V>> {
      * @return {@code this} For chaining.
      */
     public SqlQuery<K, V> setType(Class<?> type) {
-        return setType(QueryUtils.typeName(type));
+        return setType(CommonUtils.typeName(type));
     }
 
     /**
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/ClassSet.java 
b/modules/commons/src/main/java/org/apache/ignite/internal/ClassSet.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/ClassSet.java
rename to modules/commons/src/main/java/org/apache/ignite/internal/ClassSet.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/InIndexQueryCriterion.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/cache/query/InIndexQueryCriterion.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/cache/query/InIndexQueryCriterion.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/cache/query/InIndexQueryCriterion.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/RangeIndexQueryCriterion.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/cache/query/RangeIndexQueryCriterion.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/cache/query/RangeIndexQueryCriterion.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/cache/query/RangeIndexQueryCriterion.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/UnknownMessageException.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/managers/communication/UnknownMessageException.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/managers/communication/UnknownMessageException.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/managers/communication/UnknownMessageException.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
similarity index 88%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
index 23605aabe2f..b868064804c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
@@ -25,9 +25,6 @@ import javax.cache.processor.EntryProcessor;
 import javax.cache.processor.EntryProcessorException;
 import javax.cache.processor.EntryProcessorResult;
 import javax.cache.processor.MutableEntry;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.UnregisteredBinaryTypeException;
-import org.apache.ignite.internal.UnregisteredClassException;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 
@@ -99,11 +96,8 @@ public class CacheInvokeResult<T> implements 
EntryProcessorResult<T>, Externaliz
     /** {@inheritDoc} */
     @Override public T get() throws EntryProcessorException {
         if (err != null) {
-            if (err instanceof UnregisteredClassException || err instanceof 
UnregisteredBinaryTypeException)
-                throw (IgniteException)err;
-
-            if (err instanceof EntryProcessorException)
-                throw (EntryProcessorException)err;
+            if (err instanceof RuntimeException)
+                throw (RuntimeException)err;
 
             throw new EntryProcessorException(err);
         }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
similarity index 96%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
index e85a97ba55d..ed2a945685b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
@@ -21,9 +21,7 @@ import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import java.util.UUID;
 import org.apache.ignite.cache.CacheEntryVersion;
-import org.apache.ignite.lang.IgniteUuid;
 
 /**
  * Grid unique version.
@@ -183,13 +181,6 @@ public class GridCacheVersion implements Externalizable, 
CacheEntryVersion {
         return compareTo(ver) < 0;
     }
 
-    /**
-     * @return Version represented as {@code IgniteUuid}
-     */
-    public IgniteUuid asIgniteUuid() {
-        return new IgniteUuid(new UUID(topVer, nodeOrderDrId), order);
-    }
-
     /** {@inheritDoc} */
     @Override public void writeExternal(ObjectOutput out) throws IOException {
         out.writeInt(topVer);
diff --git 
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
index c821bfb1d62..3cda23f41ea 100644
--- 
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
@@ -2534,4 +2534,62 @@ public abstract class CommonUtils {
             ? (IgniteCheckedException)t
             : new IgniteCheckedException(t);
     }
+
+    /**
+     * Gets type name by class name.
+     *
+     * @param clsName Class name.
+     * @return Type name.
+     */
+    public static String typeName(String clsName) {
+        int genericStart = clsName.indexOf('`');  // .NET generic, not valid 
for Java class name.
+
+        if (genericStart >= 0)
+            clsName = clsName.substring(0, genericStart);
+
+        int pkgEnd = clsName.lastIndexOf('.');
+
+        if (pkgEnd >= 0 && pkgEnd < clsName.length() - 1)
+            clsName = clsName.substring(pkgEnd + 1);
+
+        if (clsName.endsWith("[]"))
+            clsName = clsName.substring(0, clsName.length() - 2) + "_array";
+
+        int parentEnd = clsName.lastIndexOf('$');
+
+        if (parentEnd >= 0)
+            clsName = clsName.substring(parentEnd + 1);
+
+        parentEnd = clsName.lastIndexOf('+');   // .NET parent
+
+        if (parentEnd >= 0)
+            clsName = clsName.substring(parentEnd + 1);
+
+        return clsName;
+    }
+
+    /**
+     * Gets type name by class.
+     *
+     * @param cls Class.
+     * @return Type name.
+     */
+    public static String typeName(Class<?> cls) {
+        String typeName = cls.getSimpleName();
+
+        // To protect from failure on anonymous classes.
+        if (typeName.isEmpty()) {
+            String pkg = cls.getPackage().getName();
+
+            typeName = cls.getName().substring(pkg.length() + (pkg.isEmpty() ? 
0 : 1));
+        }
+
+        if (cls.isArray()) {
+            assert typeName.endsWith("[]");
+
+            typeName = typeName.substring(0, typeName.length() - 2) + "_array";
+        }
+
+        return typeName;
+    }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/platform/PlatformServiceMethod.java
 
b/modules/commons/src/main/java/org/apache/ignite/platform/PlatformServiceMethod.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/platform/PlatformServiceMethod.java
rename to 
modules/commons/src/main/java/org/apache/ignite/platform/PlatformServiceMethod.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/Message.java
 
b/modules/commons/src/main/java/org/apache/ignite/plugin/extensions/communication/Message.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/Message.java
rename to 
modules/commons/src/main/java/org/apache/ignite/plugin/extensions/communication/Message.java
diff --git 
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerCheckIncrementalSnapshotTest.java
 
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerCheckIncrementalSnapshotTest.java
index 21fe7d40913..766d312dbcd 100644
--- 
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerCheckIncrementalSnapshotTest.java
+++ 
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerCheckIncrementalSnapshotTest.java
@@ -29,6 +29,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.management.cache.IdleVerifyResult;
 import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager;
 import org.apache.ignite.internal.pagemem.wal.record.DataRecord;
@@ -223,7 +224,7 @@ public class GridCommandHandlerCheckIncrementalSnapshotTest 
extends GridCommandH
         load(xid -> {
             if (skipTxRec == null) {
                 skipTxRec = (consId, rec) ->
-                    grid(0).localNode().consistentId().equals(consId) && 
xid.equals(rec.nearXidVersion().asIgniteUuid());
+                    grid(0).localNode().consistentId().equals(consId) && 
xid.equals(BinaryUtils.asIgniteUuid(rec.nearXidVersion()));
             }
         });
 
@@ -248,7 +249,7 @@ public class GridCommandHandlerCheckIncrementalSnapshotTest 
extends GridCommandH
         load(xid -> {
             if (skipTxRec == null) {
                 skipTxRec = (consId, rec) ->
-                    grid(0).localNode().consistentId().equals(consId) && 
xid.equals(rec.nearXidVersion().asIgniteUuid());
+                    grid(0).localNode().consistentId().equals(consId) && 
xid.equals(BinaryUtils.asIgniteUuid(rec.nearXidVersion()));
             }
         });
 
@@ -308,7 +309,7 @@ public class GridCommandHandlerCheckIncrementalSnapshotTest 
extends GridCommandH
             if (skipDataRec == null) {
                 skipDataRec = (consId, rec) ->
                     grid(0).localNode().consistentId().equals(consId)
-                        && 
xid.equals(rec.writeEntries().get(0).nearXidVersion().asIgniteUuid());
+                        && 
xid.equals(BinaryUtils.asIgniteUuid(rec.writeEntries().get(0).nearXidVersion()));
             }
         });
 
@@ -325,14 +326,14 @@ public class 
GridCommandHandlerCheckIncrementalSnapshotTest extends GridCommandH
             if (skipDataRec == null) {
                 skipDataRec = (consId, rec) ->
                     grid(0).localNode().consistentId().equals(consId)
-                        && 
xid.equals(rec.writeEntries().get(0).nearXidVersion().asIgniteUuid());
+                        && 
xid.equals(BinaryUtils.asIgniteUuid(rec.writeEntries().get(0).nearXidVersion()));
 
                 return;
             }
 
             if (skipTxRec == null) {
                 skipTxRec = (consId, rec) ->
-                    grid(0).localNode().consistentId().equals(consId) && 
xid.equals(rec.nearXidVersion().asIgniteUuid());
+                    grid(0).localNode().consistentId().equals(consId) && 
xid.equals(BinaryUtils.asIgniteUuid(rec.nearXidVersion()));
             }
         });
 
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 b1c36a90158..18b3e0f86fb 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -41,7 +41,6 @@ import 
org.apache.ignite.internal.processors.performancestatistics.FilePerforman
 import 
org.apache.ignite.internal.processors.query.schema.SchemaIndexCachePartitionWorker;
 import org.apache.ignite.internal.processors.rest.GridRestCommand;
 import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.lang.IgniteExperimental;
 import org.apache.ignite.mxbean.MetricsMxBean;
 import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
 import org.apache.ignite.spi.metric.ReadOnlyMetricRegistry;
@@ -744,12 +743,6 @@ public final class IgniteSystemProperties extends 
IgniteCommonsSystemProperties
         defaults = "" + DFLT_DISCOVERY_HISTORY_SIZE)
     public static final String IGNITE_DISCOVERY_HISTORY_SIZE = 
"IGNITE_DISCOVERY_HISTORY_SIZE";
 
-    /** Human-readable ID of a data center where the node is running. */
-    @IgniteExperimental
-    @SystemProperty(value = "Data Center ID where local node is running. Not 
required for a single Data Center deployments",
-        type = String.class)
-    public static final String IGNITE_DATA_CENTER_ID = "IGNITE_DATA_CENTER_ID";
-
     /** Maximum number of discovery message history used to support client 
reconnect. */
     @SystemProperty(value = "Maximum number of discovery message history used 
to support client reconnect",
         type = Integer.class, defaults = "" + 
DFLT_DISCOVERY_CLIENT_RECONNECT_HISTORY_SIZE)
@@ -814,31 +807,6 @@ public final class IgniteSystemProperties extends 
IgniteCommonsSystemProperties
     @SystemProperty("Enables local store keeps primary only. Backward 
compatibility flag")
     public static final String IGNITE_LOCAL_STORE_KEEPS_PRIMARY_ONLY = 
"IGNITE_LOCAL_STORE_KEEPS_PRIMARY_ONLY";
 
-    /** Defines path to the file that contains list of classes allowed to safe 
deserialization.*/
-    @SystemProperty(value = "Path to the file that contains list of classes 
allowed to safe deserialization",
-        type = String.class)
-    public static final String IGNITE_MARSHALLER_WHITELIST = 
"IGNITE_MARSHALLER_WHITELIST";
-
-    /** Defines path to the file that contains list of classes disallowed to 
safe deserialization.*/
-    @SystemProperty(value = "Path to the file that contains list of classes 
disallowed to safe deserialization",
-        type = String.class)
-    public static final String IGNITE_MARSHALLER_BLACKLIST = 
"IGNITE_MARSHALLER_BLACKLIST";
-
-    /**
-     * If this parameter is set to true, Ignite will automatically configure 
an ObjectInputFilter instance for the
-     * current JVM it is running in.
-     * Default value is {@code true}.
-     */
-    @SystemProperty(
-        value = "If this parameter is set to true, Ignite will automatically 
configure an ObjectInputFilter" +
-            " instance for the current JVM it is running in. Filtering is 
based on class lists defined by the" +
-            " `IGNITE_MARSHALLER_WHITELIST` and `IGNITE_MARSHALLER_BLACKLIST` 
system properties or their default values." +
-            " Disabling it is not recommended because the Ignite host may be 
vulnerable to RCE attacks based on Java" +
-            " serialization mechanisms",
-        defaults = "true"
-    )
-    public static final String 
IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION = 
"IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION";
-
     /**
      * If set to {@code true}, then default selected keys set is used inside
      * {@code GridNioServer} which lead to some extra garbage generation when
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
index fda923e3596..2521be22a8e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
@@ -19,10 +19,12 @@ package org.apache.ignite.internal;
 
 import java.io.File;
 import java.io.IOException;
+import java.net.URL;
 import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -34,6 +36,7 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.function.BiPredicate;
+import java.util.function.Consumer;
 import java.util.function.Function;
 import javax.management.MBeanServer;
 import org.apache.ignite.IgniteCheckedException;
@@ -125,7 +128,7 @@ public class MarshallerContextImpl implements 
MarshallerContext {
         try {
             ClassLoader ldr = U.gridClassLoader();
 
-            MarshallerUtils.processSystemClasses(ldr, plugins, clsName -> {
+            processSystemClasses(ldr, plugins, clsName -> {
                 int typeId = clsName.hashCode();
 
                 MappedName oldClsName;
@@ -709,6 +712,29 @@ public class MarshallerContextImpl implements 
MarshallerContext {
         this.marshallerMappingFileStoreDir = marshallerMappingFileStoreDir;
     }
 
+    /**
+     * Finds all system class names (JDK, Ignite and plugin classes) and 
processes them with the given consumer.
+     *
+     * @param ldr Class loader.
+     * @param plugins Plugins (may be {@code null}).
+     * @param proc Class processor (class name consumer).
+     * @throws IOException In case of error.
+     */
+    private static void processSystemClasses(ClassLoader ldr, @Nullable 
Collection<PluginProvider> plugins,
+                                             Consumer<String> proc) throws 
IOException {
+        MarshallerUtils.processSystemClasses(ldr, proc);
+
+        if (plugins != null && !plugins.isEmpty()) {
+            for (PluginProvider plugin : plugins) {
+                Enumeration<URL> pluginUrls = ldr.getResources("META-INF/" + 
plugin.name().toLowerCase()
+                    + ".classnames.properties");
+
+                while (pluginUrls.hasMoreElements())
+                    MarshallerUtils.processResource(pluginUrls.nextElement(), 
proc);
+            }
+        }
+    }
+
     /**
      *
      */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ReliableChannelImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ReliableChannelImpl.java
index 931a9dfb772..b29bb69629f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ReliableChannelImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ReliableChannelImpl.java
@@ -39,8 +39,8 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.ignite.IgniteBinary;
+import org.apache.ignite.IgniteCommonsSystemProperties;
 import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.client.ClientAuthenticationException;
 import org.apache.ignite.client.ClientConnectionException;
 import org.apache.ignite.client.ClientException;
@@ -141,10 +141,10 @@ final class ReliableChannelImpl implements 
ReliableChannelEx {
 
         partitionAwarenessEnabled = clientCfg.isPartitionAwarenessEnabled();
 
-        String dcId = 
IgniteSystemProperties.getString(IgniteSystemProperties.IGNITE_DATA_CENTER_ID);
+        String dcId = 
IgniteCommonsSystemProperties.getString(IgniteCommonsSystemProperties.IGNITE_DATA_CENTER_ID);
 
         if (dcId == null && !F.isEmpty(clientCfg.getUserAttributes()))
-            dcId = 
clientCfg.getUserAttributes().get(IgniteSystemProperties.IGNITE_DATA_CENTER_ID);
+            dcId = 
clientCfg.getUserAttributes().get(IgniteCommonsSystemProperties.IGNITE_DATA_CENTER_ID);
 
         affinityCtx = new ClientCacheAffinityContext(
             binary,
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
index b21eca85781..3aca5f9fde6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
@@ -71,9 +71,9 @@ import 
org.apache.ignite.internal.client.thin.TcpClientTransactions.TcpClientTra
 import org.apache.ignite.internal.client.thin.io.ClientConnectionMultiplexer;
 import org.apache.ignite.internal.processors.platform.client.ClientStatus;
 import 
org.apache.ignite.internal.processors.platform.client.IgniteClientException;
+import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridArgumentCheck;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.logger.NullLogger;
 import org.apache.ignite.marshaller.MarshallerContext;
@@ -792,7 +792,7 @@ public class TcpIgniteClient implements IgniteClient {
          */
         public ClientMarshallerContext() {
             try {
-                MarshallerUtils.processSystemClasses(U.gridClassLoader(), 
null, sysTypes::add);
+                
MarshallerUtils.processSystemClasses(CommonUtils.gridClassLoader(), 
sysTypes::add);
             }
             catch (IOException e) {
                 throw new IllegalStateException("Failed to initialize 
marshaller context.", e);
@@ -858,7 +858,8 @@ public class TcpIgniteClient implements IgniteClient {
         @Override public Class getClass(int typeId, ClassLoader ldr)
             throws ClassNotFoundException, IgniteCheckedException {
 
-            return U.forName(getClassName(MarshallerPlatformIds.JAVA_ID, 
typeId), ldr, null);
+            return 
CommonUtils.forName(getClassName(MarshallerPlatformIds.JAVA_ID, typeId), ldr, 
null,
+                Marshallers.USE_CACHE.get());
         }
 
         /** {@inheritDoc} */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
index 619057cd6ce..64e1fb2f45c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
@@ -2427,7 +2427,7 @@ public class JdbcThinConnection implements Connection {
          */
         public JdbcMarshallerContext() {
             try {
-                processSystemClasses(U.gridClassLoader(), null, sysTypes::add);
+                processSystemClasses(U.gridClassLoader(), sysTypes::add);
             }
             catch (IOException e) {
                 throw new IgniteException("Unable to initialize marshaller 
context", e);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/FetchNearXidVersionTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/FetchNearXidVersionTask.java
index 519dd55a756..7845fbf8998 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/FetchNearXidVersionTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/FetchNearXidVersionTask.java
@@ -23,6 +23,7 @@ import java.util.stream.Collectors;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.compute.ComputeJobResult;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import 
org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx;
 import 
org.apache.ignite.internal.processors.cache.transactions.IgniteTxManager;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
@@ -78,7 +79,7 @@ public class FetchNearXidVersionTask extends 
VisorMultiNodeTask<TxInfoCommandArg
 
             for (IgniteInternalTx tx : transactions) {
                 if (tx.xid().equals(arg.uuid()) ||
-                    tx.nearXidVersion().asIgniteUuid().equals(arg.uuid()) ||
+                    
BinaryUtils.asIgniteUuid(tx.nearXidVersion()).equals(arg.uuid()) ||
                     tx.xidVersion().equals(arg.gridCacheVersion()) ||
                     tx.nearXidVersion().equals(arg.gridCacheVersion()))
                     return tx.nearXidVersion();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxTask.java
index ffd7a6a31ab..4e07c6525f0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxTask.java
@@ -38,6 +38,7 @@ import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.management.tx.TxCommand.AbstractTxCommandArg;
 import org.apache.ignite.internal.managers.discovery.DiscoCache;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
@@ -351,7 +352,7 @@ public class TxTask
 
                 infos.add(new TxInfo(locTx.xid(), locTx.startTime(), duration, 
locTx.isolation(),
                     locTx.concurrency(), locTx.timeout(), lb, mappings, 
locTx.state(), size,
-                    locTx.nearXidVersion().asIgniteUuid(), 
locTx.masterNodeIds(), locTx.topologyVersionSnapshot(),
+                    BinaryUtils.asIgniteUuid(locTx.nearXidVersion()), 
locTx.masterNodeIds(), locTx.topologyVersionSnapshot(),
                     verboseInfo));
 
                 if (arg.kill())
@@ -367,9 +368,9 @@ public class TxTask
 
                 if (completed != null) {
                     if (Boolean.TRUE.equals(completed))
-                        infos.add(new 
TxInfo(infoArg.gridCacheVersion().asIgniteUuid(), COMMITTED));
+                        infos.add(new 
TxInfo(BinaryUtils.asIgniteUuid(infoArg.gridCacheVersion()), COMMITTED));
                     else if (Boolean.FALSE.equals(completed))
-                        infos.add(new 
TxInfo(infoArg.gridCacheVersion().asIgniteUuid(), ROLLED_BACK));
+                        infos.add(new 
TxInfo(BinaryUtils.asIgniteUuid(infoArg.gridCacheVersion()), ROLLED_BACK));
                 }
             }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
index 7c78a10a5cf..b18f4ddef15 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
@@ -259,7 +259,8 @@ public class GridCacheReturn implements Message {
                     throw (UnregisteredBinaryTypeException)err;
             }
 
-            CacheInvokeResult res0 = err == null ? 
CacheInvokeResult.fromResult(res) : CacheInvokeResult.fromError(err);
+            CacheInvokeResult res0 = err == null ? 
CacheInvokeResult.fromResult(res)
+                : 
CacheInvokeResult.fromError(CU.prepareEntryProcessorError(err));
 
             Object resKey = key0 != null ? key0 :
                 ((keepBinary && key instanceof BinaryObject) ? key : 
CU.value(key, cctx, true));
@@ -367,7 +368,7 @@ public class GridCacheReturn implements Message {
             for (CacheInvokeDirectResult res : invokeResCol) {
                 CacheInvokeResult<?> res0 = res.error() == null ?
                     
CacheInvokeResult.fromResult(ctx.cacheObjectContext().unwrapBinaryIfNeeded(res.result(),
 true, false, null)) :
-                    CacheInvokeResult.fromError(res.error());
+                    
CacheInvokeResult.fromError(CU.prepareEntryProcessorError(res.error()));
 
                 
map0.put(ctx.cacheObjectContext().unwrapBinaryIfNeeded(res.key(), true, false, 
null), res0);
             }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index c9c47475f4d..7f0b4d36bd1 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -41,6 +41,7 @@ import javax.cache.expiry.ExpiryPolicy;
 import javax.cache.integration.CacheLoader;
 import javax.cache.integration.CacheWriter;
 import javax.cache.integration.CacheWriterException;
+import javax.cache.processor.EntryProcessorException;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteCheckedException;
@@ -65,6 +66,8 @@ import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.IgniteClientDisconnectedCheckedException;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.IgniteNodeAttributes;
+import org.apache.ignite.internal.UnregisteredBinaryTypeException;
+import org.apache.ignite.internal.UnregisteredClassException;
 import org.apache.ignite.internal.cluster.ClusterGroupEmptyCheckedException;
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
 import 
org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException;
@@ -2214,6 +2217,26 @@ public class GridCacheUtils {
         return affFields;
     }
 
+    /**
+     * Prepares an entry processor error so it can be stored in a {@link 
CacheInvokeResult} and rethrown
+     * as-is by {@link CacheInvokeResult#get()}: an {@link 
UnregisteredClassException} or
+     * {@link UnregisteredBinaryTypeException} (which must propagate 
unwrapped) and an existing
+     * {@link EntryProcessorException} are returned unchanged; any other error 
is wrapped in an
+     * {@link EntryProcessorException}.
+     *
+     * @param err Error thrown by the entry processor.
+     * @return Prepared error to store in the cache invoke result.
+     */
+    public static Throwable prepareEntryProcessorError(Throwable err) {
+        if (err instanceof UnregisteredClassException || err instanceof 
UnregisteredBinaryTypeException)
+            return err;
+
+        if (err instanceof EntryProcessorException)
+            return err;
+
+        return new EntryProcessorException(err);
+    }
+
     /**
      *
      */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
index 0f2e50892fb..10d87957edb 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
@@ -34,6 +34,7 @@ import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.NodeStoppingException;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheLockCandidates;
@@ -1258,7 +1259,7 @@ public final class GridDhtLockFuture extends 
GridCacheCompoundIdentityFuture<Boo
             sb.append("Transaction tx=").append(tx.getClass().getSimpleName());
             sb.append(" [xid=").append(tx.xid());
             sb.append(", xidVer=").append(tx.xidVersion());
-            sb.append(", nearXid=").append(tx.nearXidVersion().asIgniteUuid());
+            sb.append(", 
nearXid=").append(BinaryUtils.asIgniteUuid(tx.nearXidVersion()));
             sb.append(", nearXidVer=").append(tx.nearXidVersion());
             sb.append(", nearNodeId=").append(tx.nearNodeId());
             sb.append(", label=").append(tx.label());
@@ -1284,7 +1285,7 @@ public final class GridDhtLockFuture extends 
GridCacheCompoundIdentityFuture<Boo
                                 sb.append("key=").append(key).append(", 
owner=");
                                 sb.append("[xid=").append(itx.xid()).append(", 
");
                                 
sb.append("xidVer=").append(itx.xidVersion()).append(", ");
-                                
sb.append("nearXid=").append(itx.nearXidVersion().asIgniteUuid()).append(", ");
+                                
sb.append("nearXid=").append(BinaryUtils.asIgniteUuid(itx.nearXidVersion())).append(",
 ");
                                 
sb.append("nearXidVer=").append(itx.nearXidVersion()).append(", ");
                                 
sb.append("label=").append(itx.label()).append(", ");
                                 
sb.append("nearNodeId=").append(candidate.otherNodeId()).append("]");
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index 71b36a3cef0..4de175ded7d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@ -2237,7 +2237,7 @@ public class GridDhtAtomicCache<K, V> extends 
GridDhtCacheAdapter<K, V> {
                         throw e;
                     }
                     catch (Exception e) {
-                        curInvokeRes = CacheInvokeResult.fromError(e);
+                        curInvokeRes = 
CacheInvokeResult.fromError(CU.prepareEntryProcessorError(e));
 
                         updated = old;
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
index 1529d53b5ce..9eb50bc0c65 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
@@ -41,6 +41,7 @@ import org.apache.ignite.cache.store.CacheStore;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.events.TransactionStateChangedEvent;
 import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.managers.discovery.ConsistentIdMapper;
 import 
org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
@@ -693,7 +694,7 @@ public abstract class IgniteTxAdapter extends 
GridMetadataAwareAdapter implement
 
     /** {@inheritDoc} */
     @Override public IgniteUuid xid() {
-        return xidVer.asIgniteUuid();
+        return BinaryUtils.asIgniteUuid(xidVer);
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
index 332a7d1ab27..21a16ba4d61 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
@@ -1138,30 +1138,7 @@ public class QueryUtils {
      * @return Type name.
      */
     public static String typeName(String clsName) {
-        int genericStart = clsName.indexOf('`');  // .NET generic, not valid 
for Java class name.
-
-        if (genericStart >= 0)
-            clsName = clsName.substring(0, genericStart);
-
-        int pkgEnd = clsName.lastIndexOf('.');
-
-        if (pkgEnd >= 0 && pkgEnd < clsName.length() - 1)
-            clsName = clsName.substring(pkgEnd + 1);
-
-        if (clsName.endsWith("[]"))
-            clsName = clsName.substring(0, clsName.length() - 2) + "_array";
-
-        int parentEnd = clsName.lastIndexOf('$');
-
-        if (parentEnd >= 0)
-            clsName = clsName.substring(parentEnd + 1);
-
-        parentEnd = clsName.lastIndexOf('+');   // .NET parent
-
-        if (parentEnd >= 0)
-            clsName = clsName.substring(parentEnd + 1);
-
-        return clsName;
+        return CommonUtils.typeName(clsName);
     }
 
     /**
@@ -1171,22 +1148,7 @@ public class QueryUtils {
      * @return Type name.
      */
     public static String typeName(Class<?> cls) {
-        String typeName = cls.getSimpleName();
-
-        // To protect from failure on anonymous classes.
-        if (F.isEmpty(typeName)) {
-            String pkg = cls.getPackage().getName();
-
-            typeName = cls.getName().substring(pkg.length() + (pkg.isEmpty() ? 
0 : 1));
-        }
-
-        if (cls.isArray()) {
-            assert typeName.endsWith("[]");
-
-            typeName = typeName.substring(0, typeName.length() - 2) + "_array";
-        }
-
-        return typeName;
+        return CommonUtils.typeName(cls);
     }
 
     /**
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
index e1e2e38dbbf..5e4fdf0b35c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
@@ -36,9 +36,9 @@ import org.apache.ignite.internal.MessageProcessor;
 import org.apache.ignite.internal.Order;
 import org.apache.ignite.internal.cache.query.QueryIndexMessage;
 import org.apache.ignite.internal.util.CommonUtils;
+import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.plugin.extensions.communication.Message;
 import 
org.apache.ignite.plugin.extensions.communication.mappers.DefaultEnumMapper;
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.junit.Test;
@@ -363,7 +363,7 @@ public class MessageProcessorTest {
         for (String srcFile: srcFiles)
             input.add(javaFile(srcFile));
 
-        File igniteCoreJar = jarForClass(Message.class);
+        File igniteCoreJar = jarForClass(IgniteUtils.class);
         File igniteCodegenJar = jarForClass(Order.class);
         File igniteBinaryApiJar = jarForClass(IgniteUuid.class);
         File igniteCommonsJar = jarForClass(CommonUtils.class);
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java
index fd42dc16fbf..d40a1686776 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java
@@ -29,6 +29,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.pagemem.wal.WALIterator;
 import 
org.apache.ignite.internal.pagemem.wal.record.IncrementalSnapshotFinishRecord;
 import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
@@ -183,7 +184,7 @@ public class IncrementalSnapshotJoiningClientTest extends 
AbstractIncrementalSna
                 if (rec.type() == 
WALRecord.RecordType.INCREMENTAL_SNAPSHOT_FINISH_RECORD) {
                     IncrementalSnapshotFinishRecord finRec = 
(IncrementalSnapshotFinishRecord)rec;
 
-                    assertTrue(finRec.excluded().stream().anyMatch(id -> 
id.asIgniteUuid().equals(txId)));
+                    assertTrue(finRec.excluded().stream().anyMatch(id -> 
BinaryUtils.asIgniteUuid(id).equals(txId)));
 
                     return true;
                 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
index 5cad5b48d5c..d6553f9fa3d 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
@@ -53,6 +53,7 @@ import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.TestRecordingCommunicationSpi;
 import org.apache.ignite.internal.binary.BinaryContext;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import 
org.apache.ignite.internal.management.consistency.ConsistencyRepairCommandArg;
 import org.apache.ignite.internal.management.consistency.ConsistencyRepairTask;
 import org.apache.ignite.internal.management.consistency.ConsistencyTaskResult;
@@ -675,7 +676,7 @@ public class IncrementalSnapshotRestoreTest extends 
AbstractIncrementalSnapshotT
         for (int n = 1; n < nodes(); n++) {
             TestRecordingCommunicationSpi.spi(grid(n)).blockMessages((node, 
msg) ->
                 msg instanceof GridNearTxPrepareResponse
-                    && 
((GridNearTxPrepareResponse)msg).version().asIgniteUuid().equals(exclTxId.get()));
+                    && 
BinaryUtils.asIgniteUuid(((GridNearTxPrepareResponse)msg).version()).equals(exclTxId.get()));
         }
 
         msgBlkSet.countDown();
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateAbstractTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateAbstractTest.java
index 65ef7afee2c..232cef9e2a3 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateAbstractTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateAbstractTest.java
@@ -45,6 +45,7 @@ import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.IgnitionEx;
 import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.processors.cache.PartitionUpdateCounter;
 import 
org.apache.ignite.internal.processors.cache.distributed.GridCacheTxRecoveryRequest;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxFinishRequest;
@@ -313,7 +314,7 @@ public abstract class TxPartitionCounterStateAbstractTest 
extends GridCommonAbst
 
                 futMap.put(req.futureId(), req.version());
 
-                return cb.beforePrimaryPrepare(to, 
req.version().asIgniteUuid(), createSendFuture(clientWrappedSpi, msg));
+                return cb.beforePrimaryPrepare(to, 
BinaryUtils.asIgniteUuid(req.version()), createSendFuture(clientWrappedSpi, 
msg));
             }
             else if (msg instanceof GridNearTxFinishRequest) {
                 IgniteEx to = IgnitionEx.gridxx(node.id());
@@ -440,7 +441,8 @@ public abstract class TxPartitionCounterStateAbstractTest 
extends GridCommonAbst
                 IgniteInternalTx primTx = findTx(from, nearVer, true);
                 IgniteInternalTx backupTx = findTx(to, nearVer, false);
 
-                return cb.beforeBackupFinish(from, to, primTx, backupTx, 
nearVer.asIgniteUuid(), createSendFuture(wrappedPrimSpi, msg));
+                return cb.beforeBackupFinish(from, to, primTx, backupTx, 
BinaryUtils.asIgniteUuid(nearVer),
+                    createSendFuture(wrappedPrimSpi, msg));
             }
             else if (msg instanceof GridNearTxPrepareResponse) {
                 GridNearTxPrepareResponse resp = 
(GridNearTxPrepareResponse)msg;
@@ -451,7 +453,7 @@ public abstract class TxPartitionCounterStateAbstractTest 
extends GridCommonAbst
 
                 IgniteInternalTx primTx = findTx(from, ver, true);
 
-                return cb.afterPrimaryPrepare(from, primTx, 
ver.asIgniteUuid(), createSendFuture(wrappedPrimSpi, msg));
+                return cb.afterPrimaryPrepare(from, primTx, 
BinaryUtils.asIgniteUuid(ver), createSendFuture(wrappedPrimSpi, msg));
             }
             else if (msg instanceof GridNearTxFinishResponse) {
                 IgniteEx to = IgnitionEx.gridxx(node.id());
@@ -460,7 +462,7 @@ public abstract class TxPartitionCounterStateAbstractTest 
extends GridCommonAbst
 
                 IgniteEx from = fromNode(wrappedPrimSpi);
 
-                IgniteUuid nearVer = futMap.get(req.futureId()).asIgniteUuid();
+                IgniteUuid nearVer = 
BinaryUtils.asIgniteUuid(futMap.get(req.futureId()));
 
                 return cb.afterPrimaryFinish(from, nearVer, 
createSendFuture(wrappedPrimSpi, msg));
             }
@@ -490,7 +492,7 @@ public abstract class TxPartitionCounterStateAbstractTest 
extends GridCommonAbst
 
                 IgniteInternalTx backupTx = findTx(from, ver, false);
 
-                return cb.afterBackupPrepare(to, from, backupTx, 
ver.asIgniteUuid(), createSendFuture(wrappedBackupSpi, msg));
+                return cb.afterBackupPrepare(to, from, backupTx, 
BinaryUtils.asIgniteUuid(ver), createSendFuture(wrappedBackupSpi, msg));
             }
             else if (msg instanceof GridDhtTxFinishResponse) {
                 IgniteEx from = fromNode(wrappedBackupSpi);
@@ -504,7 +506,7 @@ public abstract class TxPartitionCounterStateAbstractTest 
extends GridCommonAbst
                     return false; // Message from parallel partition.
 
                 // Version is null if message is a response to 
checkCommittedRequest.
-                return cb.afterBackupFinish(to, from, ver.asIgniteUuid(), 
createSendFuture(wrappedBackupSpi, msg));
+                return cb.afterBackupFinish(to, from, 
BinaryUtils.asIgniteUuid(ver), createSendFuture(wrappedBackupSpi, msg));
             }
 
             return false;
@@ -973,7 +975,7 @@ public abstract class TxPartitionCounterStateAbstractTest 
extends GridCommonAbst
                 return false;
 
             runAsync(() -> {
-                futures.put(new T3<>(primary, TxState.COMMIT, 
tx.nearXidVersion().asIgniteUuid()), proceedFut);
+                futures.put(new T3<>(primary, TxState.COMMIT, 
BinaryUtils.asIgniteUuid(tx.nearXidVersion())), proceedFut);
 
                 if (countForNode(primary, TxState.COMMIT) == txCnt)
                     futures.remove(new T3<>(primary, TxState.COMMIT, 
version(commits.get(primary).poll()))).onDone();
@@ -993,11 +995,11 @@ public abstract class TxPartitionCounterStateAbstractTest 
extends GridCommonAbst
 
             runAsync(() -> {
                 if (assigns.get(primary) != null) {
-                    int v0 = assignCntr.compute(new T2<>(primary, 
primaryTx.nearXidVersion().asIgniteUuid()),
+                    int v0 = assignCntr.compute(new T2<>(primary, 
BinaryUtils.asIgniteUuid(primaryTx.nearXidVersion())),
                         (key, val) -> (val == null ? 0 : val) + 1);
 
                     if (v0 == 2) {
-                        onCounterAssigned(primary, primaryTx, 
order(primaryTx.nearXidVersion().asIgniteUuid()));
+                        onCounterAssigned(primary, primaryTx, 
order(BinaryUtils.asIgniteUuid(primaryTx.nearXidVersion())));
 
                         if (!assigns.get(primary).isEmpty())
                             futures.remove(new T3<>(primary, TxState.ASSIGN,
@@ -1006,7 +1008,7 @@ public abstract class TxPartitionCounterStateAbstractTest 
extends GridCommonAbst
                 }
 
                 if (prepares.get(backup) != null) {
-                    futures.put(new T3<>(backup, TxState.PREPARE, 
primaryTx.nearXidVersion().asIgniteUuid()), proceedFut);
+                    futures.put(new T3<>(backup, TxState.PREPARE, 
BinaryUtils.asIgniteUuid(primaryTx.nearXidVersion())), proceedFut);
 
                     // Wait until all prep requests queued and force prepare 
order.
                     if (countForNode(backup, TxState.PREPARE) == txCnt) {
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateOnePrimaryOneBackupTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateOnePrimaryOneBackupTest.java
index cab77867215..219f188ded0 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateOnePrimaryOneBackupTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateOnePrimaryOneBackupTest.java
@@ -29,6 +29,7 @@ import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.processors.cache.PartitionUpdateCounter;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage;
 import org.apache.ignite.internal.util.future.GridFutureAdapter;
@@ -348,7 +349,7 @@ public class TxPartitionCounterStateOnePrimaryOneBackupTest 
extends TxPartitionC
         @Override public boolean beforeBackupPrepare(IgniteEx primary, 
IgniteEx backup, IgniteInternalTx primaryTx,
             GridFutureAdapter<?> proceedFut) {
             runAsync(() -> {
-                IgniteUuid nearXidVer = 
primaryTx.nearXidVersion().asIgniteUuid();
+                IgniteUuid nearXidVer = 
BinaryUtils.asIgniteUuid(primaryTx.nearXidVersion());
 
                 onPrimaryPrepared(primary, primaryTx, order(nearXidVer));
 

Reply via email to