Я использую Braid в качестве веб-сервера для моего приложения. Когда я переключился на предприятие с ОС Corda, я начал получать следующую ошибку при запуске своего приложения:
[ERROR] 2019-10-21T18:13:24,310Z [main] internal.Node.installCordaServices - Corda service sg.tradecloud.webserver.BraidService failed to instantiate. Reason was: com.fasterxml.jackson.module.kotlin.KotlinModule.<init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V [errorCode=19x6zj9, moreInformationAt=https://errors.corda.net/ENT/4.2/19x6zj9] {}
java.lang.NoSuchMethodError: com.fasterxml.jackson.module.kotlin.KotlinModule.<init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
at io.bluebank.braid.core.json.BraidJacksonInit.<clinit>(Serialisation.kt:31) ~[?:?]
at io.bluebank.braid.corda.serialisation.BraidCordaJacksonInit.<clinit>(Register.kt:36) ~[?:?]
at io.bluebank.braid.corda.BraidServer.<clinit>(BraidServer.kt:34) ~[?:?]
at io.bluebank.braid.corda.BraidConfig.bootstrapBraid(BraidConfig.kt:140) ~[?:?]
at io.bluebank.braid.corda.BraidConfig.bootstrapBraid$default(BraidConfig.kt:139) ~[?:?]
at sg.tradecloud.webserver.BraidService.configureBraid(BraidService.kt:73) ~[?:?]
at sg.tradecloud.webserver.BraidService.<init>(BraidService.kt:38) ~[?:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_202]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_202]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_202]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_202]
at net.corda.node.internal.AbstractNode.installCordaService(AbstractNode.kt:716) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.AbstractNode.installCordaServices(AbstractNode.kt:643) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.AbstractNode.access$installCordaServices(AbstractNode.kt:131) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.AbstractNode$start$8.invoke(AbstractNode.kt:416) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.AbstractNode$start$8.invoke(AbstractNode.kt:131) ~[corda-node-4.2.jar:?]
at net.corda.nodeapi.internal.persistence.CordaPersistence.inTopLevelTransaction(CordaPersistence.kt:259) ~[corda-node-api-4.2.jar:?]
at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:235) ~[corda-node-api-4.2.jar:?]
at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:245) ~[corda-node-api-4.2.jar:?]
at net.corda.node.internal.AbstractNode.start(AbstractNode.kt:405) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.Node.start(Node.kt:506) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.EnterpriseNode.start(EnterpriseNode.kt:207) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.NodeStartup.startNode(NodeStartup.kt:190) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.NodeStartupCli$runProgram$2.run(NodeStartup.kt:113) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.NodeStartup$initialiseAndRun$5.invoke(NodeStartup.kt:167) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.NodeStartup$initialiseAndRun$5.invoke(NodeStartup.kt:120) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.NodeStartupLogging$DefaultImpls.attempt(NodeStartup.kt:498) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.NodeStartup.attempt(NodeStartup.kt:120) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.NodeStartup.initialiseAndRun(NodeStartup.kt:166) ~[corda-node-4.2.jar:?]
at net.corda.node.internal.NodeStartupCli.runProgram(NodeStartup.kt:111) ~[corda-node-4.2.jar:?]
at net.corda.cliutils.CordaCliWrapper.call(CordaCliWrapper.kt:190) ~[corda-tools-cliutils-4.2.jar:?]
at net.corda.cliutils.CordaCliWrapper.call(CordaCliWrapper.kt:156) ~[corda-tools-cliutils-4.2.jar:?]
at picocli.CommandLine.execute(CommandLine.java:1056) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine.access$900(CommandLine.java:142) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine$RunLast.handle(CommandLine.java:1246) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine$RunLast.handle(CommandLine.java:1214) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:1122) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine.parseWithHandlers(CommandLine.java:1405) ~[picocli-3.8.0.jar:3.8.0]
at net.corda.cliutils.CordaCliWrapperKt.start(CordaCliWrapper.kt:73) ~[corda-tools-cliutils-4.2.jar:?]
Я провел некоторые исследования, и кажется, что ошибка была вызвана тем, что Corda Enterprise использует * 1004. * версии 2.9.7 и которая переопределяет стандартную для Braid 2.9.5 , и Braid, похоже, не понравится.
Если вы просматриваете репоjackson-module-kotlin
и посмотрите на конструктор класса KotlinModule
, вы увидите следующее изменение, в 2.9.5 оно было объявлено как
class KotlinModule(val reflectionCacheSize: Int = 512) : SimpleModule(PackageVersion.VERSION)
и в 2.9.7 оно было изменено на
class KotlinModule(val reflectionCacheSize: Int = 512, val nullToEmptyCollection: Boolean = false, val nullToEmptyMap: Boolean = false) : SimpleModule(PackageVersion.VERSION)
, что приводит к тому, что api отражения не может его найти.
Что я могу сделать, чтобы это исправить?