2015-12-22 113 views
0

我試圖從Liferay門戶使用代理調用Web服務。我已經成功地在IBM WebSphere Portal中這樣做,這樣的(援引 '幫助'):使用代理從Liferay門戶調用Web服務

<portal_context_path>/proxy/http/<server_url>/<application_name>/help?lang=myLang&object=myObject 

我使用AJAX撥打電話:

try { 
     $.ajax({ 
      url: 'http://localhost:8080/LiferayTest-portlet/proxy/http/localhost:9081/ServiceApp/help?lang=myLang&object=myObject', 
      headers: { 
       'Accept': 'application/xml; charset=utf-8', 
       'Content-Type': 'application/xml; charset=utf-8' 
      }, 
      success: function(xml) { 
          ... 
      }, 
      error: function(xhr, textStatus, errorThrown) { 
       ... 
      } 
     }); 
    } catch (e) { 
     ... 
} 

的事情是,如果我做ajax在Liferay門戶上調用時,出現錯誤(404未找到),但是如果我從WebSphere門戶(URL:http://localhost:10039/.WebSphereTest/proxy/http/localhost:9081/ServiceApp/help?lang=myLang&object=myObject)調用它,它將起作用。

是否有類似的方法(如使用/proxy/http)在Liferay門戶上完成此操作?

回答

1

您的應用程序是否在Liferay內部運行,並且您試圖通過代理在外部調用某些內容?在這種情況下訪問Web服務就像在其他地方一樣。使用您選擇的庫來做到這一點。 Liferay沒有爲你提供一個代理 - 如果有的話,我不明白這會帶來什麼。

編輯:如果您想訪問您的portlet的「資源」階段,例如通常用於Ajax的請求階段,您只需從Liferay獲取資源URL即可。 URL生成是底層平臺的業務,並且很好地標準化。您似乎正在使用Websphere特定的方式。在JSP中,您只需使用<portlet:resourceURL/>來獲取在您的Portlet資源階段(例如, serveResource(...)

另一種選擇是使用portlet部署基於servlet的web服務(因爲它在技術上只是一個web應用程序),但這完全在portlet領域之外,並且與Liferay完全無關。

排除在評論中,我仍將此段落留在此處:如果您想要使用Liferay自己的API Web服務,它們可以使用JSONSOAP。 SOAP服務僅在本地主機上可用,除非您將它們配置爲可供更多主機使用。就像以前一樣,我沒有看到明確的平臺提供的代理點。

+0

非常感謝您的回覆。我還通過一些關於我的問題的更多信息更新了我的問題。是的,這是你提到的第一個案例。我通過代理呼叫'外面的東西'。但是我不太明白,如何使Liferay門戶網站的URL('proxy/http/localhost:9081/ServiceApp/help?lang = myLang&object = myObject')工作。 – peterremec

+0

看到我添加的段落 –

+0

非常感謝你,你的建議是非常有益的! – peterremec