JAX-WS アプリケーションの場合、コード内でアドレッシング・アノテーションを使用することで、
サービス・アプリケーションの開発時に WS-Addressing サポートを使用可能にできます。この方式は、注入された Web サービス・プロキシー参照を使用するクライアント・アプリケーションに使用することもできます。
このタスクについて
サービス・コードで、次のいずれかのアドレッシング・アノテーションを使用します。
- Addressing - このアノテーションは、WS-Addressing 2005/08 仕様を使用する場合に使用します。
- SubmissionAddressing - このアノテーションは、WS-Addressing 2004/08 仕様を使用する場合に使用します。
クライアントでは、Addressing アノテーションのみを使用してください。SubmissionAddressing アノテーションはサポートされません。
Addressing アノテーションは WebServiceRef アノテーションと組み合わせて指定しなければなりません。
WebServiceRef アノテーションは、クライアント・コンテナーによって注入された Web サービス・プロキシーへの参照を指定します。
アノテーション設定は、WSDL 文書の設定をオーバーライドします。WSDL 文書をコードから生成せずに手動で作成した場合、
アノテーション設定が WSDL 設定と異なる場合があります。
アノテーションごとに、オプション・パラメーターを最大 3 個まで指定してください。
表 1. アドレッシング・アノテーションのパラメーター. この表では、種々のパラメーターとそれらに指定できる値、および説明をリストします。パラメーター名 |
指定可能な値 |
説明 |
enabled |
true (デフォルト)
false
|
WS-Addressing サポートが使用可能かどうか |
required |
true
false (デフォルト)
|
WS-Addressing ヘッダーが必須かどうか。 |
responses |
Responses.All (デフォルト)
Responses.ANONYMOUS
Responses.NON_ANONYMOUS
|
同期または非同期のどちらのメッセージ交換パターンを使用するか。
メッセージを同期メッセージ・パターンで送信する場合は Responses.ANONYMOUS を指定し、非同期メッセージ交換パターンで送信する場合は Responses.NON_ANONYMOUS を使用します。
注: このパラメーターは、SubmissionAddressing アノテーションではサポートされません。
|
注: Addressing アノテーションは、SOAP (1.1 または 1.2) over
HTTP バインディングでのみ使用できます。
別のバインディング (XML
over HTTP など) でこのクラスを使用すると、クライアントで例外がスローされ、サーバーで Web サービスのデプロイが失敗します。
手順
- サービス・アプリケーションの WS-Addressing サポートの振る舞いをプログラムで変更するには、コードで (必要に応じてオプション・パラメーターを指定して) いずれかのアドレッシング・アノテーションを使用します。 以下の例では、パラメーターを指定せずに Addressing アノテーションが使用されているため、デフォルト設定が適用されます。
import javax.xml.ws.soap.Addressing;
@Addressing
@WebService(endpointInterface =
"org.apache.axis2.jaxws.calculator.Calculator",
serviceName = "CalculatorService",
portName = "CalculatorServicePort",
targetNamespace = "http://calculator.jaxws.axis2.apache.org")
以下の例では、WS-Addressing が使用可能かつ必須であると指定するパラメーターを指定して SubmissionAddressing アノテーションが使用されています。このアノテーションでは、responses 属性はサポートされません。
import com.ibm.websphere.wsaddressing.jaxws21.SubmissionAddressing;
@SubmissionAddressing(enabled=true, required=true)
@WebService(endpointInterface =
"org.apache.axis2.jaxws.calculator.Calculator",
serviceName = "CalculatorService",
portName = "CalculatorServicePort",
targetNamespace = "http://calculator.jaxws.axis2.apache.org")
- 注入された Web サービス・プロキシー参照を使用するクライアントで WS-Addressing サポートを使用可能にするには、WebServiceRef アノテーションと組み合わせて、(必要に応じてオプション・パラメーターを指定して) Addressing アノテーションを使用します。
この方式では SubmissionAddressing アノテーションはサポートされません。
例えば、次のコード・フラグメントでは、WS-Addressing を使用可能にして、同期メッセージ交換パターンを使用することを指定しています。
public class MyClientApplication {
// Enable Addressing for a port-component-ref resource injection.
@Addressing(enabled=true, responses=Responses.ANONYMOUS)
@WebServiceRef(MyService.class)
private MyPortType myPort;
...
}
タスクの結果
サービス・アプリケーションでアドレッシング・アノテーションを使用すると、インバウンド SOAP メッセージ内に関連する仕様に準拠する WS-Addressing ヘッダーがあれば、サーバーはそれを処理します。
WS-Addressing が必須であると指定すると、インバウンド SOAP メッセージに WS-Addressing ヘッダーが含まれない場合、またはアノテーションで示された仕様に準拠しない WS-Addressing ヘッダーが含まれる場合、サーバーは障害メッセージを返します。
例えば、クライアントが 2004/08 WS-Addressing ヘッダーを含むメッセージを送信し、サーバーが 2005/08 ヘッダーを必要とする場合、サーバーは障害メッセージを返します。
Addressing アノテーションを使用し、コードから WSDL 文書を生成する場合、WSDL 文書に UsingAddressing エレメントと WS-Policy アサーションが作成されます。
この WSDL 文書を使用するクライアントは、メッセージに WS-Addressing 情報を組み込みます。SubmissionAddressing アノテーションは、現在の WSDL 生成ツールでは認識されません。
ただし、WSDL 文書では 2005/08 仕様と 2004/08 仕様は区別されないため、
SubmissionAddressing アノテーションが含まれているコードから WSDL 文書を生成する場合は、
Addressing および SubmissionAddressing の両方のアノテーションを一緒に使用します。
responses 属性を指定すると、対応するメッセージ交換パターンが使用されます。