2013-03-13 21 views
0

我正嘗試使用JSON-WS API創建Liferay權限資源。我在http://localhost:8080/api/jsonws中沒有找到任何JSON-WS API註冊的服務方法來創建資源。可以通過JSON-WS API遠程調用ResourceLocalService嗎?

根據JSON Web Services文檔,您可以通過添加@JSONWebService註釋來遠程啓用服務。如果您尚未公開Liferay的內置服務,那麼您是否能夠註冊Liferay的內置服務並不清楚。

此外,爲Javadocs具體ResourceLocalService狀態:

這是一個本地服務。此服務的方法將不會根據傳播的JAAS憑據進行 安全檢查,因爲此 服務只能從同一VM內訪問。

那麼,甚至有可能通過JSON-WS API遠程訪問ResourceLocalService的方法嗎?如果是這樣,你能指出我如何去做的正確方向?

PS:我成功地使用JSON-WS API在我爲我用這種那些已經公佈並列舉在http://localhost:8080/api/jsonws

回答

2

的方法服務方法外部應用程序是寫我自己的服務有沒有數據表,但暴露了一些JSON WS方法。你可以在插件項目中使用服務構建器的選項來創建遠程服務(我使用了一個portlet插件,因爲我的應用程序中有portlet,但我相信它也可以在hook插件中完成)。從service.xml的

快速摘錄:

<entity name="UserNotification" local-service="true" 
    remote-service="true"> 
</entity> 

無場,沒有取景器...只是實體名稱。

然後在你的插件項目的UserNotificationServiceImpl中,你創建了你想公開的方法,並定期對Liferay服務進行服務調用(你負責使用權限檢查器,這裏沒有關於安全性的自動化)。當您重新構建服務ServiceBuilder逆向工程師的方法並創建遠程服務API時。

棘手的問題是,然後調用您的自定義API,它的形式與您對內置API調用的形式不同。假設您想要進行認證,並給你的方法與許可使用用戶上下文服務檢查你做這種形式的調用:

https://user:[email protected]/api/secure/jsonws/plugin-name.entity-name/method? ...parameters 

還有其他調用格式,但關鍵的是,你解決直接使用Liferay,然後使用該虛線符號標識插件和實體。如果您在自己的應用程序上下文

https://user:[email protected]/plugin-name/api/secure/jsonws/entity-name/method? ...parameters 

解決你的插件,您將無法獲得認證環境,所以你將無法使用許可檢查。不幸的是,你會在Liferay網站上找到相當數量的材料,告訴你這樣做。別。

我沒有解決所有細節(配置設置,調用細微差別等)但Developer Guide新文檔現在解決它們相當好。所以一定要研究一下。

您還需要閱讀Service Builder

但需要警告 - 您可能習慣使用您的門戶網站提供的API頁面作爲服務的參考。這適用於內置服務,但對於由插件提供的服務,此頁面不可靠,因爲它提供了不正確的示例。轉到文檔。

+0

感謝您的詳細解答。你提到「棘手的問題是,然後調用你的自定義API」。我得到404s並無法找出正確的URL來使用。我是否也需要在這個Github例子中描述的web.xml中添加JSON Servlet? https://github.com/kastork/jsonsw-example-portlet – Justin 2013-03-14 20:47:44

+0

哦,等等,文檔是我的朋友。 :)我看到這是在開發指南解決。我會試試看。 – Justin 2013-03-14 20:51:07

2

在Liferay中 - 正如您從文檔摘錄中指出的那樣 - *LocalService只能從同一個VM中獲得。從遠程獲得的服務只是*Service(沒有本地部分),並且它們的實現應檢查權限,然後將呼叫轉發到*LocalService(如果適用)。

僅僅在沒有實際對象的情況下向Liferay添加資源沒有任何意義,因此ResourceLocalService應該由添加另一個實體的服務調用(Resource需要實際對象的附加對象引用,由類名和主鍵組成)

相關問題