1

我目前遇到了 Sudzc 生成的代码的问题。(对于基于 ARC 的 iOS)

使用生成的代码调用肥皂网络服务工作正常,当我需要检索响应时出现问题。

我目前处理这样的呼叫响应:

-(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 调用此代码时,代码运行良好(也就是说,它将解析日志中的错误)。

但是,当使用 IWWSLoginResult 作为参数调用它时,ResultAccessToken属性分别是NO(null),即使 Sudzc 代码的日志显示如下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 代码中的错误,还是我的错误?

4

1 回答 1

3

SudzC 在soap 结果消息中检查<body>标签,但大多数.Net web 服务使用<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];
于 2012-10-17T12:18:35.680 回答