我正在编写一个自ThreadedHttpRequestHandler扩展的自定义RequestHandler,并且在运行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
没有显示有关我的代码或配置结构的任何其他投诉。
答案 0 :(得分:3)
未选择处理程序的最可能原因是您将RequestHandler
类嵌入到您自己的包中。这将防止JDisc框架的类加载器将您的处理程序识别为它用作引用的RequestHandler
的子类。您可以通过运行mvn dependency:tree
进行验证。您可能会在范围compile
中看到一些vespa依赖性,但它们应该是provided
。
请查看我们的sample project的dependencies
部分,并尝试相应地更新pom.xml
。