Web サービス・アドレッシングのアノテーション
WS-Addressing 仕様は、Web サービスをアドレス指定したり、エンドツーエンド・アドレッシングを容易にしたりするための、トランスポートから独立したメカニズムを提供します。JAX-WS アプリケーションを使用している場合、コード内で Java アノテーションを使用して実行時の WS-Addressing の動作を指定できます。
WS-Addressing アノテーションを使用すると、WS-Addressing サポートを使用可能にしたり、着信メッセージで WS-Addressing 情報が必要かどうかを指定したり、サービスのサポートするメッセージ交換パターンを制御したり、Web サービス操作または障害応答に関連したアクションを指定したりすることができます。
WebSphere® Application Server では、以下の WS-Addressing アノテーションがサポートされます。 これらのアノテーションは、特に指定されている場合を除き、JAX-WS 2.2 仕様で定義されます。JAX-WS 2.2 仕様は、JAX-WS 2.1 仕様の後発仕様であり、その機能を含みます。詳しくは、Java API for XML-Based Web Services 2.2 の仕様を参照してください。
- javax.xml.ws.Action
- Web サービス操作に関連したアクションを指定します。
- ボトムアップ・アプローチに従って JAX-WS Web サービスを開発している場合、wsgen コマンド行ツールを使用して、Java アプリケーション・コードから WSDL 文書を生成できます。 しかし、この属性を WSDL 操作に追加するためには、実装クラスでも @Addressing アノテーションを指定する必要があります。 結果的に生成される WSDL 文書では、Action アノテーションが wsdl:operation の input message エレメントおよび output message エレメントに wsam:Action 属性を持つようになります。 あるいは、@Addressing アノテーションを使用しない場合は、既に定義されているアクション属性を独自の WSDL 文書に指定することができます。
- トップダウン・アプローチに従って JAX-WS Web サービスを開発している場合、wsimport コマンド行ツールを使用して、既存の WSDL 文書から Java アプリケーション・コードを生成できます。 そのような場合、生成された Java コードには正しい Action および FaultAction アノテーションが含まれます。
- このアクションがコード・アノテーションにも WSDL 文書にも指定されていない場合、Web Services Addressing 1.0 Metadata の仕様で定義されているデフォルト・アクション・パターンが使用されます。
詳しくは、この仕様を参照してください。注: WebSphere Application Server ランタイム環境は非推奨の wsaw:Action 属性をサポートしますが、非推奨の wsaw:Action 属性を含む古い WSDL 文書から Java コードを生成しようとすると、この属性は無視されます。
- javax.xml.ws.FaultAction
- 障害応答に追加するアクションを指定します。特定のメソッドでこのアノテーションを使用すると、そのメソッドに対応する WSDL 操作の障害エレメントに WS-Addressing FaultAction 拡張属性が追加されます。 この属性を WSDL 操作に追加するためには、実装クラスで Addressing アノテーションを指定する必要もあります。Addressing アノテーションを使用しない場合には、既に定義されている Action 属性を使用した独自の WSDL 文書を用意することができます。 このアノテーションは、Action アノテーションに組み込む必要があります。
- WS-Addressing FaultAction アノテーションを含んでいる Java アプリケーション・コードから生成される WSDL 文書は、
wsdl:operation の fault message エレメントに wsam:Action 属性を持つようになります。
注: 作成したすべてのカスタム例外クラスが、生成される WSDL 文書に確実に正常にマップされるようにするには、java.lang.RuntimeException クラスの代わりに java.lang.Exception クラスを拡張します。
- javax.xml.ws.soap.Addressing
- このサービスで WS-Addressing サポートを使用可能にすることを指定します。このアノテーションはサービス実装 Bean でのみ使用することができ、サービス・エンドポイント・インターフェースで使用することはできません。
- com.ibm.websphere.wsaddressing.jaxws21.SubmissionAddressing
- このアノテーションは、JAX-WS 仕様の IBM 実装の一部です。このアノテーションは、このサービスで 2004/08 WS-Addressing 仕様のための WS-Addressing サポートを使用可能にすることを指定します。このアノテーションはサービス実装 Bean でのみ使用することができ、サービス・エンドポイント・インターフェースで使用することはできません。
Addressing アノテーションおよび SubmissionAddressing アノテーションの詳細 (コード・サンプルも含む) については、アドレッシング・アノテーションを使用した、JAX-WS アプリケーションに対する Web サービス・アドレッシング・サポートの使用可能化を参照してください。
以下のサンプル・コードは、起動される呼び出し操作 (input) および応答メッセージに追加されるアクション (output) を定義するために、Action アノテーションを使用しています。
この例では、障害が発生した場合に応答メッセージに追加されるアクションを指定するために、FaultAction アノテーションも使用しています。
@WebService(name = "Calculator")
public interface Calculator {
...
@Action(
input="http://calculator.com/inputAction",
output="http://calculator.com/outputAction",
fault = { @FaultAction(className=AddNumbersException.class,
value="http://calculator.com/faultAction")
}
)
public int add(int value1, int value2) throws AddNumbersException {
return value1 + value2;
}
}
コードからサービス成果物を生成するツールを使用すると、上の例から以下のような WSDL タグが生成されます。<definitions targetNamespace="http://example.com/numbers" ...>
...
<portType name="AddPortType">
<operation name="Add">
<input message="tns:AddInput" name="Parameters"
wsam:Action="http://calculator.com/inputAction"/>
<output message="tns:AddOutput" name="Result"
wsam:Action="http://calculator.com/outputAction"/>
<fault message="tns:AddNumbersException" name="AddNumbersException"
wsam:Action="http://calculator.com/faultAction"/>
</operation>
<portType>
...
<definitions>