2013-05-18 46 views
0

我一直在关注这个tutorial video它展示了如何运行球衣服务器编辑:通过Apache表情 JAX-RS服务器,请参阅接受的答案)在OSGI。这是一个短片,整个过程似乎非常清晰。我不清楚的是HelloWorldResource是如何加载到Jersey中的。 HelloWorldResource使用Apache Felix DependencyActivatorBase作为服务注册到OSGI容器中(这很好用)。从我收集的Apache Felix Whiteboard应该以某种方式奇迹般地映射为泽西资源,但是当我去运行它时,我得到404。泽西资源未解决OSGI

我知道服务映射正确,因为它显示在控制台中时,我发出'服务'命令。我知道服务器正在运行,或者我不会找到404未找到。我已经仔细检查了捆绑包并相信所有安装都是正确的。

任何提示赞赏。

回答

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)注册。

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

+0

对我来说,关键是确保眨眼和白板正在加载。如果Wink只是一个JAX-RS impl,那么为什么Amdatu不注册这个资源,如果我只是丢弃在泽西服务器而不是Wink中? – harschware

+2

公平的问题。不幸的是,注册JAX-RS资源的编程API没有标准化,所以需要一些实现特定的代码。 –

+0

我已经有了一个404以及这个演示,但发生,因为两个Jetty捆绑在哪里部署。 (2.2.2和2.2.0)2.2.2位于我的localrepo并手动放置在'运行要求'区块中。另一个(2.2.0)使用Bnd工具的“解决”按钮解决,并从BndTools Hub下载。根据解决方案对话框,白板束需要2.2.0。这可能是Bnd工具中的一个错误吗?因为我认为两个Jetty捆绑在哪里都是有效的。 – Treur