Menu Close
第4章 論理インターフェースの定義
概要
論理サービスインターフェースは portType
要素を使用して定義されます。
概要
論理サービスインターフェースは、WSDL portType
要素を使用して定義されます。portType
要素は、抽象操作定義のコレクションです。各操作は、操作が表すトランザクションを完了するために使用される入力、出力、および障害メッセージによって定義されます。portType
要素で定義されたサービスインターフェースを実装するためにコードが生成されると、各操作はコントラクトで指定された入力、出力、および障害メッセージで定義されたパラメーターが含まれるメソッドに変換されます。
処理
WSDL コントラクトで論理インターフェースを定義するには、以下を行う必要があります。
ポート型
WSDL portType
要素は、論理インターフェース定義のルート要素です。多くの Web サービス実装は、portType
要素を生成された実装オブジェクトに直接マップしますが、論理インターフェイス定義は、実装されたサービスによって提供される正確な機能を指定しません。たとえば、ticketSystem という名前の論理インターフェースを使用すると、コンサートチケットを販売したり、駐車券を発行したりする実装を行うことができます。
portType
要素は、バインディングにマッピングされ、定義されたサービスを公開するエンドポイントによって使用される物理データを定義する WSDL ドキュメントの単位です。
WSDL ドキュメントの の各 portType
要素には、name
属性を使用して指定された一意の名前が必要で、これは operation
要素に記載される操作のコレクションで構成されます。WSDL ドキュメントでは、任意の数のポート型を記述できます。
操作
WSDL operation
要素を使用して定義される論理操作は、2 つのエンドポイント間の対話を定義します。たとえば、口座の残高照会の要求と、ウィジェットの注文を操作として定義できます。
portType
要素内に定義された各操作には、name
属性を使用して指定された一意の名前が必要です。操作を定義するには、name
属性が必要です。
操作メッセージ
論理操作は、操作を実行するためにエンドポイント間で通信される論理メッセージを表す、要素のセットで構成されます。操作を記述できる要素のリストは、表4.1「操作メッセージの要素」 を参照してください。
表4.1 操作メッセージの要素
要素 | 説明 |
---|---|
| リクエストの作成時に、クライアントエンドポイントがサービスプロバイダーに送信するメッセージを指定します。このメッセージの部分は、操作の入力パラメーターに対応します。 |
| サービスプロバイダーがリクエストへの応答としてクライアントエンドポイントに送信するメッセージを指定します。このメッセージの部分は、参照によって渡される値など、サービスプロバイダーによって変更可能な操作パラメーターに対応します。これには、操作の戻り値が含まれます。 |
| エンドポイント間のエラー状態の通信に使用されるメッセージを指定します。 |
操作には、1 つ以上の input
要素または 1 つの output
要素が必要です。操作は input
と output
要素の両方を持つことができますが、各要素 1 つだけです。操作に fault
要素は必要はありませんが、必要な場合は任意の数の fault
要素を持つことができます。
この要素には、表4.2「入力要素および出力要素の属性」 に記載されている 2 つの属性があります。
表4.2 入力要素および出力要素の属性
属性 | 説明 |
---|---|
| 操作を具体的なデータフォーマットにマッピングする際に参照できるようにメッセージを識別します。名前はエンクロージングポート型内で一意である必要があります。 |
|
送受信されるデータを記述する抽象メッセージを指定します。 |
すべての 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>