Webサービスのモデリング
Webサービスに接続するすべてのコードは、自動生成されます。JBuilder 2007の素晴らしい特長のひとつは、EJBとWebサービスのモデリングツールが組み込まれていることです。図4のように、JBuilder 2007は図を生成します。これは、Webサービスに接続するコードから自動的に生成されたものです。
非常に多くのコードが自動生成されています。Java Webサービスに接続する方法について詳細に解説した書籍がありますので、ここでは詳しく説明しませんが、重要なことは、すでにここでWebサービスにアクセスでき、公開されたconversionRate()
メソッドを実行する自動生成されたテストクラスを利用できるということです。テストクラスのファイル名は、CurrencyConverterTestCase.javaです。私は、test1CurrencyConvertorSoapConversionRate()
の箇所を、以下のように変更しました。
value = binding.conversionRate(NET.webserviceX.www.Currency.USD, NET.webserviceX.www.Currency.EUR);
そして、次の1行を追加します。
System.out.println(value);
これにより、Webサービスから取得した値を表示できます。実行してみると、0.6741という値が得られました。
クライアントの作成
すばらしい! Webサービスと接続して動作することが分かりました。しかし、私たちはまだクライアントアプリケーションを作っていません。では、説明しましょう。はじめに行うのは、JavaServer Facesのファセットをプロジェクトに追加することです。次に、currencyconverter.jspという新しいJSPページを、アプリケーションに追加します。ページのユーザーインターフェイスを図5に示します。ちょっと荒削りなので、実際にお客さんの環境で利用されるアプリケーションを開発する場合には、スタイルシートを使ってもう少しきれいにしたほうがいいでしょう。ただ、今の目的としては十分です。
ここで、ConverterBeanというJavaクラスを作成しました。このJavaクラスは、アプリケーション用のManaged Beanとなります。そして、リクエストスコープのBeanとして作成します(ソースコードのfaces-config.xmlを参照してください)。このManaged Beanは、プロパティの状態(つまり選択した通貨と、金額)を保管し、換算を実行して、ドロップダウンに値を格納します。私は、JBuilder 2007のリファクタリングメニューから、[フィールドのカプセル化]を選択したので、getterやsetterを一切手作業で記述する必要はありませんでした。また、自動生成されたテストコードをgetCurrencyConversionRate()
メソッドにコピー&ペーストすればよいので、Webサービスを呼び出すコードを手作業で書く必要もありません。
通貨リストの取得
ドロップダウンには、getCurrencyList()
メソッドによって取得した値を埋めます。注目していただきたいのは、ここで、Java SE 6 APIのすばらしい新機能「リフレクション」APIを使っていることです。私がこのAPIを使うのは、これが初めてです。リフレクションは、書籍で読むといつも不可解だったのですが、実際にやってみると単純明快でした。任意のJavaクラスを与えれば、メソッド、フィールなど、何でもすべて引き出すことができます。ここでは、すべての通貨リストをハードコードすることなく、Webサービスによって取得します。Currencyクラスのフィールドリストをイテレーションして、アンダースコアから始まるものをすべて除外(生成されたCurrencyクラスは、通貨名の文字列を保持するアンダースコアを持つ静的変数を作成します)し、その値をドロップダウンリストで使うArrayListに追加します。
注意:このアプリケーションを配布する前に、自動生成されたテストクラスは削除してあります。そのため、プリケーションサーバーでは、JUnitライブラリにアクセスしなければならないかどうかを考慮する必要はありません。
最後に、ユーザーが「Convert」ボタンを押したときに、ページをリフレッシュして、getConvertedAmount()
メソッドが実行されます。その結果、換算された通貨の金額が、WebページのoutputLabel JSFコンポーネントに表示されます。