diff --git a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/amqp/PropertySerializers.kt b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/amqp/PropertySerializers.kt index 9029dd171b..4687c1173b 100644 --- a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/amqp/PropertySerializers.kt +++ b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/amqp/PropertySerializers.kt @@ -34,7 +34,12 @@ class PublicPropertyReader(private val readMethod: Method?) : PropertyReader() { // is: https://youtrack.jetbrains.com/issue/KT-13077 // TODO: Revisit this when Kotlin issue is fixed. - loggerFor().error("Unexpected internal Kotlin error", e) + // So this used to report as an error, but given we serialise exceptions all the time it + // provides for very scary log files so move this to trace level + loggerFor().let { logger -> + logger.trace("Using kotlin introspection on internal type ${this.declaringClass}") + logger.trace("Unexpected internal Kotlin error", e) + } return true } } @@ -70,7 +75,13 @@ class PrivatePropertyReader(val field: Field, parentType: Type) : PropertyReader // This might happen for some types, e.g. kotlin.Throwable? - the root cause of the issue // is: https://youtrack.jetbrains.com/issue/KT-13077 // TODO: Revisit this when Kotlin issue is fixed. - loggerFor().error("Unexpected internal Kotlin error", e) + + // So this used to report as an error, but given we serialise exceptions all the time it + // provides for very scary log files so move this to trace level + loggerFor().let { logger -> + logger.trace("Using kotlin introspection on internal type ${field}") + logger.trace("Unexpected internal Kotlin error", e) + } true } } diff --git a/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/amqp/SerializationOutputTests.kt b/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/amqp/SerializationOutputTests.kt index e69a949dbd..5fc4359e88 100644 --- a/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/amqp/SerializationOutputTests.kt +++ b/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/amqp/SerializationOutputTests.kt @@ -5,6 +5,7 @@ package net.corda.nodeapi.internal.serialization.amqp import com.nhaarman.mockito_kotlin.doReturn import com.nhaarman.mockito_kotlin.whenever import net.corda.client.rpc.RPCException +import net.corda.core.CordaException import net.corda.core.CordaRuntimeException import net.corda.core.contracts.* import net.corda.core.crypto.SecureHash @@ -1177,5 +1178,13 @@ class SerializationOutputTests(private val compression: CordaSerializationEncodi PrivateAckWrapper.serialize() } + @Test + fun throwable() { + class TestException(message: String?, cause: Throwable?) : CordaException(message, cause) + val testExcp = TestException("hello", Throwable().apply { stackTrace = Thread.currentThread().stackTrace } ) + val factory = testDefaultFactoryNoEvolution() + SerializationOutput(factory).serialize(testExcp) + + } }