2013-05-18 70 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