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_PROPERTY が false に設定されている場合、この規則によって 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 に設定すると、アウトバウンド操作解決は使用不可になります。
追加情報については、以下を参照してください。