libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 9c36aa1839fd0279d5b045b28ae9313bfbf81c39
parent d795c43db7db7670eeb35e05a7689e5d376b933c
Author: Florian Dold <florian.dold@gmail.com>
Date:   Wed, 20 May 2020 16:51:43 +0530

use jackson

Diffstat:
Mintegration-tests/test-ebics.py | 2+-
Mnexus/build.gradle | 2+-
Mnexus/src/main/kotlin/tech/libeufin/nexus/Helpers.kt | 11+++++------
Mnexus/src/main/kotlin/tech/libeufin/nexus/Main.kt | 31++++++++++++++++---------------
Mutil/build.gradle | 2--
5 files changed, 23 insertions(+), 25 deletions(-)

diff --git a/integration-tests/test-ebics.py b/integration-tests/test-ebics.py @@ -231,7 +231,7 @@ assertResponse( assertResponse( post( "http://localhost:5001/bank-accounts/collected-transactions", - json=dict(type="ebics", name="my-ebics"), + json=dict(transport=dict(type="ebics", name="my-ebics")), headers=dict(Authorization=USER_AUTHORIZATION_HEADER), ) ) diff --git a/nexus/build.gradle b/nexus/build.gradle @@ -76,9 +76,9 @@ dependencies { implementation "io.ktor:ktor-server-core:$ktor_version" implementation "io.ktor:ktor-client-apache:$ktor_version" - implementation "io.ktor:ktor-gson:$ktor_version" implementation "io.ktor:ktor-server-netty:$ktor_version" implementation "io.ktor:ktor-auth:$ktor_version" + implementation "io.ktor:ktor-jackson:$ktor_version" testImplementation group: 'junit', name: 'junit', version: '4.12' } diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Helpers.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Helpers.kt @@ -1,7 +1,8 @@ package tech.libeufin.nexus -import com.google.gson.Gson -import com.google.gson.JsonObject +import com.fasterxml.jackson.databind.JsonNode +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.fasterxml.jackson.module.kotlin.treeToValue import io.ktor.client.HttpClient import io.ktor.http.HttpStatusCode import org.jetbrains.exposed.sql.and @@ -57,10 +58,8 @@ fun extractFirstBic(bankCodes: List<EbicsTypes.AbstractBankCode>?): String? { return null } -fun getTransportFromJsonObject(jo: JsonObject): Transport { - return Gson().fromJson( - expectNonNull(jo.get("transport")).asJsonObject, Transport::class.java - ) +fun getTransportFromJsonObject(jo: JsonNode): Transport { + return jacksonObjectMapper().treeToValue(jo.get("transport"), Transport::class.java) } /** diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt @@ -19,22 +19,25 @@ package tech.libeufin.nexus +import com.fasterxml.jackson.core.util.DefaultIndenter +import com.fasterxml.jackson.core.util.DefaultPrettyPrinter +import com.fasterxml.jackson.databind.JsonNode +import com.fasterxml.jackson.databind.SerializationFeature +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.github.ajalt.clikt.core.CliktCommand import com.github.ajalt.clikt.core.ProgramResult import com.github.ajalt.clikt.core.subcommands import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.options.option import com.github.ajalt.clikt.parameters.options.prompt -import com.google.gson.Gson -import com.google.gson.JsonObject import io.ktor.application.ApplicationCallPipeline import io.ktor.application.call import io.ktor.application.install import io.ktor.client.HttpClient import io.ktor.features.* -import io.ktor.gson.gson import io.ktor.http.ContentType import io.ktor.http.HttpStatusCode +import io.ktor.jackson.jackson import io.ktor.request.ApplicationReceivePipeline import io.ktor.request.ApplicationReceiveRequest import io.ktor.request.receive @@ -218,9 +221,13 @@ fun serverMain() { this.logger = tech.libeufin.nexus.logger } install(ContentNegotiation) { - gson { - setDateFormat(DateFormat.LONG) - setPrettyPrinting() + jackson { + enable(SerializationFeature.INDENT_OUTPUT) + setDefaultPrettyPrinter(DefaultPrettyPrinter().apply { + indentArraysWith(DefaultPrettyPrinter.FixedSpaceIndenter.instance) + indentObjectsWith(DefaultIndenter(" ", "\n")) + }) + //registerModule(JavaTimeModule()) } } install(StatusPages) { @@ -516,15 +523,12 @@ fun serverMain() { post("/bank-transports") { val userId = transaction { authenticateRequest(call.request.headers["Authorization"]).id.value } // user exists and is authenticated. - val body = call.receive<JsonObject>() + val body = call.receive<JsonNode>() val transport: Transport = getTransportFromJsonObject(body) when (transport.type) { "ebics" -> { if (body.get("backup") != null) { - val backup = Gson().fromJson( - body.get("backup").asJsonObject, - EbicsKeysBackupJson::class.java - ) + val backup = jacksonObjectMapper().treeToValue(body,EbicsKeysBackupJson::class.java) val (authKey, encKey, sigKey) = try { Triple( CryptoUtil.decryptKey( @@ -574,10 +578,7 @@ fun serverMain() { return@post } if (body.get("data") != null) { - val data = Gson().fromJson( - body.get("data"), - EbicsNewTransport::class.java - ) + val data = jacksonObjectMapper().treeToValue((body.get("data")), EbicsNewTransport::class.java) val pairA = CryptoUtil.generateRsaKeyPair(2048) val pairB = CryptoUtil.generateRsaKeyPair(2048) val pairC = CryptoUtil.generateRsaKeyPair(2048) diff --git a/util/build.gradle b/util/build.gradle @@ -28,8 +28,6 @@ sourceSets { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" - implementation "io.ktor:ktor-gson:1.1.5" - implementation group: 'io.ktor', name: 'ktor-gson', version: '0.9.0' implementation "org.jetbrains.exposed:exposed:0.17.6" implementation "io.ktor:ktor-server-netty:1.2.4" implementation "ch.qos.logback:logback-classic:1.2.3"