IGNITE-3892 - Fixed bug in BinaryWriterExImpl.doWriteClass() method
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e3827a40 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e3827a40 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e3827a40 Branch: refs/heads/master Commit: e3827a40bcbd54664cc0688e8e6ec57e4e328172 Parents: 4ee52f0 Author: Valentin Kulichenko <valentin.luliche...@gmail.com> Authored: Wed Sep 21 16:07:02 2016 -0700 Committer: Valentin Kulichenko <valentin.luliche...@gmail.com> Committed: Wed Sep 21 16:07:02 2016 -0700 ---------------------------------------------------------------------- .../internal/binary/BinaryWriterExImpl.java | 21 ++++---- .../binary/BinaryMarshallerSelfTest.java | 53 ++++++++++++++++---- .../marshaller/MarshallerContextTestImpl.java | 28 +++++++++-- 3 files changed, 77 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/e3827a40/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java ---------------------------------------------------------------------- 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 21fb2bf..1a81819 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 @@ -17,16 +17,6 @@ package org.apache.ignite.internal.binary; -import org.apache.ignite.IgniteCheckedException; -import org.apache.ignite.binary.BinaryObjectException; -import org.apache.ignite.binary.BinaryRawWriter; -import org.apache.ignite.binary.BinaryWriter; -import org.apache.ignite.internal.binary.streams.BinaryHeapOutputStream; -import org.apache.ignite.internal.binary.streams.BinaryOutputStream; -import org.apache.ignite.internal.util.IgniteUtils; -import org.apache.ignite.internal.util.typedef.internal.A; -import org.jetbrains.annotations.Nullable; - import java.io.IOException; import java.io.ObjectOutput; import java.lang.reflect.InvocationHandler; @@ -38,6 +28,15 @@ import java.util.Collection; import java.util.Date; import java.util.Map; import java.util.UUID; +import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.binary.BinaryObjectException; +import org.apache.ignite.binary.BinaryRawWriter; +import org.apache.ignite.binary.BinaryWriter; +import org.apache.ignite.internal.binary.streams.BinaryHeapOutputStream; +import org.apache.ignite.internal.binary.streams.BinaryOutputStream; +import org.apache.ignite.internal.util.IgniteUtils; +import org.apache.ignite.internal.util.typedef.internal.A; +import org.jetbrains.annotations.Nullable; import static java.nio.charset.StandardCharsets.UTF_8; @@ -823,7 +822,7 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje else { out.unsafeWriteInt(GridBinaryMarshaller.UNREGISTERED_TYPE_ID); - doWriteString(val.getClass().getName()); + doWriteString(val.getName()); } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/e3827a40/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java ---------------------------------------------------------------------- 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 b347ec0..f415472 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 @@ -2648,7 +2648,7 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { */ public void testDuplicateNameSimpleNameMapper() throws Exception { BinaryMarshaller marsh = binaryMarshaller(new BinaryBasicNameMapper(true), - new BinaryBasicIdMapper(true), null, null); + new BinaryBasicIdMapper(true), null, null, null); Test1.Job job1 = new Test1().new Job(); Test2.Job job2 = new Test2().new Job(); @@ -2672,7 +2672,7 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { */ public void testDuplicateNameFullNameMapper() throws Exception { BinaryMarshaller marsh = binaryMarshaller(new BinaryBasicNameMapper(false), - new BinaryBasicIdMapper(false), null, null); + new BinaryBasicIdMapper(false), null, null, null); Test1.Job job1 = new Test1().new Job(); Test2.Job job2 = new Test2().new Job(); @@ -2911,6 +2911,17 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { } /** + * @throws Exception If failed. + */ + public void testUnregisteredClass() throws Exception { + BinaryMarshaller m = binaryMarshaller(null, Collections.singletonList(Value.class.getName())); + + ClassFieldObject res = m.unmarshal(m.marshal(new ClassFieldObject(Value.class)), null); + + assertEquals(Value.class, res.cls); + } + + /** * */ private static interface SomeItf { @@ -3227,9 +3238,8 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { /** * */ - protected BinaryMarshaller binaryMarshaller() - throws IgniteCheckedException { - return binaryMarshaller(null, null, null, null); + protected BinaryMarshaller binaryMarshaller() throws IgniteCheckedException { + return binaryMarshaller(null, null, null, null, null); } /** @@ -3237,7 +3247,15 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { */ protected BinaryMarshaller binaryMarshaller(Collection<BinaryTypeConfiguration> cfgs) throws IgniteCheckedException { - return binaryMarshaller(null, null, null, cfgs); + return binaryMarshaller(null, null, null, cfgs, null); + } + + /** + * + */ + protected BinaryMarshaller binaryMarshaller(Collection<BinaryTypeConfiguration> cfgs, + Collection<String> excludedClasses) throws IgniteCheckedException { + return binaryMarshaller(null, null, null, cfgs, excludedClasses); } /** @@ -3246,7 +3264,7 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { protected BinaryMarshaller binaryMarshaller(BinaryNameMapper nameMapper, BinaryIdMapper mapper, Collection<BinaryTypeConfiguration> cfgs) throws IgniteCheckedException { - return binaryMarshaller(nameMapper, mapper, null, cfgs); + return binaryMarshaller(nameMapper, mapper, null, cfgs, null); } /** @@ -3254,7 +3272,7 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { */ protected BinaryMarshaller binaryMarshaller(BinarySerializer serializer, Collection<BinaryTypeConfiguration> cfgs) throws IgniteCheckedException { - return binaryMarshaller(null, null, serializer, cfgs); + return binaryMarshaller(null, null, serializer, cfgs, null); } /** @@ -3264,7 +3282,8 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { BinaryNameMapper nameMapper, BinaryIdMapper mapper, BinarySerializer serializer, - Collection<BinaryTypeConfiguration> cfgs + Collection<BinaryTypeConfiguration> cfgs, + Collection<String> excludedClasses ) throws IgniteCheckedException { IgniteConfiguration iCfg = new IgniteConfiguration(); @@ -3283,7 +3302,7 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { BinaryMarshaller marsh = new BinaryMarshaller(); - marsh.setContext(new MarshallerContextTestImpl(null)); + marsh.setContext(new MarshallerContextTestImpl(null, excludedClasses)); IgniteUtils.invoke(BinaryMarshaller.class, marsh, "setBinaryContext", ctx, iCfg); @@ -4885,4 +4904,18 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest { /** */ private static class SingleHandleB {} + + /** + */ + private static class ClassFieldObject { + /** */ + private Class<?> cls; + + /** + * @param cls Class field. + */ + public ClassFieldObject(Class<?> cls) { + this.cls = cls; + } + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/e3827a40/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java b/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java index c600ca4..9ff127d 100644 --- a/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java +++ b/modules/core/src/test/java/org/apache/ignite/marshaller/MarshallerContextTestImpl.java @@ -17,11 +17,13 @@ package org.apache.ignite.marshaller; +import java.util.Collection; import java.util.List; import java.util.concurrent.ConcurrentMap; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.MarshallerContextAdapter; import org.apache.ignite.plugin.PluginProvider; +import org.jetbrains.annotations.Nullable; import org.jsr166.ConcurrentHashMap8; /** @@ -29,26 +31,44 @@ import org.jsr166.ConcurrentHashMap8; */ public class MarshallerContextTestImpl extends MarshallerContextAdapter { /** */ - private final static ConcurrentMap<Integer, String> map = new ConcurrentHashMap8<>(); + private static final ConcurrentMap<Integer, String> map = new ConcurrentHashMap8<>(); + + /** */ + private final Collection<String> excluded; /** * Initializes context. * * @param plugins Plugins. + * @param excluded Excluded classes. */ - public MarshallerContextTestImpl(List<PluginProvider> plugins) { + public MarshallerContextTestImpl(@Nullable List<PluginProvider> plugins, Collection<String> excluded) { super(plugins); + + this.excluded = excluded; + } + + /** + * Initializes context. + * + * @param plugins Plugins. + */ + public MarshallerContextTestImpl(List<PluginProvider> plugins) { + this(plugins, null); } /** * Initializes context. */ public MarshallerContextTestImpl() { - super(null); + this(null); } /** {@inheritDoc} */ @Override protected boolean registerClassName(int id, String clsName) throws IgniteCheckedException { + if (excluded != null && excluded.contains(clsName)) + return false; + String oldClsName = map.putIfAbsent(id, clsName); if (oldClsName != null && !oldClsName.equals(clsName)) @@ -69,4 +89,4 @@ public class MarshallerContextTestImpl extends MarshallerContextAdapter { public ConcurrentMap<Integer, String> internalMap() { return map; } -} \ No newline at end of file +}