■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2009年01月25日

    Java総合講座 - 初心者から達人へのパスポート
                  vol.137

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


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


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


では、前回の作業で生成されたファイルを見てみましょう。


まず、Eclipseのパッケージ・エクスプローラーのJStudySOAP(プロジェクト)
の中にjp.co.flsi.lecture.webservice.hotelというパッケージができていて、
その中に

Facilities.java
Hotel.java
HotelService.java
HotelServiceLocator.java
HotelSoapBindingImpl.java
HotelSoapBindingStub.java
RoomInfo.java
RoomReserveInfo.java
StayInfoInput.java
deploy.wsdd
undeploy.wsdd

というファイルができていますね。
ここでHotelSoapBindingImpl.javaというファイルができていることに注目
してください。これが何者なのか、説明しておきましょう。

前回のビルド・ファイル(build.xml)では、axis-wsdl2javaタスクに
implementationClassName属性を指定しなかったですね。
この場合に、HotelのWebサービスを実装するクラスの名前がHotelSoapBindingImpl
になるのです。
つまり、Webサービスのインターフェースの名前(ここではHotel)の後ろに
SoapBindingImplを付けたものが、Webサービスを実装するクラスの標準の名前
なのです。

というわけで、これからH社側(サーバー側)では、このファイルを直接編集する
ことによって、Webサービスの実装を行うことになります。

ちなみに、同じビルド・ファイル(build.xml)でAntを再度実行した場合は、この
HotelSoapBindingImpl.javaファイルは書き換えられないようになっています。
つまり、Webサービスを実装するクラスが既に作られている場合は、それを書き換え
ないような仕組みになっていますので、このファイルを直接編集しても問題ない訳
です。


あと、Facilities.javaやRoomInfo.javaやRoomReserveInfo.javaやStayInfoInput.java
のソース・コードを見てみましょう。
これらは、vol.135では、publicなフィールド(変数)のみしか定義していなかった
のに対し、自動生成されたクラスでは、フィールドはprivateになり、setterメソッ
ドやgetterメソッドが用意されてカプセル化されていることがわかります。
というわけで、vol.135の段階ではカプセル化する必要がなかったのです。

そして、今後実装していくHotelSoapBindingImplクラスでは、これらのカプセル化さ
れているほうのクラスを使うことになるのです。


続いて、

C:\ant_work2

の中を見てみましょう。

Hotel.wsdl

ができていますね。

このファイルをR社(クライアント側)に提供すれば、R社がWebサービスを呼び出す
アプリケーションを開発していくことができます。

つまり、このファイルをR社に直接渡す(Eメールにファイルを添付して送信する
か、あるいはCD-ROMなどに焼き付けて郵送するなどの方法で渡すか、あるいは
手渡しする)と、あとはR社がこのWSDLファイルを使ってスタブのファイルを生成
し、Webサービスを呼び出すアプリケーションを開発する作業を進めていくことが
できます。

しかし、WSDLファイルは直接渡さなくても、インターネット経由でURLを指定して
取り出すようにすることもできますね。

あるいは、R社以外にもいくつか利用してくれる会社があるとしたら、すべての会社に
直接渡すのは面倒くさいですから、そういう場合はインターネット経由でURLを指定
して取り出すようにしておくとよいでしょう。

そのためには、公開用のAxisにデプロイを行っておきます。

これは、vol.132のbuild.xmlファイルを参考にすればできると思いますので、演習問題
にしておきましょう。



さて、前回はbuild.xmlファイルの中に
<mkdir dir="${work.dir}"/>
というタスクを指定することによって、work.dirプロパティーに設定したC:/ant_work2
ディレクトリーを作成しましたが、これは前回書いた通り、あくまで、Antでできる
作業の例として用意したものであり、WSDLファイルの作成のために必要というわけ
ではありません。

今回は、C:/ant_work2のような専用のディレクトリーは作らずに、WSDLファイルを
Eclipseのワークスペース内に書き出すようにしてみましょう。

そのためには、build.xmlファイルとbuild.propertiesファイルを以下のように
修正すればいいですね。

(1) まず、build.xmlファイルから<mkdir dir="${work.dir}"/>の行を取り除き、
--------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
 <project name="WebServices Deploy" basedir="." default="wsdl2java">
   <property file="build.properties" />

   <path id="axis.classpath">
     <fileset dir="${axis.dir}/lib">
        <include name="**/*.jar" />
      </fileset>
   </path>
  
   <taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />
  
   <target name="java2wsdl">
     <axis-java2wsdl
      classname="jp.co.flsi.lecture.soap.hotelinterface.Hotel"
      location="http://localhost:8080/axis/services/Hotel"
      namespace="http://hotel.webservice.lecture.flsi.co.jp/"
      output="${local.wsdl}" >
        <classpath>
          <pathelement path="${classes.dir}"/>
        </classpath>
     </axis-java2wsdl>
   </target>

   <target name="wsdl2java" depends="java2wsdl">
     <axis-wsdl2java
      output="${sources.dir}"
      serverside="true"
      url="${local.wsdl}" >
     </axis-wsdl2java>
   </target>
 </project>
--------------------------------------------------------

という内容にしましょう。

(2) build.propertiesファイルの中のwork.dirの値を修正し、
--------------------------------------------------------
work.dir=C:/JavaWorks/JStudySOAP
classes.dir=C:/JavaWorks/JStudySOAP/bin
sources.dir=C:/JavaWorks/JStudySOAP/src
axis.dir=C:/Tomcat6.0/webapps/axis/WEB-INF
local.wsdl=${work.dir}/Hotel.wsdl
axisservlet=axis/services/AdminService
wsdd.dir=${work.dir}/jp/co/flsi/lecture/webservice/hotel
wsdd.deployfile=${wsdd.dir}/deploy.wsdd
wsdd.undeployfile=${wsdd.dir}/undeploy.wsdd
--------------------------------------------------------

という内容にしましょう。

以上のファイルの修正が終わったら、保管(Ctrl + S)しておきましょう。

(3) 最後に、build.xmlを実行(前回と同様に、パッケージ・エクスプローラー内
でbuild.xmlを右クリックし、「実行」→「2 Ant実行」を選択)しましょう。


これで、Hotel.wsdlファイルがEclipseのワークスペースのJStudySOAPフォルダー内
にできているはずですから、前回と同様に、パッケージ・エクスプローラー内の
JStudySOAPを右クリックし「更新」を選択してみてください。Hotel.wsdlが表示され
ますね。
ちなみに、このHotel.wsdlをダブル・クリックすると、WSDL専用のエディターが起動
してWSDLの内容をわかりやすく表示してくれます。



では、次回は、このWebサービスの実装(H社側の開発作業)に入っていきましょう。



(次回に続く)


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



======================================================
◆ 02.演習問題
======================================================

vol.132を参考にして、ローカルな(build.xmlを実行する環境と同じ
コンピューター内にある)Axisにデプロイを行うように、
build.xmlファイルを修正し、デプロイを実行してください。
なお、このときbuild.propertiesファイルも修正する必要があります。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      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) 2009 Future Lifestyle Inc. 不許無断複製