CORDA-205: Added some missing types to the whitelist and removed KeyPair. (#1603)

* Added some missing types to the whitelist and removed `KeyPair`.

* Add emptyList/Map/Set for Java.  Also check for duplicates.

* Remove java singleton collections since they are already added via kotlin listOf/mapOf/setOf.
This commit is contained in:
Rick Parker 2017-09-22 17:36:49 +01:00 committed by josecoll
parent f43702fe3d
commit 94a92fe82e
3 changed files with 16 additions and 9 deletions

View File

@ -21,6 +21,11 @@ class AMQPSerializationCustomization(val factory: SerializerFactory) : Serializa
}
fun SerializerFactory.addToWhitelist(vararg types: Class<*>) {
require(types.toSet().size == types.size) {
val duplicates = types.toMutableList()
types.toSet().forEach { duplicates -= it }
"Cannot add duplicate classes to the whitelist ($duplicates)."
}
for (type in types) {
(this.whitelist as? MutableClassWhitelist)?.add(type)
}

View File

@ -7,9 +7,6 @@ import net.corda.core.utilities.NetworkHostAndPort
import org.apache.activemq.artemis.api.core.SimpleString
import rx.Notification
import rx.exceptions.OnErrorNotImplementedException
import java.math.BigDecimal
import java.time.LocalDate
import java.time.Period
import java.util.*
/**
@ -34,19 +31,19 @@ class DefaultWhitelist : CordaPluginRegistry() {
mapOf(Unit to Unit).javaClass, // SingletonSet
NetworkHostAndPort::class.java,
SimpleString::class.java,
KryoException::class.java,
KryoException::class.java, // TODO: Will be removed when we migrate away from Kryo
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:
java.time.Duration::class.java,
java.time.Instant::class.java,
java.time.LocalDate::class.java,
java.time.LocalDateTime::class.java,
java.time.LocalTime::class.java,
java.time.ZoneOffset::class.java,
java.time.ZoneId::class.java,
java.time.OffsetTime::class.java,
@ -57,12 +54,12 @@ class DefaultWhitelist : CordaPluginRegistry() {
java.time.MonthDay::class.java,
java.time.Period::class.java,
java.time.DayOfWeek::class.java, // No custom serialiser but it's an enum.
java.time.Month::class.java, // No custom serialiser but it's an enum.
java.util.Collections.singletonMap("A", "B").javaClass,
java.util.Collections.emptyMap<Object, Object>().javaClass,
java.util.Collections.emptySet<Object>().javaClass,
java.util.Collections.emptyList<Object>().javaClass,
java.util.LinkedHashMap::class.java,
BigDecimal::class.java,
LocalDate::class.java,
Period::class.java,
BitSet::class.java,
OnErrorNotImplementedException::class.java,
StackTraceElement::class.java)

View File

@ -5,6 +5,11 @@ import net.corda.core.serialization.SerializationCustomization
class KryoSerializationCustomization(val kryo: Kryo) : SerializationCustomization {
override fun addToWhitelist(vararg types: Class<*>) {
require(types.toSet().size == types.size) {
val duplicates = types.toMutableList()
types.toSet().forEach { duplicates -= it }
"Cannot add duplicate classes to the whitelist ($duplicates)."
}
for (type in types) {
((kryo.classResolver as? CordaClassResolver)?.whitelist as? MutableClassWhitelist)?.add(type)
}