タイトルWebObjectsで構築するSOAPサーバとクライアントのサンプルを掲載カテゴリーアップルからの開発資料, XML, WebObjects
作成日2001/9/10 16:49:30作成者新居雅行
Sample Codeに、WebObjectsを利用したSOAPのサンプルが掲載されている。Webサービスの話題では必ず出てくるSOAP(Simple Object Access Protocol)であるが、分散オブジェクトを実現するもっともシンプルな手法として注目されている。たとえば、あるサーバでユーザのリクエストを受け付けた場合、その中に必要な処理を別のサーバに依頼して処理を行うとする。そうした場合に利用されるのSOAPである。大きな特徴は、一般にはHTTPを使って通信を行うという点と、送受信するデータがXMLで構築されるということである。リクエストでのパラメータや、あるいは送信先で呼び出されるオブジェクトなどの情報をXMLでパックしてやりとりができるため、XMLの枠組みでデータの処理ができるなどの利点を持つ。現在のWebは、ユーザが直接アクセスする方式であるが、コンピュータ間がWebの仕組みを用いてアクセスし、データの取り出しなどを行うといったサービスを構築することで、分散コンピュータ環境をインターネット上でつくり出すという枠組みなのである。こうしたSOAPの仕組みを、WebObjectsで実現できることを示すサンプルとして注目できるだろう。
公開されたサンプルは、SOAPのサーバと、SOAPのクライアントの2つに分かれていて、いずれもWebObjects 5のプロジェクトとして提供されている。SOAPのクライアント自体はWebアプリケーションになるので、ユーザから見ればWebサーバで動いているアプリケーションとなる。SOAPクライアントとなるWebアプリケーションを起動すると、WebブラウザでMacintoshの本体を注文するような画面が出てくる。そこで、注文内容を入力すれば、その内容がSOAPサーバに送信され、SOAPサーバ側ではデータベースへの保存を行うといった動作を行う。ただし、若干の準備が必要で、SOAPサーバ側のReadMe.txtファイルを参照しよう。OpenBase SQLにVendorという名前のデータベースを作っておき、稼動させておく(エンコードはISO LATIN 1でいい)。なお、OpenBase SQLでアカウントやパスワードの設定をしていない状況を想定しているため、adminにパスワードを設定したのなら、EOModelerで設定の変更等は必要になるだろう。そして、プロジェクトにあるeomodelファイルを開いて、SQLコマンドを発行し必要なテーブルを作る。そのとき、「Drop ____」のチェックボックスははずしておいた方がいいだろう。そして、コンパイルしてサーバーを稼動するが、サーバ側は稼動しても単にプロセスが起動するだけで何も見えない。一方、クライアント側をコンパイルして起動すると、Webブラウザも起動して、ユーザサイドの画面が出てくる。最初に、ユーザ名とパスワードを入力するところがあるが、認証関連は何も組み込まれていないので、そのままボタンをクリックすると、注文の入力ができる。適当に入力してもとりあえずうまく行くようだ。注文を行った後に、OpenBaseのデータベースに入った内容を、OpenBase Managerで確認すると良いだろう。なお、これらのアプリケーションは同一マシンで稼動させることになっている。

◇WebObjects: SOAPClient
 http://developer.apple.com/samplecode/Sample_Code/WebObjects/SOAPClient.htm

◇WebObjects: SOAPServer
 http://developer.apple.com/samplecode/Sample_Code/WebObjects/SOAPServer.htm

まず、SOAPクライアント側のアプリケーションでは、入力した結果をXMLに組み立てて、SOAPサーバへのリクエストを送信するという機能が組み込まれている。それなりに凝ったアプリケーションであるが、オーダの送信は、Web ComponentsグループにあるAdministrationというWOComponentからたどればいいだろう。Submit Orderボタンをクリックすると、Administration.javaにあるsubmitOrderメソッドを呼び出す。そこから、XMLの構築とSOAPサーバへのリクエスト送信が行われる。XMLデータの構築は、SOAPBuilder.javaのソースにあるクラスで定義されており、そこにはmakeOrderDocumentというメソッドがあるだけである。どういったパッケージやクラスをimportしているのかなどをチェックすると良いだろう。生成したXMLデータは、Project Builderのコンソールに出力される。そして、SOAPサーバの呼び出しは、SOAPTransport.javaというソースで記述されており、WOHTTPConnectionを生成し、作成したXMLデータを送信している。また、SOAPサーバからは、注文番号が発行されて戻されてくるが、SOAPParserを通じて情報を取り出し、その結果をWebページとして表示している。
一方の、SOAPサーバ側であるが、リクエストによりWeb ComponentsグループにあるMainというWOComponentが呼び出される。このMainはSOAPComponentクラスのサブクラスなので、そちらも参照する必要がある。これらを見ると、リクエストからDOMとしてドキュメントを取り出し、DOMオブジェクトより必要な情報を取り出して、データベースに書き込みを行うという流れを追うことができる。
WebObjectsでのXML利用やSOAPリクエストの送受信など、今後のアプリケーション作成において主要テーマとなるような情報が詰まったサンプルプログラムである。なお、このサンプルは、WWDC 2001のあるセッションで公開されたものだそうだ。
関連リンク