Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

もっともっとSOAP4Rで遊ぼう

NaHiが書いたと思う?

soap4r/1.4.8が必要です。

サービスを提供するサーバを作ってみましょう。 題材として、http://rnn.sourceforge.jp/ が提供しているような サービス を、実装してみます((-ごらんのように、既にttateさんによって提供されているので、ここでサーバ側実装を してみることに、手順例として以外の意味はありません。-))。

一般に、サーバ側を書くのに2つの手順があるとされています。

1. まずインタフェイスを確定し、そのインタフェイスを記述したファイル(WSDL)を作成。そのWSDLに基づいてサービス提供クラスのスケルトンを作り、そのスケルトンの中身を実装していく。 2. まずサービスを提供するクラスを作り、そのクラスから、インタフェイス記述ファイル(WSDL)を自動生成する。

いずれも最終的に、サービスを提供するクラス(以下サービスクラス)と、 そのインタフェイスを記述したWSDLファイルを用意します。 WSDLファイルはクライアントに提供し、どうやってそのサービスを利用すればいいかを示すために使います。

しかし、実際のところ、WSDLとサービスクラスのどちらかが完全に先で、どちらかが後ということはほとんど ありません。あちらを直し、こちらを合わせして、同期を取りながら開発していくことになります。

とりあえずここでは、(1)の方法を取ります。なぜならSOAP4Rでは(2)をサポートしてないからです。: いつかは(2)もサポートする予定です ((-ちなみにクラスから完全なWSDLを生成するのは、将来もおそらく無理です。そのためには サービスクラスから入力、出力パラメータの型を推測する必要があり、 とてもじゃないけどRubyでは無理・無駄。-))。

というわけでWSDLを書きます→http://rrr.jin.gr.jp/rnn.wsdl いきなりこんなの書けないって?そうでしょうねぇ。。。どうしたもんでしょうか(救い無し)。 「WSDLなんて複雑なものはRubyには不要だ!」と思いました?一理あります。世の中C++やJavaが幅を きかせてるので、こういうものが流行っちゃうんです。なくてもなんとかなることも多いです。 そういう方は、((<RAA:SOAP4R>))のサンプルについている各種サーバ実装を見てみてください。 WSDL無しでも、数行でサーバを作ることができます。

話を戻して。

WSDLは用意できました。次にこのWSDLから、サービスクラスのスケルトンを作りましょう。 wsdl2rubyを起動します。

  $ wsdl2ruby.rb --wsdl http://rrr.jin.gr.jp/rnn.wsdl --type server --force
  I, [2003-01-15T00:31:14.769201 #4412]  INFO -- app: Start of app.
  I, [2003-01-15T00:31:14.878201 #4412]  INFO -- app: Creating class definition.
  I, [2003-01-15T00:31:14.884201 #4412]  INFO -- app: Creates file 'RNN.rb'.
  I, [2003-01-15T00:31:14.894201 #4412]  INFO -- app: Creating servant skelton.
  I, [2003-01-15T00:31:14.900201 #4412]  INFO -- app: Creates file 'RNNServant.rb'.
  I, [2003-01-15T00:31:14.916201 #4412]  INFO -- app: Creating standalone stub.
  I, [2003-01-15T00:31:14.919201 #4412]  INFO -- app: Creates file 'RnnService.rb'.
  !!! IMPORTANT !!!
  - Standalone stub can only 1 port for now.  Creating stub for the first port...  Rests are ignored.
  - Standalone server stub ignores port location defined in WSDL.  Location is http://localhost:10080/ by default.  Generated client from WSDL must be configured to point this endpoint by hand.
  !!! IMPORTANT !!!
  I, [2003-01-15T00:31:14.944201 #4412]  INFO -- app: End of app. (status: 0)

ログにあるように、RNN.rb、RNNServant.rb、RnnService?.rbができました。 それぞれサービスクラスが利用する各種クラスの定義、サービスクラスのスケルトン、 サービスクラスをホストするスタンドアローンサーバ ((-そのファイルのみでサービスを提供することができる、つまりHTTPを喋る簡易サーバ。開発中のテスト向け。 そのほか、wsdl2rubyのオプションで、CGIとしてサービスを提供するときのCGIプログラムファイルや、 WEBrick上でサービス提供するときのためのservlet実装ファイルを生成することができます。-)) のサンプルになります。

続きは wiki:もっともっとSOAP4Rで遊ぼう_2 へ。