Пользовательский обработчик запросов завершается неудачно при запуске - PullRequest
0 голосов
/ 27 декабря 2018

Я пишу пользовательский RequestHandler, начиная с ThreadedHttpRequestHandler, и после запуска vespa-deploy prepare и vespa-deploy activate в журналах отображается повторяющаяся ошибка.

[2018-12-27 01:09:42.950] ERROR   : container        Container.com.yahoo.jdisc.core.StandaloneMain
JDisc exiting: Throwable caught:
exception=
java.lang.RuntimeException: Binding configured for non-jdisc request handler my.package.MyRequestHandler
at com.yahoo.container.jdisc.ConfiguredApplication.addHandlerBindings(ConfiguredApplication.java:348)
at com.yahoo.container.jdisc.ConfiguredApplication.intitializeAndActivateContainer(ConfiguredApplication.java:178)
at com.yahoo.container.jdisc.ConfiguredApplication.start(ConfiguredApplication.java:130)
at com.yahoo.jdisc.core.ApplicationLoader.start(ApplicationLoader.java:154)
at com.yahoo.jdisc.core.StandaloneMain.run(StandaloneMain.java:43)
at com.yahoo.jdisc.core.StandaloneMain.main(StandaloneMain.java:34)

Мой services.xml прямо сейчас выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<services version="1.0">
    <container version="1.0">
        <document-api />
        <handler id="my.package.MyRequestHandler" bundle="my-vespa-bundle">
            <binding>http://*/myendpoint</binding>
        </handler>
        <nodes>
            <node hostalias="node1"/>
        </nodes>
    </container>
</services>

Я пытался отследить как можно больше кода, и похоже, что есть проверка насписок сконфигурированных Components, откуда исходит это исключение, но я не понимаю, почему мой обработчик не подхватывается этим.

vespa-deploy prepare не показывает каких-либо дополнительных жалоб на структуру моего кода или конфигурации.

1 Ответ

0 голосов
/ 27 декабря 2018

Наиболее вероятная причина, по которой ваш обработчик не выбирается, заключается в том, что вы включили класс RequestHandler в свой собственный пакет.Это не позволит загрузчику классов платформы JDisc распознавать ваш обработчик как подкласс RequestHandler, который он использует в качестве ссылки.Вы можете проверить это, запустив mvn dependency:tree.Вы, вероятно, увидите некоторые зависимости vespa в области действия compile, но они должны были быть provided.

Пожалуйста, взгляните на раздел dependencies нашего примера проекта ипопробуйте обновить pom.xml соответственно.

...