連載
» 2003年03月11日 00時00分 公開

WSDLをうまく使いWebサービスをオートマ運転パソコンで試してわかるWebサービス(7)(4/4 ページ)

[イチロー,樋口研究室監修]
前のページへ 1|2|3|4       

Webサービス・プロキシ・クライアントとJavaアプリケーションを比べてみる

 今回のWebサービス・プロキシ・クライアントは、以前作成したWebサービス・クライアントよりはるかに簡単な記述になったことが分かりますか? これは、比較するまでもなく、プログラムの行数も少なくなっていますし、大変「直感的な」プログラミングになったことが分かると思います。

 そして、もう1つ重要なことは、「第3回で作成したJavaアプリケーションにかなり似ている」ことです。もう一度、Javaアプリケーションと比べながら、Webサービス・プロキシ・クライアントの構造を確認しましょう。

  ●Webサービス・プロキシ・クライアント(SimpleAddProxyClient.java)
package SimpleAddService;

public class SimpleAddProxyClient {
  public static void main(String[] args) {
    try {

    SimpleAddBeanService myService = new SimpleAddBeanServiceLocator();
    SimpleAddBean myBean = myService.getAxisServlet();
    ((AxisServletSoapBindingStub)myBean).setMaintainSession(true);

(1)

    myBean.setInputValue(Integer.parseInt(args[0]));
    myBean.add();
    System.out.println( myBean.getResultValue() );

(2)

    myBean.setInputValue(Integer.parseInt(args[1]));
    myBean.add();
    System.out.println( myBean.getResultValue() );
(3)

    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}



  ●Javaアプリケーション(SimpleAddTest.java)
package atmarkit;

public class SimpleAddTest {
  public static void main(String[] args) {

    
    SimpleAddBean myBean = new SimpleAddBean();
(1)

     myBean.setInputValue(Integer.parseInt(args[0]));
    myBean.add();
    System.out.println(myBean.getResultValue());
(2)

     myBean.setInputValue(Integer.parseInt(args[1]));
    myBean.add();
    System.out.println(myBean.getResultValue());

(3)

  }
}

 (1)(2)(3)はそれぞれのプログラムで同様な処理をしている部分です。それぞれを比較してみてください。

 まず分かるのは(2)(3)がまったく同じであることでしょう。これが実体クラスとインターフェイスの効能です。Webサービス・プロキシ・クライアントは「myBean」が実体だろうが代理だろうが関係なく処理しています。

 では、実体かどうかの違いはどこに出るのでしょうか?(1)に注目してください。Javaアプリケーションでは「new」を使ってインスタンス化しています。一方、Webサービス・プロキシ・クライアントでは、「myService.getAxisServlet()」によりmyBeanを取得しています。この実体であるインスタンスはどこにあるか、もう分かりますね。

 Tomcatのウィンドウに「SimpleAddBeanがインスタンス化されました!」と出ていませんか(第4回で仕込んでおいたはずです)? すなわち、Webサービス・プロバイダ側でインスタンス化されているのです。インスタンス化されているのがネットワークの先であるのか自分のところなのかは、プロキシ・クライアントになってしまうとあまり関係なくなってしまうことが分かることでしょう。

 WSDL2Javaによって作成されたスタブが面倒なSOAPのやりとりをすべて代理してくれています。そのため、Webサービス・リクエスターは、あたかもJavaアプリケーションのようにWebサービスを使えるようになっています。これはWebサービス・リクエスターがSOAP RPCを意識した「マニュアル運転」からSOAP RPCをあまり意識しない「オートマ運転」になったということです。この運転方法を一度覚えると、なかなか「マニュアル運転」には戻れなくなってしまうのではないでしょうか。

まとめ

 Webサービス・プロバイダがWSDLファイルを提供することで、Webサービス・リクエスターは大変な恩恵を受けます。WSDLファイルを使わない場合は、面倒なSOAP RPCプログラミングをする必要があったのですが、Webサービス・リクエスターがWebサービス・プロバイダからWSDLファイルを入手して、Axis APIの提供するWSDL2Javaを使うことで、大変直感的なプログラミングに変わります。

 今回の手順を図にすると次のようになります。

作成の手順 作成の手順

 WSDLファイルを使い、かなり容易にWebサービス・クライアント、いや、Webサービス・プロキシ・クライアントが作れました。Webサービス・リクエスターの「オートマ運転」の感覚が理解できましたでしょうか?

 このWSDLを利用したWebサービス・プロキシ・クライアント作成は、「Webサービス」を使ったアプリケーションを作成するためには大変重要なことです。Webサービス・リクエスターがネットワークの先にあるWebサービスと意識せずに高度なアプリケーションを構築していくことは、近い将来における主流になると思われます。筆者の経験では、ある技術が主流になる前提の1つとして、その技術を使ったプログラムを容易に作れる必要があるように思えます。WebサービスではWSDLファイルをうまく使うことで、この前提の1つの壁を越えているのではないでしょうか。

 さて、いよいよこの連載も最終ステップになってきました。先に「開発者が容易にプログラムを作れることが重要である」といいましたが、次回はさらに容易にするために統合開発環境を使ってWebサービスを作っていくことにしましょう。

 それでは、次回をお楽しみに。


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。