From fffcfff269c3bbada0e4b314e06c9163bcf815e5 Mon Sep 17 00:00:00 2001 From: Clinton Alexander Date: Mon, 12 Jun 2017 20:56:07 +0100 Subject: [PATCH] Added correct json support fields to allow deserialisation of IRS data via Jackson. --- .../src/main/kotlin/net/corda/jackson/JacksonSupport.kt | 1 - .../src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt | 5 ++++- .../irs-demo/src/main/kotlin/net/corda/irs/contract/IRS.kt | 2 ++ .../src/main/kotlin/net/corda/irs/contract/IRSUtils.kt | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/client/jackson/src/main/kotlin/net/corda/jackson/JacksonSupport.kt b/client/jackson/src/main/kotlin/net/corda/jackson/JacksonSupport.kt index 3fa315bbb6..f16165fb69 100644 --- a/client/jackson/src/main/kotlin/net/corda/jackson/JacksonSupport.kt +++ b/client/jackson/src/main/kotlin/net/corda/jackson/JacksonSupport.kt @@ -251,7 +251,6 @@ object JacksonSupport { object CalendarSerializer : JsonSerializer() { override fun serialize(obj: BusinessCalendar, generator: JsonGenerator, context: SerializerProvider) { - println(obj) val calendarName = BusinessCalendar.calendars.find { BusinessCalendar.getInstance(it) == obj } if(calendarName != null) { generator.writeString(calendarName) diff --git a/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt b/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt index ffd3fa8642..be3d56552f 100644 --- a/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt +++ b/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt @@ -69,16 +69,19 @@ class IRSDemoTest : IntegrationTestCategory { assertThat(getTradeCount(nodeAApi)).isEqualTo(numADeals + 1) assertThat(getTradeCount(nodeBApi)).isEqualTo(numBDeals + 1) + assertThat(getFloatingLegFixCount(nodeAApi) == 0) // Wait until the initial trade and all scheduled fixings up to the current date have finished nextFixingDates.firstWithTimeout(maxWaitTime){ it == null || it > currentDate } runDateChange(nodeBApi) nextFixingDates.firstWithTimeout(maxWaitTime) { it == null || it > futureDate } - assertThat(getTrades(nodeAApi)[0]) + assertThat(getFloatingLegFixCount(nodeAApi) > 0) } } + fun getFloatingLegFixCount(nodeApi: HttpApi) = getTrades(nodeApi)[0].calculation.floatingLegPaymentSchedule.count { it.value.rate.ratioUnit != null } + fun getFixingDateObservable(config: FullNodeConfiguration): Observable { val client = CordaRPCClient(config.rpcAddress!!) val proxy = client.start("user", "password").proxy diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/contract/IRS.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/contract/IRS.kt index f929e2bce0..284b57250e 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/contract/IRS.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/contract/IRS.kt @@ -109,6 +109,7 @@ abstract class RatePaymentEvent(date: LocalDate, * Assumes that the rate is valid. */ @CordaSerializable +@JsonIgnoreProperties(ignoreUnknown = true) class FixedRatePaymentEvent(date: LocalDate, accrualStartDate: LocalDate, accrualEndDate: LocalDate, @@ -655,6 +656,7 @@ class InterestRateSwap : Contract { /** * The state class contains the 4 major data classes. */ + @JsonIgnoreProperties("parties", "participants", ignoreUnknown = true) data class State( val fixedLeg: FixedLeg, val floatingLeg: FloatingLeg, diff --git a/samples/irs-demo/src/main/kotlin/net/corda/irs/contract/IRSUtils.kt b/samples/irs-demo/src/main/kotlin/net/corda/irs/contract/IRSUtils.kt index 9e1829976d..f836c89ca1 100644 --- a/samples/irs-demo/src/main/kotlin/net/corda/irs/contract/IRSUtils.kt +++ b/samples/irs-demo/src/main/kotlin/net/corda/irs/contract/IRSUtils.kt @@ -1,6 +1,7 @@ package net.corda.irs.contract import com.fasterxml.jackson.annotation.JsonIgnore +import com.fasterxml.jackson.annotation.JsonIgnoreProperties import net.corda.core.contracts.Amount import net.corda.core.contracts.Tenor import net.corda.core.serialization.CordaSerializable @@ -37,6 +38,7 @@ val String.percent: PercentageRatioUnit get() = PercentageRatioUnit(this) /** * Parent of the Rate family. Used to denote fixed rates, floating rates, reference rates etc. */ +@JsonIgnoreProperties(ignoreUnknown = true) open class Rate(val ratioUnit: RatioUnit? = null) { override fun equals(other: Any?): Boolean { if (this === other) return true