1

我一直在关注本教程视频,该视频展示了如何在 OSGI 中运行球衣服务器编辑:通过 Apache Wink 的 JAX-RS 服务器,请参阅接受的答案)。这是一个简短的视频,过程看起来非常清晰。我不清楚的是 HelloWorldResource 是如何加载到泽西岛的。HelloWorldResource 作为使用 Apache Felix DependencyActivatorBase 的服务注册到 OSGI 容器中(效果很好)。从我收集的内容来看,Apache Felix Whiteboard 应该以某种方式神奇地将其映射为 Jersey 资源,但是当我运行它时,我得到 404。

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

任何提示表示赞赏。

4

1 回答 1

2

首先,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) 已注册。

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

于 2013-05-19T18:26:11.917 回答