SOAPはXMLの応用
「SOAPはXMLを応用した通信プロトコル」ということは、@ITの読者であればすでにほかの記事などからご存じのことと思います。しかし、MyService.javaはもちろん、Client.javaにもXMLを直接操作するような部分はほとんど出てきません。SOAPがXMLを応用した技術なのであればXMLを扱うプログラミングがあってもよさそうなものです。XMLの操作(パース)はどこへいったのでしょうか?
もう想像がついていると思いますが、Axisがこれらの機能を提供しています。提供するというよりは、SOAPの仕様に従ってJavaのAPIとして利用するためのライブラリを提供しています。そのため、WebサービスやWebサービス・クライアントでXMLを操作する必要はありません。すべてAxisが提供するAPIを通じて利用できます。
クライアント環境を構築するときにCLASSPATHにいくつものjarファイルを追加しました。また、Axisエンジンは<TOMCAT_HOME>\webapps\axis\WEB-INF\libにそのライブラリがありました。これらのjarファイルがAxisが提供するSOAP関連のAPIです。まさにクライアント/サーバのどちらもAxisのライブラリを利用してSOAP通信を実現していることになります。
SOAPの3つの機能
AxisにおけるSOAPの動きは分かっていただけたと思います。さて、AxisはSOAPを実装した実行環境です。SOAPそのものはどのような機能が定義されているのでしょうか? 少し、SOAPの標準機能について取り上げてみましょう。
SOAPは次のような3つの機能が規定されています。
(1)SOAPエンコーディング(encoding)
オブジェクトをSOAPエンベロープにくるんで送信するための変換方法を定義。 図9の中の緑色の矢印を表し、オブジェクト(ピンク色の円)から送信可能データ(赤線)にしたり、送信可能データ(赤線)からオブジェクト(ピンク色の円)にしたりする。
(2)SOAPリモート・プロシージャ・コール(RPC)
引数オブジェクト(ピンク色の円)をインプットに、サーバ側オブジェクト(オレンジ色の楕円)の機能(紫色の四角)を呼び出して、結果オブジェクト(青い円)を戻す。クライアントはあたかもローカルで機能を実行(紫色の四角)しているように、リモートの機能を利用することができる。
(3)SOAPエンベロープ(envelope)
ネットワーク上を流れるデータのフォーマットを規定(水色の文書のような部分)。「どのサービスの何の機能を利用」(SOAP RPC)し、「どのようなオブジェクトを送受信するか?」(SOAPエンコーディング)をXMLで記述する。
さて、これを「オブジェクト」の視点から見てみましょう。SOAPの世界には大きく2種類のオブジェクトがあります。Javaにおいては、この2種類のオブジェクトはクラスとして作成します。
1つはクライアント/サーバ間で送受信される「データ・オブジェクト」です。図9ではピンク色の円や水色ので描かれています。このデータ・オブジェクトはそのままでは送受信することができません。また、送信先のプラットフォームが同じとも限らないので、そのまま送っても利用できる保証はありません。そこで、ネットワークで送信でき、どんなプラットフォームでも認識できるような共通の型(タイプ)に変換する必要があります。この変換を規定しているのが「SOAPエンコーディング」です。Integer、Float、Stringなどの単純な数値/文字データや、それらを組み合わせた複合型や、配列などさまざまな型が規定されています。これらの型の変換(エンコーディング)をさまざまなプラットフォームで実現するとWebサービスの互換性が達成されます。
もう1つのオブジェクトは、サーバ側の「ビジネス・オブジェクト」です。これはサービスの機能(ロジック)を提供します。Javaの場合、ビジネス・オブジェクトはJavaBeansとして作成し、機能はメソッドとして実装します。このビジネス・オブジェクトをクライアント側から呼び出して利用する手順を決めているのが「SOAP RPC」となります。
そしてこれら2種類のオブジェクトの操作をクライアント/サーバ間で行うときの規約が「SOAPエンベロープ」になります。データ・オブジェクトをクライアント/サーバ間で交換し、クライアントからサーバ上のビジネス・オブジェクトを実行するためのプロトコルです。SOAPエンベロープでは、通信プロトコル(図9の白い矢印)を規定していません。そのため、さまざまな通信プロトコルを利用することができます。この連載におけるTomcat/Axisの実行環境ではHTTPを利用していますが、HTTP以外の通信プロトコルで実装することも可能です。
今回のまとめ
今回はAxisを利用したWebサービスがどのような動作をし、どのようなコンポーネントで動いているかを解説しました。これらを少しまとめてみましょう。
●Webサービスは単なるクラス
●Webサービスを利用するには配置記述ファイルを利用した「配置」が必要
●AxisエンジンにはWebサービス実行用Servletと管理用Servletが含まれる
●Webサービス・クライアントはAxisのライブラリ(API)を利用して作る
そして、SOAPの基本的な3機能についても取り上げました。これもまとめておきましょう。
●SOAPエンベロープ
ネットワークを流れるデータのフォーマットを決めている
●SOAPエンコーディング
データ交換の型を決めている
●SOAP RPC
リモート・プロシージャ・コールの動作を決めている
Axis上のWebサービスがどのようなコンポーネントで構成され、どのように動作しているかを理解していただけたと思います。また、SOAPは大変シンプルなことしか決めていないことに驚かれた方もいらっしゃるかもしれません。
次回は早くも自分のWebサービスを作ってみることにします。この大変簡単なサンプルプログラムを用いて、Webサービスをより詳しく探ってみましょう。それでは次回をお楽しみに。
Copyright © ITmedia, Inc. All Rights Reserved.