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