Skip to content

Commit

Permalink
Fix method serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
ac101m committed Nov 7, 2023
1 parent c664175 commit d9aeaa5
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import net.corda.kryoserialization.serializers.LinkedHashMapEntrySerializer
import net.corda.kryoserialization.serializers.LinkedHashMapIteratorSerializer
import net.corda.kryoserialization.serializers.LinkedListItrSerializer
import net.corda.kryoserialization.serializers.LoggerSerializer
import net.corda.kryoserialization.serializers.MethodSerializer
import net.corda.kryoserialization.serializers.NonSerializableSerializer
import net.corda.kryoserialization.serializers.ThrowableSerializer
import net.corda.kryoserialization.serializers.X509CertificateSerializer
Expand All @@ -36,7 +35,6 @@ import org.objenesis.strategy.InstantiatorStrategy
import org.objenesis.strategy.StdInstantiatorStrategy
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.lang.reflect.Method
import java.io.BufferedInputStream
import java.io.FileInputStream
import java.io.InputStream
Expand Down Expand Up @@ -135,9 +133,6 @@ class DefaultKryoCustomizer {
addDefaultSerializer(SpecificRecord::class.java, AvroRecordRejectSerializer)
// Register a serializer to reject the serialization of NonSerializable classes
addDefaultSerializer(NonSerializable::class.java, NonSerializableSerializer)

//TODO CORE-15338 remove this serializer
kryo.register(Method::class.java, MethodSerializer())
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.esotericsoftware.kryo.ClassResolver
import com.esotericsoftware.kryo.Kryo
import com.esotericsoftware.kryo.Serializer
import com.esotericsoftware.kryo.util.Pool
import java.lang.reflect.Method
import net.corda.crypto.cipher.suite.KeyEncodingService
import net.corda.kryoserialization.CordaKryoException
import net.corda.kryoserialization.DefaultKryoCustomizer
Expand All @@ -29,6 +30,7 @@ import java.security.PrivateKey
import java.security.PublicKey
import java.util.function.Function
import javax.security.auth.x500.X500Principal
import net.corda.kryoserialization.serializers.MethodSerializer

class KryoCheckpointSerializerBuilderImpl(
private val keyEncodingService: KeyEncodingService,
Expand Down Expand Up @@ -77,7 +79,8 @@ class KryoCheckpointSerializerBuilderImpl(

val otherCustomSerializers = mapOf(
SingletonSerializeAsToken::class.java to SingletonSerializeAsTokenSerializer(singletonInstances.toMap()),
X500Principal::class.java to X500PrincipalSerializer()
X500Principal::class.java to X500PrincipalSerializer(),
Method::class.java to MethodSerializer()
)

val pool = object : Pool<Kryo>(true, false, 8) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,22 @@ import java.lang.reflect.Method
class MethodSerializer : Serializer<Method>() {

override fun write(kryo: Kryo, output: Output, method: Method) {
val declaringClassName = method.declaringClass.name
val declaringClass = method.declaringClass
val methodName = method.name
val parameterTypes = method.parameterTypes

output.writeString(declaringClassName)
kryo.writeObject(output, declaringClass)
output.writeString(methodName)
kryo.writeObject(output, parameterTypes)
}

@Suppress("SpreadOperator", "TooGenericExceptionThrown")
override fun read(kryo: Kryo, input: Input, type: Class<out Method>): Method {
val declaringClassName = input.readString()
val declaringClass = kryo.readObject(input, Class::class.java)
val methodName = input.readString()
val parameterTypes = kryo.readObject(input, arrayOf<Class<*>>()::class.java)

return try {
val declaringClass = Class.forName(declaringClassName)
declaringClass.getMethod(methodName, *parameterTypes)
} catch (e: ClassNotFoundException) {
throw RuntimeException("Error reconstructing Method", e)
Expand Down

0 comments on commit d9aeaa5

Please sign in to comment.