2

我正在编写一个自定义 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此异常来自的配置列表的检查,但我不清楚为什么我的 Handler 没有被它拾取。

vespa-deploy prepare没有显示有关我的代码或配置结构的任何其他投诉。

4

1 回答 1

3

您的处理程序未被拾取的最可能原因是您已将RequestHandler该类嵌入到您自己的包中。这将阻止 JDisc 框架的类加载器将您的处理程序识别为RequestHandler它用作引用的子类。您可以通过运行来验证这一点mvn dependency:tree。您可能会在 scope 中看到一些 vespa 依赖项compile,但它们应该是provided

请查看dependencies我们示例项目的部分并尝试相应地更新您的pom.xml

于 2018-12-27T17:50:25.417 回答