mirror of
https://github.com/corda/corda.git
synced 2024-12-18 20:47:57 +00:00
Refactor the JSON support out into a separate module, :corda:jackson, as Jackson/JSON configuration is generally useful outside the context of web servers.
This commit is contained in:
parent
cb91842f18
commit
2628a10c51
@ -179,7 +179,7 @@ bintrayConfig {
|
|||||||
projectUrl = 'https://github.com/corda/corda'
|
projectUrl = 'https://github.com/corda/corda'
|
||||||
gpgSign = true
|
gpgSign = true
|
||||||
gpgPassphrase = System.getenv('CORDA_BINTRAY_GPG_PASSPHRASE')
|
gpgPassphrase = System.getenv('CORDA_BINTRAY_GPG_PASSPHRASE')
|
||||||
publications = ['client', 'core', 'corda', 'corda-webserver', 'finance', 'node', 'node-schemas', 'test-utils']
|
publications = ['client', 'core', 'corda', 'corda-webserver', 'finance', 'node', 'node-schemas', 'test-utils', 'jackson']
|
||||||
license {
|
license {
|
||||||
name = 'Apache-2.0'
|
name = 'Apache-2.0'
|
||||||
url = 'https://www.apache.org/licenses/LICENSE-2.0'
|
url = 'https://www.apache.org/licenses/LICENSE-2.0'
|
||||||
|
14
client/jackson/build.gradle
Normal file
14
client/jackson/build.gradle
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
apply plugin: 'java'
|
||||||
|
apply plugin: 'kotlin'
|
||||||
|
apply plugin: 'net.corda.plugins.publish-utils'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile project(':core')
|
||||||
|
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
|
compile ("com.fasterxml.jackson.module:jackson-module-kotlin:${jackson_version}")
|
||||||
|
testCompile "junit:junit:$junit_version"
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package net.corda.webserver.utilities
|
package net.corda.jackson
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
import com.fasterxml.jackson.core.JsonParseException
|
import com.fasterxml.jackson.core.JsonParseException
|
||||||
@ -13,10 +13,10 @@ import net.corda.core.contracts.BusinessCalendar
|
|||||||
import net.corda.core.crypto.*
|
import net.corda.core.crypto.*
|
||||||
import net.corda.core.messaging.CordaRPCOps
|
import net.corda.core.messaging.CordaRPCOps
|
||||||
import net.corda.core.node.NodeInfo
|
import net.corda.core.node.NodeInfo
|
||||||
|
import net.corda.core.node.services.IdentityService
|
||||||
import net.corda.core.serialization.deserialize
|
import net.corda.core.serialization.deserialize
|
||||||
import net.corda.core.serialization.serialize
|
import net.corda.core.serialization.serialize
|
||||||
import net.i2p.crypto.eddsa.EdDSAPublicKey
|
import net.i2p.crypto.eddsa.EdDSAPublicKey
|
||||||
import net.corda.core.node.services.IdentityService
|
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
@ -25,9 +25,9 @@ import java.time.LocalDateTime
|
|||||||
* Utilities and serialisers for working with JSON representations of basic types. This adds Jackson support for
|
* Utilities and serialisers for working with JSON representations of basic types. This adds Jackson support for
|
||||||
* the java.time API, some core types, and Kotlin data classes.
|
* the java.time API, some core types, and Kotlin data classes.
|
||||||
*
|
*
|
||||||
* TODO: This does not belong in node. It should be moved to the client module or a dedicated webserver module.
|
* Note that Jackson can also be used to serialise/deserialise other formats such as Yaml and XML.
|
||||||
*/
|
*/
|
||||||
object JsonSupport {
|
object JacksonSupport {
|
||||||
interface PartyObjectMapper {
|
interface PartyObjectMapper {
|
||||||
fun partyFromName(partyName: String): Party?
|
fun partyFromName(partyName: String): Party?
|
||||||
fun partyFromKey(owningKey: CompositeKey): Party?
|
fun partyFromKey(owningKey: CompositeKey): Party?
|
||||||
@ -249,3 +249,4 @@ object JsonSupport {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,20 +1,18 @@
|
|||||||
package net.corda.webserver
|
package net.corda.jackson
|
||||||
|
|
||||||
import com.pholser.junit.quickcheck.From
|
import com.pholser.junit.quickcheck.From
|
||||||
import com.pholser.junit.quickcheck.Property
|
import com.pholser.junit.quickcheck.Property
|
||||||
import com.pholser.junit.quickcheck.runner.JUnitQuickcheck
|
import com.pholser.junit.quickcheck.runner.JUnitQuickcheck
|
||||||
import net.corda.core.testing.PublicKeyGenerator
|
import net.corda.core.testing.PublicKeyGenerator
|
||||||
import net.corda.webserver.utilities.JsonSupport
|
|
||||||
import net.i2p.crypto.eddsa.EdDSAPublicKey
|
import net.i2p.crypto.eddsa.EdDSAPublicKey
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import java.security.PublicKey
|
import java.security.PublicKey
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
@RunWith(JUnitQuickcheck::class)
|
@RunWith(JUnitQuickcheck::class)
|
||||||
class JsonSupportTest {
|
class JacksonSupportTest {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val mapper = JsonSupport.createNonRpcMapper()
|
val mapper = JacksonSupport.createNonRpcMapper()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Property
|
@Property
|
@ -44,6 +44,7 @@ sourceSets {
|
|||||||
dependencies {
|
dependencies {
|
||||||
compile project(':core')
|
compile project(':core')
|
||||||
compile project(':node') // TODO: Break this dependency
|
compile project(':node') // TODO: Break this dependency
|
||||||
|
compile project(':client:jackson')
|
||||||
|
|
||||||
// Web stuff: for HTTP[S] servlets
|
// Web stuff: for HTTP[S] servlets
|
||||||
compile "org.eclipse.jetty:jetty-servlet:${jetty_version}"
|
compile "org.eclipse.jetty:jetty-servlet:${jetty_version}"
|
||||||
|
@ -2,7 +2,7 @@ package net.corda.webserver.servlets
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import net.corda.core.messaging.CordaRPCOps
|
import net.corda.core.messaging.CordaRPCOps
|
||||||
import net.corda.webserver.utilities.JsonSupport
|
import net.corda.jackson.JacksonSupport
|
||||||
import javax.ws.rs.ext.ContextResolver
|
import javax.ws.rs.ext.ContextResolver
|
||||||
import javax.ws.rs.ext.Provider
|
import javax.ws.rs.ext.Provider
|
||||||
|
|
||||||
@ -12,6 +12,6 @@ import javax.ws.rs.ext.Provider
|
|||||||
*/
|
*/
|
||||||
@Provider
|
@Provider
|
||||||
class ObjectMapperConfig(rpc: CordaRPCOps) : ContextResolver<ObjectMapper> {
|
class ObjectMapperConfig(rpc: CordaRPCOps) : ContextResolver<ObjectMapper> {
|
||||||
val defaultObjectMapper = JsonSupport.createDefaultMapper(rpc)
|
val defaultObjectMapper = JacksonSupport.createDefaultMapper(rpc)
|
||||||
override fun getContext(type: Class<*>) = defaultObjectMapper
|
override fun getContext(type: Class<*>) = defaultObjectMapper
|
||||||
}
|
}
|
||||||
|
@ -18,13 +18,11 @@ import net.corda.flows.TwoPartyDealFlow.Acceptor
|
|||||||
import net.corda.flows.TwoPartyDealFlow.AutoOffer
|
import net.corda.flows.TwoPartyDealFlow.AutoOffer
|
||||||
import net.corda.flows.TwoPartyDealFlow.Instigator
|
import net.corda.flows.TwoPartyDealFlow.Instigator
|
||||||
import net.corda.irs.contract.InterestRateSwap
|
import net.corda.irs.contract.InterestRateSwap
|
||||||
|
import net.corda.jackson.JacksonSupport
|
||||||
import net.corda.node.utilities.databaseTransaction
|
import net.corda.node.utilities.databaseTransaction
|
||||||
import net.corda.testing.initiateSingleShotFlow
|
import net.corda.testing.initiateSingleShotFlow
|
||||||
import net.corda.testing.node.InMemoryMessagingNetwork
|
import net.corda.testing.node.InMemoryMessagingNetwork
|
||||||
import net.corda.testing.node.MockIdentityService
|
import net.corda.testing.node.MockIdentityService
|
||||||
import net.i2p.crypto.eddsa.KeyPairGenerator
|
|
||||||
import java.security.SecureRandom
|
|
||||||
import net.corda.webserver.utilities.JsonSupport
|
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -33,7 +31,7 @@ import java.util.*
|
|||||||
* A simulation in which banks execute interest rate swaps with each other, including the fixing events.
|
* A simulation in which banks execute interest rate swaps with each other, including the fixing events.
|
||||||
*/
|
*/
|
||||||
class IRSSimulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: InMemoryMessagingNetwork.LatencyCalculator?) : Simulation(networkSendManuallyPumped, runAsync, latencyInjector) {
|
class IRSSimulation(networkSendManuallyPumped: Boolean, runAsync: Boolean, latencyInjector: InMemoryMessagingNetwork.LatencyCalculator?) : Simulation(networkSendManuallyPumped, runAsync, latencyInjector) {
|
||||||
val om = JsonSupport.createInMemoryMapper(MockIdentityService(network.identities))
|
val om = JacksonSupport.createInMemoryMapper(MockIdentityService(network.identities))
|
||||||
|
|
||||||
init {
|
init {
|
||||||
currentDateAndTime = LocalDate.of(2016, 3, 8).atStartOfDay()
|
currentDateAndTime = LocalDate.of(2016, 3, 8).atStartOfDay()
|
||||||
|
@ -9,6 +9,7 @@ include 'node'
|
|||||||
include 'node:capsule'
|
include 'node:capsule'
|
||||||
include 'node:webserver'
|
include 'node:webserver'
|
||||||
include 'client'
|
include 'client'
|
||||||
|
include 'client:jackson'
|
||||||
include 'experimental'
|
include 'experimental'
|
||||||
include 'experimental:sandbox'
|
include 'experimental:sandbox'
|
||||||
include 'test-utils'
|
include 'test-utils'
|
||||||
@ -22,4 +23,3 @@ include 'samples:network-visualiser'
|
|||||||
include 'samples:simm-valuation-demo'
|
include 'samples:simm-valuation-demo'
|
||||||
include 'samples:raft-notary-demo'
|
include 'samples:raft-notary-demo'
|
||||||
include 'samples:bank-of-corda-demo'
|
include 'samples:bank-of-corda-demo'
|
||||||
|
|
||||||
|
@ -3,8 +3,11 @@ package net.corda.testing.http
|
|||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import com.fasterxml.jackson.module.kotlin.KotlinModule
|
import com.fasterxml.jackson.module.kotlin.KotlinModule
|
||||||
import net.corda.core.utilities.loggerFor
|
import net.corda.core.utilities.loggerFor
|
||||||
import net.corda.webserver.utilities.JsonSupport
|
import net.corda.jackson.JacksonSupport
|
||||||
import okhttp3.*
|
import okhttp3.MediaType
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.Request
|
||||||
|
import okhttp3.RequestBody
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
@ -19,7 +22,7 @@ object HttpUtils {
|
|||||||
.readTimeout(60, TimeUnit.SECONDS).build()
|
.readTimeout(60, TimeUnit.SECONDS).build()
|
||||||
}
|
}
|
||||||
val defaultMapper: ObjectMapper by lazy {
|
val defaultMapper: ObjectMapper by lazy {
|
||||||
ObjectMapper().registerModule(JsonSupport.javaTimeModule).registerModule(KotlinModule())
|
ObjectMapper().registerModule(JacksonSupport.javaTimeModule).registerModule(KotlinModule())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun putJson(url: URL, data: String) : Boolean {
|
fun putJson(url: URL, data: String) : Boolean {
|
||||||
|
Loading…
Reference in New Issue
Block a user