簡體   English   中英

如何訪問肥皂頭信息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM