XML-RPC してみる Part 2

今回も 前回に引き続き XML-RPC について。
前回は 基本的な使い方として WEB サービスを実行して標準出力してみたが...
JavaFX で標準出力してどうすんの!!

と言うことで
今回は WEB サービスを実行して Window 上に結果を 表示してみることに...

今回作成するサンプルは

テキストボックスに URL を入力して ボタンをクリックすると ラベルに はてなブックマーク件数 を表示する
といった何の役にも立たないアプリケーション。

今回は最近流行の NetBeans 6.9 を使ってみることに...
サンプル程度のアプリケーションなら 5分たらずで作れてしまう...
とっても便利な開発支援ツールです。

まずは NetBeans 6.9 で 「JavaFx デスクトップビジネスアプリケーション」 プロジェクトを作成する。
プロジェクト名は何でもよいが、 とりあえず "Hatena" としてみた。

プロジェクトを作成すると...
"エディタ" ウィンドウが "デザイン" モードで表示されるので、 "パレット" ウィンドウから 適当に

  • テキストボックス
  • ボタン
  • ラベル
を ドラグ & ドロップで デザインエリアに貼付ける。
出来上がりはこんな感じ...


ちなみに NetBeans 6.9 の詳細な使い方は id:skrb さんの 「詳説JavaFX」第3回 変数と型、そしてJavaFX Composer がとっても役に立つ...

で、やっと ここからが今回の本題!!
ボタンがクリックされたときに実行されるアクションの実装です。

まず、"デザイン" エリア上の "OK ボタン" を選択して "プロパティー" ウィンドウの "アクション" の 鉛筆アイコンを クリックする。
コンテキストメニューから「生成:空の関数」を選択すると "エディタ" ウィンドウが 勝手に "ソース" モードに切り替わり

package hatena;

public class Main {

    // Generated Code

    function buttonAction(): Void {
        //TODO
    }

}

function run (): Void {
    var design = Main {};

    javafx.stage.Stage {
        title: "Main"
        scene: design.getDesignScene ()
    }
}
のようなコードが自動的に生成されます。
"ボタン" がクリックされたときに実行されるのが buttonAction 関数。
後は この buttonAction 関数を
package hatena;

import java.net.URL;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

public class Main {

    // Generated Code...


    def config = new XmlRpcClientConfigImpl();
    def client = new XmlRpcClient();

    init {
        config.setServerURL(new URL("http://b.hatena.ne.jp/xmlrpc"));
        client.setConfig(config);
    }

    function buttonAction(): Void {

        // はてなブックマーク件数取得API 実行
        // 第一引数: メソッド名
        // 第二引数: パラメータ (配列)
        //   戻り値: はてなブックマーク件数(java.lang.Integer)
        var res = client.execute("bookmark.getTotalCount", [ textBox.text ]);

        label.text = "{res} users";
    }
}

function run (): Void {
    var design = Main {};
    
    javafx.stage.Stage {
        title: "Main"
        scene: design.getDesignScene ()
    }
}
のような感じで実装するだけで OK。
書かなければいけないコードは たったこれだけ...
前回のサンプルとほぼ同じコードなのに、アプリケーションぽくなってきた。

しかし!!
実は このサンプル アプリケーションは決定的な不具合を抱えているので、
絶対に真似してはいけない!!
それについては、また次回...