Я пытаюсь открыть API для CorDapp, но функции не отображаются. Я запускаю узлы командой ./runnodes. Процесс сборки прошел успешно. Также реализован WebserverPluginRegistry. Но если я попытаюсь подключиться к веб-серверу с помощью http: // локальный: 10009 /, я получаю сообщение «Нет установленного пользовательского Cordapp». Я должен получить это сообщение только в том случае, если плагин пуст. Но Плагин не пустой!
Если я попытаюсь подключить конечные точки веб-сервера узла с помощью http: // локальный: 10009 / api / XXX / me, я получаю сообщение об ошибке: HTTP ERROR 404 Проблема с доступом к api / XXX / me Причина: не найдено
Я знаю, что это очень расплывчато, но я не могу найти никаких ошибок, указывающих на конкретную область. Любая помощь будет оценена по достоинству.
TransactionAPI.kt
package com.YYY.api
import ……
val SERVICE_NAMES = listOf("Notary", "Network Map Service")
// This API is accessible from /api/XXX. All paths specified below are relative to it.
@Path("XXX")
class TransactionApi(private val rpcOps: CordaRPCOps) {
private val myLegalName: CordaX500Name = rpcOps.nodeInfo().legalIdentities.first().name
companion object {
private val logger: Logger = loggerFor<TransactionApi>()
}
/**
* Returns the node's name.
*/
@GET
@Path("me")
@Produces(MediaType.APPLICATION_JSON)
fun whoami() = mapOf("me" to myLegalName)
/**
* Returns all parties registered with the [NetworkMapService]. These names can be used to look up identities
* using the [IdentityService].
*/
@GET
@Path("peers")
@Produces(MediaType.APPLICATION_JSON)
fun getPeers(): Map<String, List<CordaX500Name>> {
val nodeInfo = rpcOps.networkMapSnapshot()
return mapOf("peers" to nodeInfo
.map { it.legalIdentities.first().name }
//filter out myself, notary and eventual network map started by driver
.filter { it.organisation !in (SERVICE_NAMES + myLegalName.organisation)})
}
/**
* Displays all XYZ that exist in the node's vault.
*/
@GET
@Path("XYZ")
@Produces(MediaType.APPLICATION_JSON)
fun getXYZ() = rpcOps.vaultQueryBy<XYZ>().states
`WebserverPluginRegistry
# Register a ServiceLoader service extending from net.corda.webserver.services.WebServerPluginRegistry.
com.XXX.plugin.TransactionPluginTransactionPlugin
package com.XXX.plugin
import com.XXX.api.TransactionApi
import net.corda.core.messaging.CordaRPCOps
import net.corda.webserver.services.WebServerPluginRegistry
import java.util.function.Function
class TransactionPlugin : WebServerPluginRegistry {
// A list of classes that exposes web APIs.
override val webApis: List<Function<CordaRPCOps, out Any>> = listOf(Function(::TransactionApi))
// A list of directories in the resources directory that will be served by Jetty under /web.
override val staticServeDirs = mapOf(
"XXX" to javaClass.classLoader.getResource("XXXWeb").toExternalForm()
)
}Мой плагин зарегистрирован в: .... cordapp \ src \ main \ resources \ META-INF.services \ net.c orda.webserver.servi ces.WebServerPluginR egistry
Можете ли вы выложить содержимое файла плагина и файла WebServerPluginRegistry?
Уже обновлено





Это дублированный вопрос. Вы можете найти ответ в этом вопросе.
Для всех пользователей до 2020 года веб-сервер Corda устарел.
Теперь мы рекомендуем пользователям использовать Spring boot. Вы можете проверить этот проект в качестве примера.
Можете ли вы поделиться своим кодом на GitHub? И вы зарегистрировали свой плагин вот так? github.com/corda/cordapp-example/blob/release-V3/kotlin-sour ce /…