自定义请求处理程序在启动时失败
Custom request handler fails at startup
我正在编写自定义 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
没有显示关于我的代码或配置结构的任何其他投诉。
您的处理程序未被提取的最可能原因是您已将 RequestHandler
class 嵌入到您自己的包中。这将防止 JDisc 框架的 class 加载器将您的处理程序识别为它用作参考的 RequestHandler
的子 class。您可以通过 运行 mvn dependency:tree
来验证这一点。您可能会在 compile
范围内看到一些 vespa 依赖项,但它们应该是 provided
.
请查看我们 sample project 的 dependencies
部分,并尝试相应地更新您的 pom.xml
。
我正在编写自定义 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
没有显示关于我的代码或配置结构的任何其他投诉。
您的处理程序未被提取的最可能原因是您已将 RequestHandler
class 嵌入到您自己的包中。这将防止 JDisc 框架的 class 加载器将您的处理程序识别为它用作参考的 RequestHandler
的子 class。您可以通过 运行 mvn dependency:tree
来验证这一点。您可能会在 compile
范围内看到一些 vespa 依赖项,但它们应该是 provided
.
请查看我们 sample project 的 dependencies
部分,并尝试相应地更新您的 pom.xml
。