1

現在、Sudzc で生成されたコードに問題があります。(ARC ベースの iOS の場合)

生成されたコードを使用して 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 で呼び出されると、コードは正常に実行されます (つまり、ログ内のエラーが解析されます)。

しかし、パラメーターとして IWWSLoginResult を使用して呼び出された場合、Sudzc コードのログ記録が次のように表示されている場合でも、ResultおよびAccessTokenプロパティはそれぞれ次のように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 コードのエラーですか、それとも私の側のエラーですか?

4

1 に答える 1

3

SudzC は<body>タグの SOAP 結果メッセージをチェックしますが、ほとんどの .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 に答える