You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sd...@apache.org on 2022/01/11 23:56:47 UTC
[ignite-3] 19/27: - marshal null correctly
This is an automated email from the ASF dual-hosted git repository.
sdanilov pushed a commit to branch uos-network
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 369541338e36d81b1fdf0132e8f73e4b8b4f51b7
Merge: 7b4063e 67c494a
Author: Roman Puchkovskiy <ro...@gmail.com>
AuthorDate: Tue Jan 11 15:47:35 2022 +0400
- marshal null correctly
.../marshal/DefaultUserObjectMarshaller.java | 17 ++++++++---------
.../DefaultUserObjectMarshallerWithBuiltinsTest.java | 10 ++++++++++
2 files changed, 18 insertions(+), 9 deletions(-)
diff --cc modules/network/src/main/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshaller.java
index c9828bb,64c4e17..bc2617c
--- a/modules/network/src/main/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshaller.java
+++ b/modules/network/src/main/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshaller.java
@@@ -133,16 -126,6 +133,19 @@@ public class DefaultUserObjectMarshalle
return !builtInNonContainerMarshallers.supports(descriptor.clazz());
}
+ private ClassDescriptor obtainOriginalDescriptor(@Nullable Object object, Class<?> declaredClass) {
- // object class is not a subclass of the declared class for primitives
- // for enums we don't need the specific classes at all
- Class<?> classToQueryForOriginalDescriptor = isInstanceOfSubclass(object, declaredClass)
- && !(object instanceof Enum)
- ? object.getClass() : declaredClass;
++ if (object == null) {
++ return descriptorRegistry.getNullDescriptor();
++ }
++
++ // For primitives we need to keep the declaredClass (it differs from object.getClass()).
++ // For enums we don't need the specific classes at all.
++ Class<?> classToQueryForOriginalDescriptor = declaredClass.isPrimitive() || object instanceof Enum
++ ? declaredClass : object.getClass();
+
+ return getOrCreateDescriptor(classToQueryForOriginalDescriptor);
+ }
+
private boolean objectIsMemberOfEnumWithAnonymousClassesForMembers(Object object, Class<?> declaredClass) {
return declaredClass.isEnum() && object.getClass().getSuperclass() == declaredClass;
}
@@@ -195,10 -185,10 +198,6 @@@
}
}
-- private boolean isInstanceOfSubclass(@Nullable Object object, Class<?> maybeSuperclass) {
-- return object != null && maybeSuperclass.isAssignableFrom(object.getClass());
-- }
--
@Nullable
private Object applyWriteReplace(Object originalObject, ClassDescriptor originalDescriptor) throws MarshalException {
try {
diff --cc modules/network/src/test/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshallerWithBuiltinsTest.java
index 438dd44,68d2557..5658b5a
--- a/modules/network/src/test/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshallerWithBuiltinsTest.java
+++ b/modules/network/src/test/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshallerWithBuiltinsTest.java
@@@ -106,6 -105,15 +107,15 @@@ class DefaultUserObjectMarshallerWithBu
}
@Test
+ void marshalsAndUnmarshalsNullThrowable() throws Exception {
+ MarshalledObject marshalled = marshaller.marshal(null, Throwable.class);
+
- Throwable unmarshalled = marshaller.unmarshal(marshalled.bytes(), descriptorRegistry);
++ Throwable unmarshalled = marshaller.unmarshal(marshalled.bytes(), descriptors);
+
+ assertThat(unmarshalled, is(nullValue()));
+ }
+
+ @Test
void marshalsObjectArrayUsingExactlyDescriptorsOfObjectArrayAndComponents() throws Exception {
MarshalledObject marshalled = marshaller.marshal(new Object[]{42, "abc"});