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 fc3e924f54..c92e6bf59e 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 @@ -59,6 +59,7 @@ import org.apache.ignite.plugin.PluginProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import static org.apache.ignite.internal.MarshallerPlatformIds.DOTNET_ID; import static org.apache.ignite.internal.MarshallerPlatformIds.JAVA_ID; import static org.apache.ignite.internal.MarshallerPlatformIds.otherPlatforms; import static org.apache.ignite.internal.MarshallerPlatformIds.platformName; @@ -368,7 +369,24 @@ public class MarshallerContextImpl implements MarshallerContext { /** {@inheritDoc} */ @Override public Class getClass(int typeId, ClassLoader ldr) throws ClassNotFoundException, IgniteCheckedException { - String clsName = getClassName(JAVA_ID, typeId); + String clsName = null; + ClassNotFoundException clsNotFoundEx = null; + + for (byte platformId : new byte[]{JAVA_ID, DOTNET_ID}) { + try { + clsName = getClassName(platformId, typeId); + } catch (ClassNotFoundException ex) { + clsNotFoundEx = ex; + } + + if (clsName != null) { + clsNotFoundEx = null; + break; + } + } + + if (clsNotFoundEx != null) + throw clsNotFoundEx; if (clsName == null) throw new ClassNotFoundException("Unknown type ID: " + typeId); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/binary/PlatformBinaryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/binary/PlatformBinaryProcessor.java index 649e7742d2..40fb1672b8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/binary/PlatformBinaryProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/binary/PlatformBinaryProcessor.java @@ -125,17 +125,25 @@ public class PlatformBinaryProcessor extends PlatformAbstractTarget { case OP_GET_TYPE: { int typeId = reader.readInt(); + ClassNotFoundException clsNotFoundEx = null; - try { - String typeName = platformContext().kernalContext().marshallerContext() - .getClassName(MarshallerPlatformIds.DOTNET_ID, typeId); + for (byte platformId : new byte[]{MarshallerPlatformIds.DOTNET_ID, MarshallerPlatformIds.JAVA_ID}) { + try { + String typeName = platformContext().kernalContext().marshallerContext() + .getClassName(platformId, typeId); - writer.writeString(typeName); - } - catch (ClassNotFoundException e) { - throw new BinaryObjectException(e); + writer.writeString(typeName); + + clsNotFoundEx = null; + break; + } catch (ClassNotFoundException e) { + clsNotFoundEx = e; + } } + if (clsNotFoundEx != null) + throw new BinaryObjectException(clsNotFoundEx); + break; }