当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2014年12月1日月曜日

XAgentとは?

こんにちは。12月です。師走です。後1ヶ月で2014年も終わりです。
今年はもう少し記事の提供ができるかなぁと踏んでいたのですが、なかなか思うようにはいかないもので・・・
情報を入手するのは「タダ」かもしれないけど、情報を提供するのは「タダ」ではありません。
ということですね。

さて、では12月一発目の記事と行きましょう。
これをクリックしてからね。にほんブログ村 IT技術ブログへ


先月行われたXPagesDay 2014。私が担当したセッションの中で、別サイトのJSONデータを取得するためにはいくつかの方法がありますよ。という話をさせていただきました。
今回はその中でも「XAgent」について取り上げてみます。


そもそもXAgentとは何か?
詳しい説明は、こちらのサイトで解説されていますので、読んでみてください。英語ですがねー。
XAgents - Web Agents XPages style


XPages登場以前の、Domino Webアプリの場合、「?OpenAgent」というURLパラメータを付けてWebページを開くことで指定したエージェントを実行させることができました。
このエージェントの中にPrint文を記述することでページにHTML等を表示させることができます。
ここで、「Content-Type:」を出力するようにしておくと、HTMLではなく、XMLやJSONをページに表示させることができます。

これをXPagesでもやってみようというのがXAgentなのです。

なぜ、XAgentなのかというと、
XMLやJSONデータを取得する場合に限らず、他のWebサイトの情報を取得する場合、別ドメインのものは拒否されてしまいます。
これは、クロスサイトスクリプティングを防止するためです(こちらについては、CORSというキーワードで検索してください)。

?OpenAgentやXAgentを使うと、サーバ上でデータを取得することになるので、「別ドメイン」という事にはならなくなり、それを再利用する形にすることで回避するという訳です。



では、実際にXAgentの実装方法を確認していきましょう。

まず、適当な名前のXPageを作成します(ここでは「XAgent」としておきます)。
作成したら「すべてのプロパティ」にある「rendered」を"false"に変更します。
こうすることにより、このXPageを開いた時にHTMLが出力されなくなります(実際にページを開くとわかりますが、ソースがありません)。
XPageのすべてのプロパティ

次に、このページにJSONデータを出力するために、「afterRenderResponse」イベントに以下のコードを記述します。
afterRenderResponseイベント

コピペしたい人はこちらからどうぞ。
var exCon    = facesContext.getExternalContext();
var writer   = facesContext.getResponseWriter();
var response = exCon.getResponse();

response.setContentType( "application/json" );
response.setHeader( "Cache-Control", "no-cache" );

writer.write( "出力したいJSONデータ" );

writer.endDocument();
facesContext.responseComplete();


取得したいデータがXMLの場合、5行目の"application/json"を"text/xml"にすれば良いです。
実際に取得したいデータは8行目に書いています。サンプルなので、このような形になっていますが、実際には出力予定のXMLやJSONを変数に格納しておけば良いです。


私が教わった方法は、java.io.InputStreamとjava.io.BufferedReaderを使ってURLからデータを読み込むという方法です。
このコードは先ほどの「afterRenderResponse」イベントのコードの先頭行に挿入する形になります(実際には8行目までにあれば大丈夫でしょう)。
URLからXMLやJSONを取得するコード

※ISEのA木様、情報提供ありがとうございました。大変勉強になりました!!


これでXPageを保存して、このページを開けば、指定したWebサービスのサイトのXMLもしくはJSONデータが出力されます。
後は、このページのデータを利用する形で別のXPageを作成すれば、RESTアプリケーションが出来上がります。
こんな感じで、XPagesDayのデモアプリは作られたのでした。




ということで一度覚えてしまえば、色々と流用できる便利なものです。
ぜひ覚えて、JSONデータを活用して、RESTも使いこなせるようになってください。



今日はこの辺で・・・
(12月の記事書いたから、今月はいいかな・・・(笑))

0 件のコメント: