自定义请求处理程序在启动时失败

时间:2018-12-27 01:30:51

标签: vespa

我正在编写一个自ThreadedHttpRequestHandler扩展的自定义RequestHandler,并且在运行vespa-deploy preparevespa-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 :(得分:3)

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

请查看我们的sample projectdependencies部分,并尝试相应地更新pom.xml