檢查出埠訊息中設定的 SOAP 動作的行為變更

在 WebSphere Application Server 第 8 版中,在 JAX-WS 分派用戶端出埠訊息上如何決定 SOAP 動作設定的行為有了改變。 在第 8 版之前的舊版中,如果分派用戶端應用程式沒有提供 SOAP 動作,JAX-WS 執行時期環境就不會在出埠訊息上傳送正確的 SOAP 動作。 相反地,它會將動作設為匿名作業。 現在,在第 8 版中,如果用戶端應用程式沒有提供 SOAP 動作,JAX-WS 執行時期環境會剖析送出的訊息來判斷所呼叫的作業,且會用它來判斷適當的 SOAP 動作值。

在下列情況下,此規則會標示對建立分派用戶端的呼叫:

WebSphere Application Server Traditional 及 Liberty 的最佳編碼實務,是讓用戶端應用程式使用 JAX-WS javax.xml.ws.BindingProvider 內容 SOAPACTION_USE_PROPERTYSOAPACTION_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 動作會照舊繼續設為匿名作業。 這個停用內容定義為 org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION 常數,字串值為 jaxws.dispatch.outbound.operation.resolution.enable。 如果沒有設定這個內容,它會解譯為 true 字串,啟用出埠作業解析。 將這個內容設為 false 會停用出埠作業解析。

如需相關資訊,請參閱: