WSDLファイルからクライアント用クラスを自動生成
そろそろ「オチ」が見えてきたと思います。AxisにはWebサービス・クライアント用のクラスをWSDLから自動生成する機能が用意されています。第6回ではBeanからWSDLを生成するのに「Java2WSDL」というツールを使いましたが、今回はその逆です。WSDLからJavaのクラスを生成するので、「WSDL2Java」というツールを使います。このツールを使って「オートマ運転」をやってみることにしましょう。
毎度のことになりますが、ホームディレクトリを<@WORK>に移動して、環境変数を設定してください(この辺が分からない方は第1回〜第3回を読んでください)。前回でWSDLファイルができているはずです。<@WORK>ディレクトリにSimpleAddService.wsdlファイルはありますか?
このファイルがあることを確認して、次のコマンドを実行します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
正常終了すると、<@WORK>ディレクトリの中に「SimpleAddService」というディレクトリができているはずです。その中を見てください。4つのJavaファイルができていますか?
生成されたファイルは次の4つです。
(1) AdminServletSoapBindingStub.java
(2) SimpleAddBean.java
(3) SimpleAddBeanService.java
(4) SimpleAddBeanServiceLocator.java
この4つのファイルを見て、「あれ?」と思いませんか? 以前に見たことのあるクラス名(ファイル名)があることに気付くはずです。
Javaのインターフェイスをうまく使う
Java2WSDLコマンドには多くのオプションがありますが、ここでは必要最低限のオプションだけを利用しています。詳しくはAxisのマニュアルを参照してください。
(2)のファイル名がWebサービス・プロバイダの作成したJavaBeans「SimpleAddBean.java」と同じファイル名、すなわち同じクラス名になっています。なぜ、Webサービス・クライアントを作るにもかかわらず、サーバ側のJavaBeansと同じクラス名がクライアント側に作成されたのでしょうか? その「?」を探るには、このファイルの中身を見てみると分かってきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
パッケージ名が異なるので、まったく同じものでないことはすぐに分かります。そして次に、このSimpleAddBean.javaは「interface」であることが分かります。Javaのインターフェイスは機能(メソッド)のインターフェイスを定義し、実装を伴いません。すなわち、add()メソッドなどが定義されていますが、単に呼び出すためのメソッドだけが記述されていて、その中にはロジックがありません。Webサービス・プロバイダが作成したJavaBeansと外見は似ていても「実態のあるクラス」とは異なるものであることが分かると思います。
このインターフェイスをうまく使うことで、Webサービス・リクエスターはWebサービス・クライアントを容易に作ることができるようになります。その作り方は次のセクションで詳しく解説していきましょう。
気付いた方もいらっしゃるかもしれませんが、これと同様な手法は、ほかのさまざまな技術で見ることができます。代表例としては、Enterprise JavaBeans(EJB)におけるインターフェイスの使われ方です。EJBにおいては、「リモート・インターフェイス」としてまったく同じ形式になっていて、EJBクライアントに同じ使い勝手を提供します。
筆者の予想では、AxisはEJBクライアントの使い勝手を参考にしているのではないかと思います。というのも、「java.rmi.Remote」を継承したインターフェイスを使っていることからもEJBクライアントと同様の効果を狙っていると思われるからです。
JavaアプリケーションのようにWebサービス・クライアントを作る
このようにJavaのインターフェイスを使うと、Webサービス・リクエスターは大変容易にWebサービス・クライアントを作ることができるようになります。あたかも、Javaアプリケーションを作っているときと同じようなプログラミングをすることができるようになるのです。
実は、Webサービス・リクエスターにとっては実体(Webサービス側のBean)であろうが、実体のないインターフェイスであろうが、あまり関係ありません。同じようにメソッドを呼び出せて、結果を受け取れればいいのです。これを実現するために、インターフェイスとネットワークの先にある実体のWebサービスをつなげるための「スタブ」としてほかの3つのファイルがあります((1)(3)(4))。このスタブがWebサービス自体がネットワークの先にあるということをWebサービス・リクエスターに意識させないのです。
このように実体の代理をするインターフェイスを「Proxy」(プロキシ)と呼ぶことがあります。ここでは、これらを利用したクライアントをプロキシ・クライアントと呼ぶことにしましょう。
Webサービス・プロキシ・クライアントを作る
さて、本当にJavaアプリケーションのようにWebサービス・クライアントを作ることができるのでしょうか? SOAPを意識しないプログラミングになるでしょうか? 早速クライアント・プログラムを作ってみましょう。
WSDL2Javaコマンドの際に作成されたディレクトリ(SimpleAddService)の中にSimpleAddProxyClient.javaファイルを作成します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
そして、コンパイルコマンドを<@WORK>ディレクトリで実行します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
5つのクラスファイルが生成されていればOKです。
それでは、Tomcatを起動して早速実行してみましょう。ここでは、Webサービス側のスコープは「session」にしておいてください(第5回参照)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
前回まで利用してきたWebサービス・クライアントと同じ動作をしていることが分かりますね。このプログラムも立派なWebサービス・クライアントであることが分かると思います。
Copyright © ITmedia, Inc. All Rights Reserved.