【问题标题】:Jersey resource not resolving in OSGI泽西资源无法在 OSGI 中解析
【发布时间】:2013-05-13 14:16:20
【问题描述】:

我一直在关注这个tutorial video,它展示了如何在奥斯吉。这是一个简短的视频,过程看起来非常清晰。我不清楚的是 HelloWorldResource 是如何加载到泽西岛的。 HelloWorldResource 作为使用 Apache Felix DependencyActivatorBase 的服务注册到 OSGI 容器中(效果很好)。从我收集的资料来看,Apache Felix Whiteboard 应该以某种方式神奇地将其映射为 Jersey 资源,但是当我运行它时,我得到 404。

当我发出“服务”命令时,我知道该服务已正确映射,因为它显示在控制台中。我知道服务器正在运行,否则我不会得到 404 not found。我已经仔细检查了这些捆绑包,并相信所有捆绑包都安装正确。

任何提示表示赞赏。

【问题讨论】:

    标签: jersey jetty osgi jax-rs bndtools


    【解决方案1】:

    首先,Amdatu 并非基于泽西岛。 Jersey 是众多可用的 JAX-RS 实现之一。 Amdatu 基于 Apache Wink。但是,这对您来说并不重要,因为无论如何您都应该按照标准进行编程。

    Amdatu 在服务注册表中查找注册为 Object.class 的服务,并检查注册的服务是否带有 @Path 注释。如果是这种情况,服务将注册为 JAX-RS 资源。这种方式的开发模型与在 Java EE 环境中使用 JAX-RS 非常相似。

    您可以安装 Apache Felix Dependency Manager Shell 包来调试使用 DM 注册的服务。在 shell 中键入以下命令:dm <bundleid>。 这将列出该捆绑包的所有注册服务。您应该看到注册为 java.lang.Object 的服务。对 org.amdatu.web.rest.wink 包的包 ID 执行相同操作。您的服务应该会看到类似这样的内容:已注册 javax.servlet.Servlet(init.applicationConfigLocation=/conf/application.properties,alias=/somepath,init.requestProcessorAttribute=/somepath)。

    还要检查您查看的网址是否正确。默认情况下,Amdatu 中的 RESTful 资源注册到根路径(例如 'localhost:8080/myresource')。

    【讨论】:

    • 对我来说,关键是确保正在加载眨眼和白板。如果 Wink 只是一个 JAX-RS impl,那么如果我只是放入 jersey-server 而不是 Wink,为什么 Amdatu 不注册资源?
    • 公平的问题。不幸的是,从代码中注册资源的编程 API 在 JAX-RS 中没有标准化,因此需要一些特定于实现的代码。
    • 我在这个演示中也有一个 404,但是因为部署了两个 Jetty 包而发生。 (2.2.2 和 2.2.0) 2.2.2 位于我的 localrepo 中,并手动将其放置在“运行要求”块中。另一个(2.2.0)通过 Bnd 工具的“解决”按钮解决,并从 BndTools Hub 下载。根据解析对话框,白板包需要 2.2.0。这可能是 Bnd 工具中的错误吗?因为我认为两个 Jetty 捆绑包都有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    相关资源
    最近更新 更多