アウトバウンド・メッセージで設定された SOAP アクションでの振る舞いの変更を確認する

WebSphere Application Server V8 では、SOAP アクション設定が JAX-WS Dispatch クライアントに対するアウトバウンド・メッセージでどのように決定されるかについて振る舞いが変更されました。 V8 より前のリリースでは、SOAP アクションが Dispatch クライアント・アプリケーションによって提供されていない場合、JAX-WS ランタイム環境ではアウトバウンド・メッセージで正しい SOAP アクションが送信されません。代わりに、アクションが匿名操作に設定されます。 V8 では現在、SOAP アクションがクライアント・アプリケーションによって提供されていない場合、JAX-WS ランタイム環境によって出力メッセージが構文解析されて、起動される操作が決定され、それによって SOAP アクションの適切な値が決定されるようになっています。

この規則により、以下の条件が該当すると、Dispatch クライアントを作成するための呼び出しにフラグを立てます。

WebSphere Application Server traditional および Liberty でのコーディングのベスト・プラクティスは、クライアント・アプリケーションが JAX-WS javax.xml.ws.BindingProvider プロパティーの SOAPACTION_USE_PROPERTY および SOAPACTION_URI_PROPERTY を使用して SOAP アクションを提供することです。 提供された SOAP アクションが使用され、DISPATCH_CLIENT_OUTBOUND_RESOLUTION プロパティーの設定に関係なく、アウトバウンド・メッセージの構文解析は行われません。

以下の例では、要求コンテキストで SOAP アクションが設定されているベスト・プラクティスのコードを示しています。 SOAPACTION_URI_PROPERTY が設定されていない場合、または SOAPACTION_USE_PROPERTYfalse に設定されている場合、この規則によって createDispatch() メソッドの呼び出しにフラグが立てられます。

例:

//Create a dispatch instance
Dispatch<SOAPMessage> dispatch =
service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);

// Use Dispatch as BindingProvider
BindingProvider bp = (BindingProvider) dispatch;

// Configure RequestContext to send SOAPAction HTTP Header
Map<String, Object> rc = bp.getRequestContext();
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, "hello");

この構文解析にはコストがかかる場合があるので、プロパティーを WebSphere Application Server traditional 上でシステム・レベルで設定するか(構文解析を常に使用不可にする場合)、JAX-WS 要求メッセージ・コンテキストで設定することができます (構文解析をメッセージ単位で使用不可にする場合)。構文解析が使用不可になっている場合、アウトバウンド・メッセージの SOAP アクションは、引き続き従来どおり匿名操作に設定されます。使用不可にするためのプロパティーは、jaxws.dispatch.outbound.operation.resolution.enable というストリング値を持つ定数 org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION として定義します。 このプロパティーを設定しない場合、プロパティーは、ストリング true として解釈され、アウトバウンド操作解決が使用可能になります。 このプロパティーを false に設定すると、アウトバウンド操作解決は使用不可になります。

追加情報については、以下を参照してください。