WSDL (Web Services Description Language)はWebサービスのインタフェース記述言語であり、XMLによって記述される。Webサービスのインタフェース仕様を記述したWSDL文書を公開すれば、そのWebサービスの利用者がWSDL文書を開発ツールに読み込ませてインタフェースを実装するコードを自動生成することができるようになる。
IBM、Microsoft及びAribaがWebサービスを記述するためにWSDL 1.0を開発して、WSDL 2.0からW3C勧告となった。
外部のWebサービスを使用するには、そのWSDLファイルを取得する必要がある。パブリックなWebサービスの場合、WSDLファイルは通常そのWebサービスをパブリッシュしている組織のWebサイトで入手できる。配備したアプリケーションが運用可能な状態のとき、エンドポイントのURLに?wsdl
を付加したURLからWSDLを取得できる。
Java言語におけるメソッドに相当するものをWSDLでは操作(operation)と呼ぶ。操作は、次に示す3種類のメッセージで構成される。
WSDLの名前空間はバージョンにより異なる。それぞれの名前空間を次表に示す。
Version | Namespace |
---|---|
WSDL 1.1 | http://schemas.xmlsoap.org/wsdl/ |
WSDL 2.0 | http://www.w3.org/ns/wsdl/ |
各要素に名前空間を表す任意の接頭辞を付けることができるが、慣習的にwsdl
という接頭辞にすることが多い。たとえば、次のようなWSDL文書があったとする。
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/">
<types xmlns="http://schemas.xmlsoap.org/wsdl/">
...
</types xmlns="http://schemas.xmlsoap.org/wsdl/">
</definitions xmlns="http://schemas.xmlsoap.org/wsdl/">
このWSDL文章は、次のように記述するの一般的である。
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
...
</wsdl:types>
</wsdl:definitions>
WSDL 1.1の構造を表すイメージを次の図に示す。
definitionsはWSDLのルート要素である。
バージョン | 名前空間 |
---|---|
WSDL 1.1 | http://schemas.xmlsoap.org/wsdl/ |
WSDL 2.0 | http://www.w3.org/ns/wsdl/ |
definitions要素には次に示す属性を指定できる。
なし
definitions要素は次に示す要素を子要素として持つことができる。
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
</wsdl:definitions>
データ型(XMLスキーマのデータ型)を定義する。
なし
messageは、入出力メッセージや障害メッセージを定義する要素である。メッセージは0個以上のpartと呼ばれるデータの集まりで構成される。
message要素には次に示す属性を指定できる。
メッセージの一部分を定義する。
part要素には次に示す属性を指定できる。
ポートタイプ(意味的な観点でまとめられた抽象的なオペレーションの集合)を定義する。
part要素には次に示す属性を指定できる。
オペレーション(サービスメソッド)を定義する。
operation要素には次に示す属性を指定できる。
operation要素は次に示す要素を子要素として持つことができる。
要求メッセージを定義する。
input要素には次に示す属性を指定できる。
応答メッセージを定義する。
output要素には次に示す属性を指定できる。
エラー応答メッセージを定義する。
fault要素には次に示す属性を指定できる。
バインディング(ポートタイプに具体的なメッセージ仕様と通信プロとコスを関連付けたもの)を定義する。
WSDLでは、ポートタイプ(抽象的な操作とメッセージ)に具体的なプロトコルを結びつける定義のことをバインディングと呼ぶ。
WSDL 1.1にはSOAP 1.1の組み込み拡張要素が含まれている。
binding要素には次に示す属性を指定できる。
binding要素は次に示す要素を子要素として持つことができる。
serviceはポートの集合であり、Webサービスによってサポートされているポートを定義する要素である。サポートされているプロトコルごとにひとつのport子要素がある。
binding要素には次に示す属性を指定できる。
service要素は次に示す要素を子要素として持つことができる。
portはバインディングのために単一のアドレスを指定することで、個別のエンドポイントを定義する要素である。
port要素には次に示す属性を指定できる。
port要素の記述例を次に示す。
<wsdl:port name="FooServicePort" binding="foo:FooServiceBinding">
<wsdlsoap:address location="http://localhost:8090/services/FooService"/>
</wsdl:port>
bindingはバインディングがSOAP経由で利用可能になることを示すSOAP組み込み拡張要素である。
http://schemas.xmlsoap.org/wsdl/soap/
binding要素には次に示す属性を指定できる。
binding要素のstyle属性には、次の表に示すいずれかの値を指定する
値 | 説明 |
---|---|
document | ドキュメント指向(メッセージにドキュメントが含まれる) |
rpc | RPC指向(メッセージにパラメータと戻り値が含まれる) |
binding要素のtransport属性には、次の表に示すいずれかの値を指定する
値 | 説明 |
---|---|
http://schemas.xmlsoap.org/soap/http | HTTP |
http://schemas.xmlsoap.org/soap/smtp | SMTP |
operationは特定の操作に特定のSOAP実装を結びつけるSOAP組み込み拡張要素である。
http://schemas.xmlsoap.org/wsdl/soap/
operation要素には次に示す属性を指定できる。
bodyは入力および出力メッセージの詳細を指定するSOAP組み込み拡張要素である。
http://schemas.xmlsoap.org/wsdl/soap/
body要素には次に示す属性を指定できる。