WSDL (Web Services Description Language)

WSDL (Web Services Description Language)はWebサービスのインタフェース記述言語であり、XMLによって記述される。Webサービスのインタフェース仕様を記述したWSDL文書を公開すれば、そのWebサービスの利用者がWSDL文書を開発ツールに読み込ませてインタフェースを実装するコードを自動生成することができるようになる。

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種類のメッセージで構成される。

  1. 操作を呼び出すための入力メッセージ
  2. 操作の処理結果を返すための出力メッセージ
  3. エラー情報を通知するための障害メッセージ

WSDLの名前空間はバージョンにより異なる。それぞれの名前空間を次表に示す。

VersionNamespace
WSDL 1.1http://schemas.xmlsoap.org/wsdl/
WSDL 2.0http://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の構造を表すイメージを次の図に示す。

WSDL 1.1
Figure 1. WSDL 1.1

definitions

definitionsはWSDLのルート要素である。

名前空間

バージョン名前空間
WSDL 1.1http://schemas.xmlsoap.org/wsdl/
WSDL 2.0http://www.w3.org/ns/wsdl/

属性

definitions要素には次に示す属性を指定できる。

name
名前
targetNamespace
WSDL文書の対象名前空間

親要素

なし

子要素

definitions要素は次に示す要素を子要素として持つことができる。

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
</wsdl:definitions>

types

データ型(XMLスキーマのデータ型)を定義する。

親要素

definitions

子要素

なし

message

messageは、入出力メッセージや障害メッセージを定義する要素である。メッセージは0個以上のpartと呼ばれるデータの集まりで構成される。

属性

message要素には次に示す属性を指定できる。

name
名前

親要素

definitions

子要素

part

part

メッセージの一部分を定義する。

属性

part要素には次に示す属性を指定できる。

name
名前
type

親要素

message

portType

ポートタイプ(意味的な観点でまとめられた抽象的なオペレーションの集合)を定義する。

属性

part要素には次に示す属性を指定できる。

name
名前

親要素

definitions

子要素

operation

operation

オペレーション(サービスメソッド)を定義する。

属性

operation要素には次に示す属性を指定できる。

name
名前

親要素

子要素

operation要素は次に示す要素を子要素として持つことができる。

input

要求メッセージを定義する。

属性

input要素には次に示す属性を指定できる。

name
名前

親要素

operaion

output

応答メッセージを定義する。

属性

output要素には次に示す属性を指定できる。

name
名前

親要素

operaion

fault

エラー応答メッセージを定義する。

属性

fault要素には次に示す属性を指定できる。

name
名前

親要素

operaion

binding

バインディング(ポートタイプに具体的なメッセージ仕様と通信プロとコスを関連付けたもの)を定義する。

WSDLでは、ポートタイプ(抽象的な操作とメッセージ)に具体的なプロトコルを結びつける定義のことをバインディングと呼ぶ。

WSDL 1.1にはSOAP 1.1の組み込み拡張要素が含まれている。

属性

binding要素には次に示す属性を指定できる。

name
名前
type

親要素

definitions

子要素

binding要素は次に示す要素を子要素として持つことができる。

service

serviceはポートの集合であり、Webサービスによってサポートされているポートを定義する要素である。サポートされているプロトコルごとにひとつのport子要素がある。

属性

binding要素には次に示す属性を指定できる。

name
サービス名

親要素

definitions

子要素

service要素は次に示す要素を子要素として持つことができる。

port

portはバインディングのために単一のアドレスを指定することで、個別のエンドポイントを定義する要素である。

属性

port要素には次に示す属性を指定できる。

binding
WSDLで定義されたbindingの名前
name
WSDL文書に定義されているすべてのポート間で一意のポート名

親要素

service

port要素の記述例を次に示す。

<wsdl:port name="FooServicePort" binding="foo:FooServiceBinding">
  <wsdlsoap:address location="http://localhost:8090/services/FooService"/>
</wsdl:port>

binding

bindingはバインディングがSOAP経由で利用可能になることを示すSOAP組み込み拡張要素である。

名前空間

http://schemas.xmlsoap.org/wsdl/soap/

属性

binding要素には次に示す属性を指定できる。

style
SOAPメッセージ形式のスタイル

binding要素のstyle属性には、次の表に示すいずれかの値を指定する

style属性の値
説明
documentドキュメント指向(メッセージにドキュメントが含まれる)
rpcRPC指向(メッセージにパラメータと戻り値が含まれる)
transport
SOAPメッセージのトランスポート

binding要素のtransport属性には、次の表に示すいずれかの値を指定する

style属性の値
説明
http://schemas.xmlsoap.org/soap/httpHTTP
http://schemas.xmlsoap.org/soap/smtpSMTP

operation

operationは特定の操作に特定のSOAP実装を結びつけるSOAP組み込み拡張要素である。

名前空間

http://schemas.xmlsoap.org/wsdl/soap/

属性

operation要素には次に示す属性を指定できる。

soapAction
サービスを識別するために使用するSOAPAction HTTPヘッダ
style
SOAPオペレーションのデフォルトスタイル

body

bodyは入力および出力メッセージの詳細を指定するSOAP組み込み拡張要素である。

名前空間

http://schemas.xmlsoap.org/wsdl/soap/

属性

body要素には次に示す属性を指定できる。

encodingStyle
エンコーディングスタイル
namespace
RPC形式のメッセージのラッパー要素の名前空間
parts
WSDLメッセージからbody要素に含められるパート
use
SOAP bodyでメッセージパートがどのようにエンコードされるか