2012-03-13 2 views
1

SudzCを使用してWebServiceクライアントを作成していますが、設定などの処理をいくつか試みた後にデータを返すことができました。サービス内でログ記録を有効にすると、以下のように応答ログが記録されます。 (私はStackOverflowの中に印刷することを可能にするためにXMLタグのすべてにスペースを追加している。私は、JAXBオブジェクトにこのデータを取得し、現在は動作します既存のJavaアプリケーションを持っているので、XMLが機能することを承諾してください。)Sudz-C Objective-C WebServicesは有効な結果をログに記録しますが、常にNILデリゲートオブジェクトを返す

2012-03-13 11:21:43.936 SampleProject[976:f803] 
< SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" > 
    < SOAP-ENV:Header/ > 
    < SOAP-ENV:Body > 
     < ns2:GetDevicesResponse xmlns:ns2="http://somesite.com/cayman/schemas" > 
      < ns2:Devices> 
       < ns2:DeviceName>Neelam 65< /ns2:DeviceName> 
       < ns2:DeviceName>Neelam 66< /ns2:DeviceName> 
      < /ns2:Devices> 
     < /ns2:GetDevicesResponse> 
    < /SOAP-ENV:Body> 
< /SOAP-ENV:Envelope> 

ただし、デリゲートを使用しようとすると、または
[サービスGetDevices:自己アクション:@selector(handleFind :)];
"result"の値は常にnilです。

XpressViewViewController.h 

@interface XpressViewViewController : UIViewController <SoapDelegate> 

... 

XpressViewViewController.m

@implementation XpressViewViewController 

... 

- (IBAction)initiateService:(id)sender { 

    CaymanService* service = [[CaymanService alloc]init]; 

    service.logging = YES; 

    NSMutableDictionary * headers = [[NSMutableDictionary alloc]init]; 
    SoapLiteral *soapLiteral =[SoapLiteral literalWithString: @"<wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"><wsse:UsernameToken xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"><wsse:Username>DUMMY</wsse:Username><wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">test</wsse:Password></wsse:UsernameToken></wsse:Security>"]; 

    [headers setValue:soapLiteral forKey:@"header"]; 

    [service setHeaders: headers]; 

    [service setNamespace:@"http://company.com/cayman/schemas"]; 

    //SoapRequest *sr = [service GetDevices:self action:@selector(handleFind:)]; 
    //NSLog(@"Request: ", sr.description); 

    [service GetDevices:self]; 
} 

    - (void) onload: (id) result; 
{ 
    //Why are you ALWAYS nil...What am I missing??? 
    NSLog(@"Data: %@", result); 
} 

- (void) onerror: (NSError*) error; 
{ 
    NSLog(@"Error: %@", error); 
} 
- (void) onfault: (SoapFault*) fault; 
{ 
    NSLog(@"Fault: %@", fault);  
} 
-(void)handleFind: (id) result { 
    if([result isKindOfClass: [NSError class]]) { 
     NSLog(@"Error: %@",result); 
     return; 
    } 

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

     return; 
    } 

    // This doesn't matter because result is ALWAYS nil 
    NSArray *data = [[NSArray alloc ]initWithArray: result]; 
    NSLog(@"We have %@ devices ", [NSNumber numberWithInt:data.count]); 
} 

答えて

2

私は同様の問題を抱えていたし、このリンクで概説ソリューションを助けた: http://code.google.com/p/sudzc/issues/detail?id=40

を基本的には - にバグがあるように思われますSudzCはまだパッチが適用されていませんが、Soap.mファイルへの1行の変更はその周りで動作します。

+0

ありがとうございます。私はこれを試してみましょう。私はフォーラムを検索しましたが、これは見つかりませんでした。 – Jerry