From 0541d128e47cc27a1bc9a3fbadf449e489c096da Mon Sep 17 00:00:00 2001 From: Katelyn Baker Date: Tue, 18 Jul 2017 09:55:14 +0100 Subject: [PATCH] Fixes for nullable Prim Types Commit messages from Squashed Commits - Carpenter doesn't work with nullable prim types - Fix to get Cherry picks up to date with Master --- .../carpenter/AMQPSchemaExtensions.kt | 2 +- .../amqp/DeserializeNeedingCarpentryTests.kt | 26 ++++++++++++++++--- .../carpenter/ClassCarpenterTestUtils.kt | 1 + 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/carpenter/AMQPSchemaExtensions.kt b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/carpenter/AMQPSchemaExtensions.kt index 355e7f4b92..93cec43ea1 100644 --- a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/carpenter/AMQPSchemaExtensions.kt +++ b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/carpenter/AMQPSchemaExtensions.kt @@ -94,7 +94,7 @@ fun CompositeType.carpenterSchema( fun AMQPField.getTypeAsClass( classLoaders: List = listOf (ClassLoader.getSystemClassLoader()) ) = when (type) { - "int" -> Int::class.javaPrimitiveType!! + "int" -> if (mandatory) Integer::class.java else Int::class.javaPrimitiveType!! "string" -> String::class.java "short" -> Short::class.javaPrimitiveType!! "long" -> Long::class.javaPrimitiveType!! diff --git a/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/amqp/DeserializeNeedingCarpentryTests.kt b/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/amqp/DeserializeNeedingCarpentryTests.kt index 29e238361c..9b6f572f9a 100644 --- a/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/amqp/DeserializeNeedingCarpentryTests.kt +++ b/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/amqp/DeserializeNeedingCarpentryTests.kt @@ -2,10 +2,8 @@ package net.corda.core.serialization.amqp import org.junit.Test import kotlin.test.* -import net.corda.core.serialization.carpenter.ClassCarpenter -import net.corda.core.serialization.carpenter.ClassSchema -import net.corda.core.serialization.carpenter.InterfaceSchema -import net.corda.core.serialization.carpenter.NonNullableField +import net.corda.core.serialization.carpenter.* +import java.lang.Character interface I { fun getName() : String @@ -125,4 +123,24 @@ class DeserializeNeedingCarpentryTests { assertEquals("timmy", deserializedObj::class.java.getMethod("getName").invoke(deserializedObj)) assertEquals(12, deserializedObj::class.java.getMethod("getAge").invoke(deserializedObj)) } + + @Test + fun manyTypes() { + val cc = ClassCarpenter() + + val manyClass = cc.build (ClassSchema( + "many", + mapOf( + "intA" to NonNullableField (Int::class.java), + "intB" to NullableField (Integer::class.java), + "strA" to NonNullableField (String::class.java), + "strB" to NullableField (String::class.java), + "charA" to NonNullableField (Char::class.java), + "charB" to NullableField (Character::class.java)))) + + val serialisedBytes = SerializationOutput().serialize( + manyClass.constructors.first().newInstance(1, 2, "a", "b", 'c', 'd')) + + val deserializedObj = DeserializationInput().deserialize(serialisedBytes) + } } diff --git a/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/carpenter/ClassCarpenterTestUtils.kt b/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/carpenter/ClassCarpenterTestUtils.kt index 3075f2aec4..7601ab1834 100644 --- a/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/carpenter/ClassCarpenterTestUtils.kt +++ b/node-api/src/test/kotlin/net/corda/nodeapi/internal/serialization/carpenter/ClassCarpenterTestUtils.kt @@ -2,6 +2,7 @@ package net.corda.nodeapi.internal.serialization.carpenter import net.corda.nodeapi.internal.serialization.amqp.Field import net.corda.nodeapi.internal.serialization.amqp.Schema +import net.corda.nodeapi.internal.serialization.amqp.CompositeType import net.corda.nodeapi.internal.serialization.amqp.SerializerFactory import net.corda.nodeapi.internal.serialization.amqp.SerializationOutput