Menu Close

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

概要

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

概要

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

処理

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 要素が必要です。操作は inputoutput 要素の両方を持つことができますが、各要素 1 つだけです。操作に fault 要素は必要はありませんが、必要な場合は任意の数の fault 要素を持つことができます。

この要素には、表4.2「入力要素および出力要素の属性」 に記載されている 2 つの属性があります。

表4.2 入力要素および出力要素の属性

属性説明

name

操作を具体的なデータフォーマットにマッピングする際に参照できるようにメッセージを識別します。名前はエンクロージングポート型内で一意である必要があります。

message

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

すべての input および output 要素の name 属性を指定する必要はありません。WSDL はエンクロージング操作の名前を基にデフォルトの命名スキームを提供します。操作で要素が 1 つだけ使用される場合、要素名はデフォルトで操作の名前になります。inputoutput 要素の両方が使用される場合、デフォルトの要素名は 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>