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

  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

要素

definitions要素

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

wsdl:definitionsの親要素と子要素
RelationElement
N/A (ルート要素)
types, message, portType, binding, service
wsdl:definitionsの属性
属性説明
name名前
targetNamespaceWSDL文書の対象名前空間

types要素

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

wsdl:definitionsの親要素と子要素
RelationElement
definitions

message要素

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

親要素definitions
子要素part
属性name

part要素

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

親要素message
属性name、type

portType要素

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

親要素definitions
子要素operation
属性name

operation要素

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

親要素portTypebinding
子要素inputoutputfault
属性name

input要素

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

親要素operaion
属性name

output要素

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

親要素operaion
属性name

fault要素

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

親要素operaion
属性name

binding

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

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

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

親要素definitions
子要素inputoutputfault
属性name、type

service

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

親要素definitions
子要素port
wsdl:service要素の属性
AttributeDescription
nameサービス名

port

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

親要素service
port要素の属性
AttributeDescription
bindingWSDLで定義されたbindingの名前
nameWSDL文書に定義されているすべてのポート間で一意のポート名

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

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

SOAP組み込み拡張要素

SOAP組み込み拡張要素のXML名前空間はhttp://schemas.xmlsoap.org/wsdl/soap/である。

binding要素

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

wsdlsoap:binding要素の属性
AttributeDescriptionRequired
styleSOAPメッセージ形式のスタイル
transportSOAPメッセージのトランスポート

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

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

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

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

operation

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

wsdlsoap:operation要素の属性
AttributeDescriptionRequired
soapActionサービスを識別するために使用するSOAPAction HTTPヘッダ
styleSOAPオペレーションのデフォルトスタイル

body

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

wsdlsoap:body要素の属性
AttributeDescriptionRequired
encodingStyleエンコーディングスタイル
namespaceRPC形式のメッセージのラッパー要素の名前空間
partsWSDLメッセージからbody要素に含められるパート
useSOAP bodyでメッセージパートがどのようにエンコードされるか

body