CXF入門教程(4) -- 設定上下文連線屬性

不淨之心發表於2013-04-06
原文參考: [url]http://blog.csdn.net/neareast/article/details/7733336[/url]
我們可以使用 JAX-WS 上下文來自定義客戶端代理的屬性。特別地,上下文可以用來修改連線屬性以及通過協議頭髮送資料。例如,我們可以用上下文新增一個SOAP頭,請求訊息和響應訊息都可以新增。客戶端支援下列型別的上下文:

Request context(請求上下文) - 在客戶端,請求上下文使我們能夠設定影響出站訊息的屬性。請求上下文屬性是應用到特定埠例項的,並且一旦設定了這些屬性,它們將對該埠隨後做出的每一個操作呼叫都有效,直到某屬性被顯式地消除。例如,我們可以使用請求上下文屬性來設定連線超時,或在資料頭中初始化要傳送的資料。
Response context(響應上下文) - 在客戶端,我們可以獲取響應上下文來讀取屬性值,這些值是由上一次操作呼叫的入站訊息設定的。每一次操作呼叫之後,響應上下文屬性都會被重置。例如,我們可以獲取一個響應上下文屬性來讀取從上一條入站訊息的資料頭訊息。

[b]設定請求上下文[/b]
要設定一個特殊的請求上下文屬性 ContextPropertyName,其值為 PropertyValue 可以用下面的程式碼:
Setting a Request Context Property on the Client Side
// Set request context property.
java.util.Map<String, Object> requestContext =
((javax.xml.ws.BindingProvider)port).getRequestContext();
requestContext.put(ContextPropertyName, PropertyValue);

// Invoke an operation.
port.SomeOperation();

我們需要將埠物件對映為 javax.xml.ws.BindingProvider ,以此來獲取請求上下文。請求上下文字身是一個 java.util.Map<String, Object> 型別,也就是一個有著String型別的“鍵”和任意型別的“值”的雜湊表。使用 java.util.Map.put() 在雜湊表中建立一個新的條目。

[b]讀取響應上下文[/b]
要檢索一個特定的響應上下文屬性 ContextPropertyName 使用如下程式碼:
Reading a Response Context Property on the Client Side
// Invoke an operation.
port.SomeOperation();

// Read response context property.
java.util.Map<String, Object> responseContext =
((javax.xml.ws.BindingProvider)port).getResponseContext();
PropertyType propValue = (PropertyType) responseContext.get(ContextPropertyName);

響應上下文的型別是 java.util.Map<String, Object> ,也是一個有著String型別的“鍵”和任意型別的“值”的雜湊表。我們可以使用 java.util.Map.get() 來獲取響應上下文屬性雜湊表中的一個條目。

[b]受支援的上下文型別[/b]
CXF支援下列上下文屬性:
上下文屬性名 org.apache.cxf.ws.addressing.JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES
上下文屬性型別 org.apache.cxf.ws.addressing.AddressingProperties

相關文章