Не установлен Cordapp и localhost: 1009 / api возвращает 404 через Http

Я пытаюсь открыть 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.TransactionPlugin

TransactionPlugin

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()
    )

}

Можете ли вы поделиться своим кодом на GitHub? И вы зарегистрировали свой плагин вот так? github.com/corda/cordapp-example/blob/release-V3/kotlin-sour‌ ce /…

Joel 31.07.2018 16:42

Мой плагин зарегистрирован в: .... cordapp \ src \ main \ resources \ META-INF.services \ net.c‌ orda.webserver.servi‌ ces.WebServerPluginR‌ egistry

JBlitz 01.08.2018 09:09

Можете ли вы выложить содержимое файла плагина и файла WebServerPluginRegistry?

Joel 01.08.2018 10:32

Уже обновлено

JBlitz 01.08.2018 13:35
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как создать простое погодное приложение на Python с API OpenWeatherMap
Как создать простое погодное приложение на Python с API OpenWeatherMap
Этот учебник проведет вас через процесс создания простого погодного приложения с помощью Python и OpenWeatherMap API.
Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
В этом руководстве вы узнаете, как использовать API парсинга квитанций за 5 минут с помощью JavaScript. Eden AI предоставляет простой и удобный для...
0
4
198
1

Ответы 1

Это дублированный вопрос. Вы можете найти ответ в этом вопросе.


Для всех пользователей до 2020 года веб-сервер Corda устарел.

Теперь мы рекомендуем пользователям использовать Spring boot. Вы можете проверить этот проект в качестве примера.

Другие вопросы по теме