diff --git a/core/src/main/kotlin/net/corda/core/serialization/SerializationCustomization.kt b/core/src/main/kotlin/net/corda/core/serialization/SerializationCustomization.kt index e051f732c3..91c5dea265 100644 --- a/core/src/main/kotlin/net/corda/core/serialization/SerializationCustomization.kt +++ b/core/src/main/kotlin/net/corda/core/serialization/SerializationCustomization.kt @@ -1,6 +1,6 @@ package net.corda.core.serialization interface SerializationCustomization { - fun addToWhitelist(type: Class<*>) + fun addToWhitelist(vararg types: Class<*>) } diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index 2ce4b0db3f..7b9c8cbb72 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -70,6 +70,8 @@ UNRELEASED * Removed the concept of relevancy from ``LinearState``. The ``ContractState``'s relevancy to the vault can be determined by the flow context, the vault will process any transaction from a flow which is not derived from transaction resolution verification. +* ``SerializationCustomization.addToWhitelist()` now accepts multiple classes via varargs. + Milestone 14 ------------ diff --git a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/CordaClassResolver.kt b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/CordaClassResolver.kt index de21b06ac0..7d54a85007 100644 --- a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/CordaClassResolver.kt +++ b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/CordaClassResolver.kt @@ -6,7 +6,10 @@ import com.esotericsoftware.kryo.io.Output import com.esotericsoftware.kryo.serializers.FieldSerializer import com.esotericsoftware.kryo.util.DefaultClassResolver import com.esotericsoftware.kryo.util.Util -import net.corda.core.serialization.* +import net.corda.core.serialization.AttachmentsClassLoader +import net.corda.core.serialization.ClassWhitelist +import net.corda.core.serialization.CordaSerializable +import net.corda.core.serialization.SerializationContext import net.corda.core.utilities.loggerFor import java.io.PrintWriter import java.lang.reflect.Modifier.isAbstract @@ -16,8 +19,10 @@ import java.nio.file.Paths import java.nio.file.StandardOpenOption import java.util.* -fun Kryo.addToWhitelist(type: Class<*>) { - ((classResolver as? CordaClassResolver)?.whitelist as? MutableClassWhitelist)?.add(type) +fun Kryo.addToWhitelist(vararg types: Class<*>) { + for (type in types) { + ((classResolver as? CordaClassResolver)?.whitelist as? MutableClassWhitelist)?.add(type) + } } /** diff --git a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/DefaultWhitelist.kt b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/DefaultWhitelist.kt index ae10b24d4b..d44c063c43 100644 --- a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/DefaultWhitelist.kt +++ b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/DefaultWhitelist.kt @@ -18,54 +18,53 @@ import java.util.* class DefaultWhitelist : CordaPluginRegistry() { override fun customizeSerialization(custom: SerializationCustomization): Boolean { custom.apply { - // TODO: Turn this into an array and use map {} - addToWhitelist(Array(0, {}).javaClass) - addToWhitelist(Notification::class.java) - addToWhitelist(Notification.Kind::class.java) - addToWhitelist(ArrayList::class.java) - addToWhitelist(listOf().javaClass) // EmptyList - addToWhitelist(Pair::class.java) - addToWhitelist(ByteArray::class.java) - addToWhitelist(UUID::class.java) - addToWhitelist(LinkedHashSet::class.java) - addToWhitelist(setOf().javaClass) // EmptySet - addToWhitelist(Currency::class.java) - addToWhitelist(listOf(Unit).javaClass) // SingletonList - addToWhitelist(setOf(Unit).javaClass) // SingletonSet - addToWhitelist(mapOf(Unit to Unit).javaClass) // SingletonSet - addToWhitelist(NetworkHostAndPort::class.java) - addToWhitelist(SimpleString::class.java) - addToWhitelist(KryoException::class.java) - addToWhitelist(StringBuffer::class.java) - addToWhitelist(Unit::class.java) - addToWhitelist(java.io.ByteArrayInputStream::class.java) - addToWhitelist(java.lang.Class::class.java) - addToWhitelist(java.math.BigDecimal::class.java) - addToWhitelist(java.security.KeyPair::class.java) + addToWhitelist(Array(0, {}).javaClass, + Notification::class.java, + Notification.Kind::class.java, + ArrayList::class.java, + listOf().javaClass, // EmptyList + Pair::class.java, + ByteArray::class.java, + UUID::class.java, + LinkedHashSet::class.java, + setOf().javaClass, // EmptySet + Currency::class.java, + listOf(Unit).javaClass, // SingletonList + setOf(Unit).javaClass, // SingletonSet + mapOf(Unit to Unit).javaClass, // SingletonSet + NetworkHostAndPort::class.java, + SimpleString::class.java, + KryoException::class.java, + StringBuffer::class.java, + Unit::class.java, + java.io.ByteArrayInputStream::class.java, + java.lang.Class::class.java, + java.math.BigDecimal::class.java, + java.security.KeyPair::class.java, - // Matches the list in TimeSerializers.addDefaultSerializers: - addToWhitelist(java.time.Duration::class.java) - addToWhitelist(java.time.Instant::class.java) - addToWhitelist(java.time.LocalDate::class.java) - addToWhitelist(java.time.LocalDateTime::class.java) - addToWhitelist(java.time.ZoneOffset::class.java) - addToWhitelist(java.time.ZoneId::class.java) - addToWhitelist(java.time.OffsetTime::class.java) - addToWhitelist(java.time.OffsetDateTime::class.java) - addToWhitelist(java.time.ZonedDateTime::class.java) - addToWhitelist(java.time.Year::class.java) - addToWhitelist(java.time.YearMonth::class.java) - addToWhitelist(java.time.MonthDay::class.java) - addToWhitelist(java.time.Period::class.java) - addToWhitelist(java.time.DayOfWeek::class.java) // No custom serialiser but it's an enum. + // Matches the list in TimeSerializers.addDefaultSerializers: + java.time.Duration::class.java, + java.time.Instant::class.java, + java.time.LocalDate::class.java, + java.time.LocalDateTime::class.java, + java.time.ZoneOffset::class.java, + java.time.ZoneId::class.java, + java.time.OffsetTime::class.java, + java.time.OffsetDateTime::class.java, + java.time.ZonedDateTime::class.java, + java.time.Year::class.java, + java.time.YearMonth::class.java, + java.time.MonthDay::class.java, + java.time.Period::class.java, + java.time.DayOfWeek::class.java, // No custom serialiser but it's an enum. - addToWhitelist(java.util.Collections.singletonMap("A", "B").javaClass) - addToWhitelist(java.util.LinkedHashMap::class.java) - addToWhitelist(BigDecimal::class.java) - addToWhitelist(LocalDate::class.java) - addToWhitelist(Period::class.java) - addToWhitelist(BitSet::class.java) - addToWhitelist(OnErrorNotImplementedException::class.java) + java.util.Collections.singletonMap("A", "B").javaClass, + java.util.LinkedHashMap::class.java, + BigDecimal::class.java, + LocalDate::class.java, + Period::class.java, + BitSet::class.java, + OnErrorNotImplementedException::class.java) } return true } diff --git a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/KryoSerializationCustomization.kt b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/KryoSerializationCustomization.kt index 6b1ab209b8..1ae01e271e 100644 --- a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/KryoSerializationCustomization.kt +++ b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/KryoSerializationCustomization.kt @@ -4,7 +4,7 @@ import com.esotericsoftware.kryo.Kryo import net.corda.core.serialization.SerializationCustomization class KryoSerializationCustomization(val kryo: Kryo) : SerializationCustomization { - override fun addToWhitelist(type: Class<*>) { - kryo.addToWhitelist(type) + override fun addToWhitelist(vararg types: Class<*>) { + kryo.addToWhitelist(*types) } } \ No newline at end of file diff --git a/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/plugin/SimmPluginRegistry.kt b/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/plugin/SimmPluginRegistry.kt index b965550b9a..2cbd235203 100644 --- a/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/plugin/SimmPluginRegistry.kt +++ b/samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/plugin/SimmPluginRegistry.kt @@ -26,18 +26,18 @@ class SimmPluginRegistry : CordaPluginRegistry() { override fun customizeSerialization(custom: SerializationCustomization): Boolean { custom.apply { // OpenGamma classes. - addToWhitelist(MultiCurrencyAmount::class.java) - addToWhitelist(Ordering.natural>().javaClass) - addToWhitelist(CurrencyAmount::class.java) - addToWhitelist(Currency::class.java) - addToWhitelist(InitialMarginTriple::class.java) - addToWhitelist(CordaMarketData::class.java) - addToWhitelist(CurrencyParameterSensitivities::class.java) - addToWhitelist(CurrencyParameterSensitivity::class.java) - addToWhitelist(DoubleArray::class.java) - addToWhitelist(CurveName::class.java) - addToWhitelist(TenorDateParameterMetadata::class.java) - addToWhitelist(Tenor::class.java) + addToWhitelist(MultiCurrencyAmount::class.java, + Ordering.natural>().javaClass, + CurrencyAmount::class.java, + Currency::class.java, + InitialMarginTriple::class.java, + CordaMarketData::class.java, + CurrencyParameterSensitivities::class.java, + CurrencyParameterSensitivity::class.java, + DoubleArray::class.java, + CurveName::class.java, + TenorDateParameterMetadata::class.java, + Tenor::class.java) } return true }