我一直在关注这个tutorial video,它展示了如何运行泽西服务器(编辑:通过Apache Wink运行JAX-RS服务器,请参阅接受的答案)在OSGI中。这是一个简短的视频,过程似乎非常清楚。我不清楚的是HelloWorldResource是如何加载到Jersey的。 HelloWorldResource使用Apache Felix DependencyActivatorBase作为服务注册到OSGI容器中(效果很好)。从我收集的内容来看,Apache Felix Whiteboard应该以某种方式神奇地将其映射为Jersey资源,但是当我去运行它时,我得到404.
我知道当我发出'services'命令时,服务在控制台中显示正确映射。我知道服务器正在运行,或者我找不到404。我已经仔细检查了捆绑包并认为所有捆绑都已正确安装。
任何提示都表示赞赏。
答案 0 :(得分: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包的bundle id执行相同的操作。你应该看到你的服务有这样的东西:注册了javax.servlet.Servlet(init.applicationConfigLocation = / conf / application.properties,alias = / somepath,init.requestProcessorAttribute = / somepath)。
同时检查您是否正在查看正确的网址。默认情况下,Amdatu中的RESTful资源已注册到根路径(例如“localhost:8080 / myresource”)。