This is an automated email from the ASF dual-hosted git repository.
alexpl 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 1c18dcb9e08 IGNITE-12483 Add default constructor to
PlatformDotNetSessionLockResult to avoid issues with ReflectionFactory - Fixes
#10550.
1c18dcb9e08 is described below
commit 1c18dcb9e082ca53340ea641a80bfa62294b372f
Author: Aleksey Plekhanov <[email protected]>
AuthorDate: Tue Feb 28 11:06:56 2023 +0300
IGNITE-12483 Add default constructor to PlatformDotNetSessionLockResult to
avoid issues with ReflectionFactory - Fixes #10550.
Signed-off-by: Aleksey Plekhanov <[email protected]>
---
.../internal/binary/BinaryClassDescriptor.java | 5 +++
.../ignite/internal/binary/BinaryContext.java | 10 +++++
.../PlatformDotNetSessionLockResult.java | 7 ++++
.../binary/BinaryContextPredefinedTypesTest.java | 46 ++++++++++++++++++++++
.../testsuites/IgniteBinaryObjectsTestSuite.java | 4 +-
5 files changed, 71 insertions(+), 1 deletion(-)
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 0b64d6a94b9..be1ffc3cb57 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
@@ -1091,6 +1091,11 @@ public class BinaryClassDescriptor {
}
}
+ /** */
+ Constructor<?> ctor() {
+ return ctor;
+ }
+
/**
* @param cls Class.
* @return Constructor.
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
index ff9407fabf8..d5b0ea2df22 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
@@ -275,6 +275,11 @@ public class BinaryContext {
registerPredefinedType(PlatformDotNetSessionLockResult.class, 0);
// IDs range [200..1000] is used by Ignite internal APIs.
+
+ if (U.sunReflectionFactory() == null) {
+ U.warn(log, "ReflectionFactory not found, deserialization of
binary objects for classes without " +
+ "default constructor is not possible");
+ }
}
/**
@@ -1455,6 +1460,11 @@ public class BinaryContext {
schemas.remove(typeId);
}
+ /** */
+ Collection<BinaryClassDescriptor> predefinedTypes() {
+ return Collections.unmodifiableCollection(predefinedTypes.values());
+ }
+
/**
* Type descriptors.
*/
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotNetSessionLockResult.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotNetSessionLockResult.java
index 5c4dfff9370..ef416449401 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotNetSessionLockResult.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/websession/PlatformDotNetSessionLockResult.java
@@ -42,6 +42,13 @@ public class PlatformDotNetSessionLockResult implements
Binarylizable {
/** Lock id. */
private long lockId;
+ /**
+ * Default constructor for deserialization.
+ */
+ public PlatformDotNetSessionLockResult() {
+ // No-op.
+ }
+
/**
* Constructor.
*
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryContextPredefinedTypesTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryContextPredefinedTypesTest.java
new file mode 100644
index 00000000000..9e0c4b63a88
--- /dev/null
+++
b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryContextPredefinedTypesTest.java
@@ -0,0 +1,46 @@
+/*
+ * 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 org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class BinaryContextPredefinedTypesTest extends GridCommonAbstractTest {
+ /**
+ * Tests that all predefined types have default constructor.
+ */
+ @Test
+ public void testDefaultConstructor() {
+ BinaryContext binCtx = new
BinaryContext(BinaryNoopMetadataHandler.instance(), new IgniteConfiguration(),
log);
+
+ for (BinaryClassDescriptor desc : binCtx.predefinedTypes()) {
+ if (!desc.isBinary())
+ continue;
+
+ // Check that class descriptor uses default class constructor (not
generated by U.ctorFactory()).
+ // Ignite can't start if any predefined type misses default
constructor and U.ctorFactory() is not available
+ // (this can happens in some environments, for example, inside
application server)
+ assertTrue("Missing default constructor for predifined type " +
desc.describedClass().getName(),
+ desc.describedClass() == desc.ctor().getDeclaringClass());
+ }
+ }
+}
diff --git
a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
index 5bb3a4a013a..9fb83cfc7c8 100644
---
a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
+++
b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
@@ -23,6 +23,7 @@ import
org.apache.ignite.internal.binary.BinaryBasicIdMapperSelfTest;
import org.apache.ignite.internal.binary.BinaryBasicNameMapperSelfTest;
import
org.apache.ignite.internal.binary.BinaryConfigurationConsistencySelfTest;
import
org.apache.ignite.internal.binary.BinaryConfigurationCustomSerializerSelfTest;
+import org.apache.ignite.internal.binary.BinaryContextPredefinedTypesTest;
import org.apache.ignite.internal.binary.BinaryEnumsSelfTest;
import org.apache.ignite.internal.binary.BinaryFieldExtractionSelfTest;
import org.apache.ignite.internal.binary.BinaryFieldsHeapSelfTest;
@@ -173,7 +174,8 @@ import org.junit.runners.Suite;
GridCacheBinaryObjectUserClassloaderSelfTest.class,
- BinaryMetadataMoveLegacyFolderTest.class
+ BinaryMetadataMoveLegacyFolderTest.class,
+ BinaryContextPredefinedTypesTest.class,
})
public class IgniteBinaryObjectsTestSuite {
}