2012-10-16 43 views
1

我目前遇到了Sudzc生成的代碼問題。 (適用於基於ARC的iOS)Sudzc響應問題(iOS ARC)

使用生成的代碼調用soap web服務可以正常工作,這是我需要檢索響應時的問題。

我目前處理呼叫的反應是這樣的:

-(void)userLoginCompleted:(id)value 
{ 
    if([value isKindOfClass:[NSError class]]) 
    { 
     NSLog(@"%@",value); 
    } 

    if([value isKindOfClass:[SoapFault class]]) 
    { 
     NSLog(@"%@",value); 
    } 

    if([value isKindOfClass:[IWWSLoginResult class]]) 
    { 
     IWWSLoginResult *loginData = (IWWSLoginResult*)value; 
     NSLog(@"LoginData Result: %i",loginData.Result); 
     NSLog(@"LoginData AccessToken: %@",loginData.AccessToken) 
     //Other login related stuff here 
    } 
} 

每當這個代碼被稱爲與NSError或的SOAPFault,該代碼運行正常(即,它會解析日誌中的錯誤)。

但即使Sudzc代碼的記錄顯示,當它被稱爲一個IWWSLoginResult爲參數的ResultAccessToken性質分別爲NO(null),這ResponseEnvelope

<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:Body> 
     <UserLoginResponse xmlns="[Omitted]"> 
      <UserLoginResult> 
       <Result>true</Result> 
       <AccessToken>[Omitted]</AccessToken>    
      </UserLoginResult> 
     </UserLoginResponse> 
    </soap:Body> 
</soap:Envelope> 

AccessToken and xmlns-url ommitted, but present

是這是生成的SudzC代碼中的錯誤,還是這是我的錯誤?

回答

3

SudzC在soap結果消息中檢查<body>標記,但大多數.Net webservice使用<soap:body>標記。這很可能會使框架認爲沒有結果,因此將結果的值默認爲false或null。

爲了解決這個問題更改以下元素在SoapRequest.m文件:

CXMLNode *element = [[Soap getNode: [doc rootElement] withName: @"Body"] childAtIndex:0]; 

CXMLNode *element = [[Soap getNode: [doc rootElement] withName: @"soap:Body"] childAtIndex:0]; 
+1

這完美地工作!謝謝! –

+0

我有完全相同的錯誤,但不是添加「soap:」前綴我添加了額外的if語句 - 如果元素爲nil,則嘗試查找soap:Body –