[英]How to access soap header information?
我正在使用此代碼登錄到外部系統:
LoginResponse response = (LoginResponse) webServiceTemplate.marshalSendAndReceive(myRequest, new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) {
((SoapMessage)message).setSoapAction("http://www.system.com//Authentication/Login");
}
});
我收到了LoginResponse類型,但沒有價值。
LoginResponse類型僅包含:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "LoginResponse", namespace = "http://www.system.com/Authentication/")
public class LoginResponse {
}
我需要從標題訪問UserAuth值,但是LoginResponse對象中不包含此值。
SOAP響應為:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<UserAuth xmlns="http://www.system.com/ws/">
<Value>234234k234jl2k</Value>
</UserAuth>
</soap:Header>
<soap:Body>
<LoginResponse xmlns="http://www.system.com/Authentication"/>
</soap:Body>
</soap:Envelope>
在這種情況下,如何訪問標頭信息UserAuth值?
我是否需要使用較低級別的內容並從soap響應中解析所需的值?
更新:
我想我將需要使用使用SAAJ的自定義SOAP請求(類似於使用Java向WebService的SOAP請求 )並處理響應。
我的理解是,盡管響應中的soap標頭是可選的,但大多數客戶端在使用SOAP時仍使用標頭發送身份驗證類型信息? wsdl或生成.class文件的機制可能不正確,因此響應未填寫所有必填字段,在這種情況下為soap標頭。
我假設在對服務的后續請求中,需要將您在登錄操作響應中收到的來自UserAuth
標頭的信息作為SOAP標頭發送(可能與接收的標頭相同)。 如果是這種情況,那么您應該創建一個自定義ClientInterceptor
並將其注冊到WebServiceTemplate
。 該攔截器將從登錄響應中提取標頭,對其進行轉換(如有必要),並將其添加到后續請求中。
請注意,此攔截器將是有狀態的。 因此,您需要為每個對話使用單獨的WebServiceTemplate
實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.