インストールされているLiferayアプリケーションのリモートサービスは、ローカルサービスを呼び出す場合と同じ方法で呼び出すことができます。これを「ローカルでリモートサービスを呼び出す」と表現することもできます。対応するローカルサービスの代わりにリモートサービスを呼び出す理由は、リモートサービスの権限チェックを利用するためです。ここでは、以下のよくあるシナリオについて考えてみます。
- 特定のサービスに対して、ローカルサービス実装とリモートサービス実装の両方が作成されたとします。
- リモートサービスは権限チェックを実行してから、対応するローカルサービスを呼び出します。
上記のシナリオでは、ローカルサービスの代わりにリモートサービスを呼び出すのがベストプラクティスです。こうすることで、パーミッションチェックコードを複製する必要がなくなるからです。また、これはLiferayのWebコンテンツアプリのサービスにおけるプラクティスでもあります。
addArticle
メソッドは、権限チェックの後でjournalArticleLocalService.addArticle
を起動することに注意してください。
もちろん、リモートサービスを作成する主な理由は、リモートサービスを呼び出すためです。Service Builderは、JSON APIとSOAPの両方を介して、プロジェクトのリモートWebサービスを公開することができます。デフォルトでは、エンティティのremote-service
をtrue
に設定してService Builderを実行すると、プロジェクトのJSON WebサービスのAPIが作成されます。使いやすいWebインターフェースを介して、プロジェクトのJSONベースのRESTfulサービスにアクセスできます。
Liferayサービスをリモートで呼び出す
デフォルトのLiferayサービスの多くは、Webサービスとして利用可能です。Liferayでは、SOAPおよびJSON Webサービスを介してWebサービスを公開しています。8080番ポートでLiferayをローカルで実行している場合は、以下のURLにアクセスして、LiferayのデフォルトのSOAP Webサービスを参照してください。
http://localhost:8080/api/axis
LiferayのデフォルトのJSON Webサービスを参照するには、以下のURLにアクセスしてください。
http://localhost:8080/api/jsonws/
デフォルトでは、コンテキストパスは/
に設定されています。つまり、コアのLiferayサービスがリストされるようになっています。*http://localhost:8080/api/jsonws/のページでは、portal
コンテキスト内のJSON Webサービスがデフォルトで表示されます。[Context Name]というセレクターメニューで、別のコンテキストを選択できます。たとえば、[Context Name]*でjournal
を選択すると、LiferayのWebコンテンツアプリにあるJSON Webサービスが表示されます(このアプリのエンティティは、すべてJournal*
で始まります)。また、ダイレクトURLを介してコンテキストのJSON Webサービスにアクセスすることもできます。たとえば、WebコンテンツアプリのJSON WebサービスのURLは、http://localhost:8080/api/jsonws?contextName=journalです。
各エンティティの利用可能なサービスメソッドは、JSON Webサービスのページ左側にある列に表示されるので、サービスメソッドの詳細を表示するには、そこをクリックします。サービスの*Impl
クラスへの完全なパッケージパスが、メソッドのパラメータ、戻り値の型、および考えられる例外とともに表示されます。また、そのページからサービスを呼び出すこともできます。たとえば、portal
コンテキストでAnnouncementsEntry
エンティティのget-entry
メソッドをクリックすると、サービスメソッドの詳細ページが表示され、サービスを呼び出すこともできます。
get-entry
メソッドを呼び出すために唯一必要となるパラメータは、entryId
です。このWebサービスを呼び出すには、entryId
フィールドにアナウンスメントエントリのIDを入力し、*[呼び出し]*をクリックします。Liferayは、それぞれの呼び出しからサービス呼び出しが成功したか失敗したかなどを示すフィードバックを返します。この方法でリモートサービスを呼び出すことは、アプリのリモートサービスをテストするのに適しています。
また、Service Builderは、Apache Axisを使用することで、SOAPを介してプロジェクトのWebサービスを利用可能にすることもできます。*-service
プロジェクトのWSDD(Webサービスデプロイメント記述子)を構築し、プロジェクトのモジュールをデプロイすると、Liferayサーバーでそのサービスを使用できるようになります。Creating Remote Servicesのチュートリアルで説明されているように、ブラウザを使用して、LiferayおよびLiferayアプリケーションのSOAPサービスを表示することができます。
ブラウザでSOAPサービスを表示すると、Liferayはすべてのエンティティで利用可能なサービスをリストし、WSDLドキュメントへのリンクを提供します。たとえば、ユーザーサービスのWSDLリンクをクリックすると、以下のURLに移動します。
http://localhost:8080/api/axis/Portal_UserService?wsdl
このWSDLドキュメントには、エンティティのSOAP Webサービスがリストされています。WebサービスのWSDLが使用できるようになると、SOAP WebサービスクライアントならどれでもそのWSDLにアクセスできるようになります。SOAP Webサービスのクライアント実装の例は、SOAP Web Servicesのチュートリアルを参照してください。
LiferayのWebサービスは、クライアントアプリケーションによって呼び出されるように設計されています。 そして、LiferayのWebサービスAPIは、非ポートレットクライアントや非Javaクライアントを含む、さまざまな種類のクライアントからアクセスできます。LiferayのJSON Webサービスにアクセスできるクライアントアプリケーションの開発方法については、Invoking JSON Web Servicesのチュートリアルを参照してください。そして、LiferayのSOAP Webサービスにアクセスするクライアントアプリケーションの開発方法については、SOAP Web Servicesのチュートリアルを参照してください。また、独自のアプリケーション用のリモートWebサービスを作成する方法については、Creating Remote Servicesのチュートリアルを参照してください。
Liferayサービスの詳細については、Liferay Portal CE Javadocs(https://docs.liferay.com/dxp/portal/7.0-latest/javadocs/)を参照してください。