Я использую SudzC для создания клиента WebService, и после некоторых попыток по настройке и т. Д. Я смог вернуть данные. Когда я включаю ведение журнала в службе, ответы регистрируются, как показано ниже. (Я добавил пробелы во все теги XML, чтобы они могли печатать в StackOverflow. Пожалуйста, примите, что XML работает, потому что у меня есть приложение Java, которое извлекает эти данные в объекты JAXB и в настоящее время работает.)
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: self action: @selector (handleFind:)];
значение в «результате» всегда ноль.
Есть идеи?
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]);
}