第4章 論理インターフェイスの定義

概要

論理サービスインターフェイスは portType 要素を使用して定義されます。

概要

論理サービスインターフェイスは、WSDL portType 要素を使用して定義されます。portType 要素は、抽象操作定義のコレクションです。各操作は、操作が表すトランザクションを完了するために使用される入力、出力、および障害メッセージによって定義されます。portType 要素で定義されたサービスインターフェイスを実装するためにコードが生成されると、各操作はコントラクトで指定された入力、出力、および障害メッセージで定義されたパラメーターが含まれるメソッドに変換されます。

Process

WSDL コントラクトで論理インターフェイスを定義するには、以下を実行する必要があります。

  1. インターフェイス定義を含む portType 要素を作成し、一意の名前を付けます。「ポートタイプ」を参照してください。
  2. インターフェイスで定義された各オペレーションに operation 要素を作成します。「操作」を参照してください。
  3. 操作ごとに、操作のパラメーターリスト、戻りタイプ、および例外を表すために使用されるメッセージを指定します。「操作メッセージ」を参照してください。

ポートタイプ

WSDL portType 要素は、論理インターフェイス定義のルート要素です。多くの Web サービス実装は、portType 要素を生成された実装オブジェクトに直接マップしますが、論理インターフェイス定義は、実装されたサービスによって提供される正確な機能を指定しません。たとえば、ticketSystem という名前の論理インターフェイスは、コンサートチケットを販売するか、駐車違反切符を発行する実装になります。

portType 要素は、バインディングにマッピングされ、定義されたサービスを公開するエンドポイントによって使用される物理データを定義する WSDL ドキュメントの単位です。

WSDL ドキュメントの各 portType 要素には、name 属性を使用して指定された一意の名前が必要で、これは operation 要素に記載される操作のコレクションで設定されます。WSDL ドキュメントは、任意の数のポートの型を記述できます。

操作

WSDL operation 要素を使用して定義される論理操作は、2 つのエンドポイント間の対話を定義します。たとえば、当座預金口座の残高の確認とウィジェットの総額の注文の両方を操作として定義できます。

portType 要素内で定義された各操作には、name 属性を使用して指定された一意の名前が必要です。操作を定義するには、name 属性が必要です。

操作メッセージ

論理操作は、操作を実行するためにエンドポイント間で通信される論理メッセージを表す要素のセットで設定されます。操作を説明できる要素は、表4.1「操作メッセージ要素」 のとおりです。

表4.1 操作メッセージ要素

要素説明

input

要求が行われたときにクライアントエンドポイントがサービスプロバイダーに送信するメッセージを指定します。このメッセージの一部は、操作の入力パラメーターに対応しています。

output

要求に応答してサービスプロバイダーがクライアントエンドポイントに送信するメッセージを指定します。このメッセージの一部は、参照によって渡される値など、サービスプロバイダーによって変更される可能性のあるすべての操作パラメーターに対応しています。これには、操作の戻り値が含まれます。

fault

エンドポイント間でエラー状態を伝達するために使用されるメッセージを指定します。

操作は、少なくとも 1 つの input 要素または 1 つの output 要素を持つ必要があります。操作は input 要素と output 要素の両方を持つことができますが、各要素 1 つだけです。操作に fault 要素は必要はありませんが、必要な場合は任意の数の fault 要素を持つことができます。

要素には、表4.2「入力要素と出力要素の属性」 にリストされている 2 つの属性があります。

表4.2 入力要素と出力要素の属性

属性説明

name

操作を具体的なデータ形式にマッピングするときに参照できるように、メッセージを識別します。名前は、囲んでいるポートタイプ内で一意である必要があります。

message

送信または受信されるデータを説明する抽象メッセージを指定します。message 属性の値は、WSDL ドキュメントに定義された抽象メッセージの 1 つの name 属性に対応している必要があります。

すべての input および output 要素の name 属性を指定する必要はありません。WSDL はエンクロージング操作の名前を基にデフォルトの命名スキームを提供します。操作で使用される要素が 1 つだけの場合、要素名はデフォルトで操作の名前になります。input および output 要素の両方が使用される場合、デフォルトの要素名は、名前にそれぞれ Request または Response のいずれかが付けられた操作の名前になります。

戻り値

operation 要素は、操作中に渡されるデータの抽象定義であるため、WSDL は操作に指定された戻り値を提供しません。メソッドが値を返す場合、そのメッセージの最後の部分として output 要素にマップされます。

たとえば、例4.1「personalInfo ルックアップインターフェイス」 のようなインターフェイスを使用している場合があります。

例4.1 personalInfo ルックアップインターフェイス

interface personalInfoLookup
{
  personalInfo lookup(in int empID)
  raises(idNotFound);
}

このインターフェイスは、例4.2「personalInfo ルックアップポートタイプ」 のポートタイプにマッピングできます。

例4.2 personalInfo ルックアップポートタイプ

<message name="personalLookupRequest">
  <part name="empId" element="xsd1:personalLookup"/>
<message/>
<message name="personalLookupResponse">
  <part name="return" element="xsd1:personalLookupResponse"/>
<message/>
<message name="idNotFoundException">
  <part name="exception" element="xsd1:idNotFound"/>
<message/>
<portType name="personalInfoLookup">
  <operation name="lookup">
    <input name="empID" message="tns:personalLookupRequest"/>
    <output name="return" message="tns:personalLookupResponse"/>
    <fault name="exception" message="tns:idNotFoundException"/>
  </operation>
</portType>