mirror of
https://github.com/corda/corda.git
synced 2025-06-24 02:04:12 +00:00
Extract jackson dependency from finance-workflows (#5163)
Extract jackson dependency from finance-workflows and move it to IRS Demo where it is actually needed
This commit is contained in:
@ -3,7 +3,6 @@ package net.corda.irs.contract
|
||||
import com.nhaarman.mockito_kotlin.doReturn
|
||||
import com.nhaarman.mockito_kotlin.mock
|
||||
import com.nhaarman.mockito_kotlin.whenever
|
||||
import loadTestCalendar
|
||||
import net.corda.core.contracts.Amount
|
||||
import net.corda.core.contracts.UniqueIdentifier
|
||||
import net.corda.core.crypto.generateKeyPair
|
||||
@ -15,6 +14,7 @@ import net.corda.core.utilities.seconds
|
||||
import net.corda.finance.DOLLARS
|
||||
import net.corda.finance.EUR
|
||||
import net.corda.finance.contracts.*
|
||||
import net.corda.finance.workflows.utils.loadTestCalendar
|
||||
import net.corda.node.services.api.IdentityServiceInternal
|
||||
import net.corda.testing.common.internal.addNotary
|
||||
import net.corda.testing.common.internal.testNetworkParameters
|
||||
|
@ -14,6 +14,8 @@ dependencies {
|
||||
|
||||
// Corda integration dependencies
|
||||
cordaCompile project(':core')
|
||||
|
||||
compile("com.fasterxml.jackson.module:jackson-module-kotlin:$jackson_version")
|
||||
|
||||
// only included to control the `DemoClock` as part of the demo application
|
||||
// normally `:node` should not be depended on in any CorDapps
|
||||
|
@ -1,7 +1,6 @@
|
||||
package net.corda.irs.api
|
||||
|
||||
import co.paralleluniverse.fibers.Suspendable
|
||||
import loadTestCalendar
|
||||
import net.corda.core.contracts.Command
|
||||
import net.corda.core.crypto.TransactionSignature
|
||||
import net.corda.core.flows.*
|
||||
@ -16,6 +15,7 @@ import net.corda.finance.contracts.BusinessCalendar
|
||||
import net.corda.finance.contracts.Fix
|
||||
import net.corda.finance.contracts.FixOf
|
||||
import net.corda.finance.contracts.Tenor
|
||||
import net.corda.finance.workflows.utils.loadTestCalendar
|
||||
import net.corda.irs.flows.RatesFixFlow
|
||||
import net.corda.irs.math.CubicSplineInterpolator
|
||||
import net.corda.irs.math.Interpolator
|
||||
|
@ -0,0 +1,63 @@
|
||||
@file:JvmName("FinanceJSONSupport")
|
||||
|
||||
package net.corda.irs.flows.plugin
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator
|
||||
import com.fasterxml.jackson.core.JsonParseException
|
||||
import com.fasterxml.jackson.core.JsonParser
|
||||
import com.fasterxml.jackson.databind.*
|
||||
import com.fasterxml.jackson.databind.deser.std.StringArrayDeserializer
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule
|
||||
import net.corda.finance.contracts.BusinessCalendar
|
||||
import net.corda.finance.contracts.Expression
|
||||
import net.corda.finance.workflows.utils.TEST_CALENDAR_NAMES
|
||||
import net.corda.finance.workflows.utils.loadTestCalendar
|
||||
import java.time.LocalDate
|
||||
import java.util.*
|
||||
|
||||
fun registerFinanceJSONMappers(objectMapper: ObjectMapper) {
|
||||
val financeModule = SimpleModule("finance").apply {
|
||||
addSerializer(BusinessCalendar::class.java, CalendarSerializer)
|
||||
addDeserializer(BusinessCalendar::class.java, CalendarDeserializer)
|
||||
addSerializer(Expression::class.java, ExpressionSerializer)
|
||||
addDeserializer(Expression::class.java, ExpressionDeserializer)
|
||||
}
|
||||
objectMapper.registerModule(financeModule)
|
||||
}
|
||||
|
||||
data class BusinessCalendarWrapper(val holidayDates: SortedSet<LocalDate>) {
|
||||
fun toCalendar() = BusinessCalendar(holidayDates)
|
||||
}
|
||||
|
||||
object CalendarSerializer : JsonSerializer<BusinessCalendar>() {
|
||||
override fun serialize(obj: BusinessCalendar, generator: JsonGenerator, context: SerializerProvider) {
|
||||
val calendarName = TEST_CALENDAR_NAMES.find { loadTestCalendar(it) == obj }
|
||||
if (calendarName != null) {
|
||||
generator.writeString(calendarName)
|
||||
} else {
|
||||
generator.writeObject(BusinessCalendarWrapper(obj.holidayDates))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object CalendarDeserializer : JsonDeserializer<BusinessCalendar>() {
|
||||
override fun deserialize(parser: JsonParser, context: DeserializationContext): BusinessCalendar {
|
||||
return try {
|
||||
try {
|
||||
StringArrayDeserializer.instance.deserialize(parser, context).fold(BusinessCalendar.EMPTY) { acc, name -> acc + loadTestCalendar(name) }
|
||||
} catch (e: Exception) {
|
||||
parser.readValueAs(BusinessCalendarWrapper::class.java).toCalendar()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
throw JsonParseException(parser, "Invalid calendar(s) ${parser.text}: ${e.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object ExpressionSerializer : JsonSerializer<Expression>() {
|
||||
override fun serialize(expr: Expression, generator: JsonGenerator, provider: SerializerProvider) = generator.writeString(expr.expr)
|
||||
}
|
||||
|
||||
object ExpressionDeserializer : JsonDeserializer<Expression>() {
|
||||
override fun deserialize(parser: JsonParser, context: DeserializationContext): Expression = Expression(parser.text)
|
||||
}
|
@ -19,7 +19,7 @@ import net.corda.core.utilities.NetworkHostAndPort
|
||||
import net.corda.core.utilities.contextLogger
|
||||
import net.corda.core.utilities.getOrThrow
|
||||
import net.corda.core.utilities.seconds
|
||||
import net.corda.finance.workflows.plugin.registerFinanceJSONMappers
|
||||
import net.corda.irs.flows.plugin.registerFinanceJSONMappers
|
||||
import net.corda.irs.contract.InterestRateSwap
|
||||
import net.corda.irs.web.IrsDemoWebApplication
|
||||
import net.corda.test.spring.springDriver
|
||||
|
@ -6,7 +6,7 @@ import net.corda.client.rpc.CordaRPCClient
|
||||
import net.corda.client.rpc.RPCException
|
||||
import net.corda.core.messaging.CordaRPCOps
|
||||
import net.corda.core.utilities.NetworkHostAndPort
|
||||
import net.corda.finance.workflows.plugin.registerFinanceJSONMappers
|
||||
import net.corda.irs.flows.plugin.registerFinanceJSONMappers
|
||||
import org.slf4j.LoggerFactory
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
|
@ -1,8 +1,6 @@
|
||||
package net.corda.vega.webplugin
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import net.corda.core.serialization.SerializationWhitelist
|
||||
import net.corda.finance.workflows.plugin.registerFinanceJSONMappers
|
||||
import net.corda.vega.api.PortfolioApi
|
||||
import net.corda.webserver.services.WebServerPluginRegistry
|
||||
import java.util.function.Function
|
||||
@ -16,5 +14,4 @@ import java.util.function.Function
|
||||
class SimmPlugin : WebServerPluginRegistry {
|
||||
override val webApis = listOf(Function(::PortfolioApi))
|
||||
override val staticServeDirs: Map<String, String> = emptyMap()
|
||||
override fun customizeJSONSerialization(om: ObjectMapper): Unit = registerFinanceJSONMappers(om)
|
||||
}
|
||||
|
Reference in New Issue
Block a user