■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2008年12月07日

    楽しいJava講座 - 初心者から達人へのパスポート
                  vol.130

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


[このメールマガジンは、画面を最大化して見てください。]


========================================================
◆ 01.SOAPのアプリケーション(Webサービス)
========================================================


では、CallクラスやQNameクラスを使って、WebService1Clientと同じ処理をするクライ
アントのプログラムを書いてみましょう。実際にはさまざな書き方があるのですが、
ここでは、できるだけ(WebService1Clientと同じくらい)単純なやり方で書いてみる
ことにします。

jp.co.flsi.lecture.soap.clientパッケージに下記のようなWebService1ClientFunya
というクラスを作成してみてください。(このソース・コードを解読する必要はあり
ません。雰囲気だけ味わってください。)

--------------------------------------------------------
package jp.co.flsi.lecture.soap.client;

import java.net.MalformedURLException;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;

public class WebService1ClientFunya {
   public static void main(String[] args) {
      String url = "http://localhost:8080/axis/services/WebService1?wsdl";
      try {
         Call call = new Call(url);

         String methodName1 = "searchBestItem";
         String[] longArray = new String[] {"munyamunya", "funyafunya"};
         String s = (String)call.invoke(new QName(methodName1), new Object[]{longArray});
         System.out.println("Result of searchBestItem() = " + s);

         String methodName2 = "placeAnOrder";
         String itemNumber = "A007";
         int quantity = 2;
         String customerId = "C007";
         s = (String)call.invoke(new QName(methodName2), new Object[]{itemNumber, quantity, customerId});
         System.out.println("Result of placeAnOrder() = " + s);
      } catch (MalformedURLException e) {
         e.printStackTrace();
      } catch (RemoteException e) {
         e.printStackTrace();
      }
   }
}
--------------------------------------------------------

編集が終わったら、保存して実行してみましょう。事前にWebサービス側のTomcatを起動
しておく(Axisを起動するため)こともお忘れなく。
実行してみると、ちゃんとWebService1Clientのときと同じ結果を返してくることがわか
りますね。


さて、前回WebService1SoapBindingStubのソース・コードを見たときと比べて、上記の
ソース・コードは随分簡単ですね。WebService1Clientと同程度のソース・コード量しか
ありません。なんだ、CallクラスやQNameクラスを直接使うやり方も簡単じゃないか、
と思うかも知れません。
でも、やはりWebサービスのメソッドの呼び出し部分は、メソッド名が引数として指定さ
れていたり、さらにはメソッドの引数がなんだか余計な階層構造をしていたりして、
やっぱりわかりにくいですね。
わかりにくいということは、間違えをおかしやすいということにもつながります。
(実際の実用的なWebサービスでは、メソッドの引数はもっと複雑な場合がほとんど
ですから、さらにわかりにくくなります。)


というわけで、やはりスタブを使ってプログラミングしたほうがいいわけです。
というわけで、上記のプログラムのことは忘れてしまって結構です。
これからは、スタブを使うほうだけを説明していきます。



ところで、vol.127ではデプロイを行うためにWSDDファイルを自分で作成しましたが、
実はWSDDファイルは自動生成することもできます。

これらも含めて、次回はAntの説明をしましょう。
Antを使う例として、実際にAntにデプロイをやらせてみることにします。



(次回に続く)


では、今日はここまでにします。

何か、わからないところがありましたら、下記のWebページまで質問を
お寄せください。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2008 Future Lifestyle Inc. 不許無断複製