OSGI中未解析Jersey资源

OSGI中未解析Jersey资源,jersey,jetty,osgi,jax-rs,bndtools,Jersey,Jetty,Osgi,Jax Rs,Bndtools,我一直在关注这一点,它展示了如何在OSGI中运行jersey服务器(编辑:通过ApacheWink运行JAX-RS服务器,请参阅接受的答案)。这是一段简短的视频,过程似乎非常清晰。我不清楚HelloWorld资源到底是如何加载到Jersey的。HelloWorldResource是使用ApacheFelix DependencyActivatorBase作为服务注册到OSGI容器中的(非常有用)。据我所知,ApacheFelixWhiteboard应该以某种方式神奇地将其映射为Jersey资源,

我一直在关注这一点,它展示了如何在OSGI中运行jersey服务器(编辑:通过ApacheWink运行JAX-RS服务器,请参阅接受的答案)。这是一段简短的视频,过程似乎非常清晰。我不清楚HelloWorld资源到底是如何加载到Jersey的。HelloWorldResource是使用ApacheFelix DependencyActivatorBase作为服务注册到OSGI容器中的(非常有用)。据我所知,ApacheFelixWhiteboard应该以某种方式神奇地将其映射为Jersey资源,但当我运行它时,我得到了404

我知道,当我发出“services”命令时,服务在控制台中显示,因此已正确映射。我知道服务器正在运行,否则我将找不到404。我已经仔细检查了捆绑包,相信所有捆绑包都安装正确


感谢您的任何提示。

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

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

您可以安装ApacheFelix依赖关系管理器外壳包来调试使用DM注册的服务。在shell中键入以下命令:
dm
。 这将列出该捆绑包中所有已注册的服务。您应该看到服务注册为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”)。

我的关键是确保加载wink和白板。如果Wink只是一个JAX-RS impl,那么如果我只是在jersey服务器中而不是Wink,为什么Amdatu不注册资源呢?这是一个公平的问题。不幸的是,在JAX-RS中,从代码注册资源的编程API没有标准化,因此需要一些特定于实现的代码。(2.2.2和2.2.0)2.2.2位于我的localrepo中,并手动将其放置在“运行要求”块中。另一个(2.2.0)通过Bnd工具的“解析”按钮解析,并从Bnd工具中心下载。根据resolve对话框,白板包需要2.2.0。这可能是Bnd工具中的错误吗?因为我认为两个Jetty包都是有效的。