SOAP Client Generator para Objective-C de WSDL?

Estoy atrapado en un proyecto de integración SOAP. Necesito llamar a algunos web services SOAP desde una aplicación iPad.

Tengo el WSDL y necesito generar las classs Objective-C para invocar las llamadas de service.

La biblioteca de desarrolladores de Mac tiene un "Ejemplo: Llamar a una operación SOAP con authentication HTTP" , pero el código de muestra al que se vincula está roto ( SOAP_AuthExample.dmg, 404 ).

La Guía de progtwigción básica de web services incluso dice (énfasis agregado):

"Actualmente, OS X no proporciona soporte de alto nivel para extraer funciones SOAP de files WSDL. Sin embargo, puede usar NSXMLParser para leer un file WSDL en la memory desde una URL. Entonces, es relativamente simple search en el file un nombre de método particular o para encontrar una URL asociada a un service. Con un poco más de esfuerzo, puede extraer nombres de methods, types de datos y nombres de parameters para build una llamada SOAP. A continuación, puede usar el marco de Web Services Core para realizar llamadas SOAP y analizar el respuestas "

También encontré los siguientes tres generadores; sin embargo, el primero arroja un error sobre algunos files que faltan, el código del segundo genera y una secuencia interminable de errores ARC cuando bash build (y un refactor no funciona), y el tercero es "paywalled".

  1. http://easywsdl.com/
  2. https://code.google.com/p/wsdl2objc/
  3. http://sudzc.com/

¿Alguien puede guiarme en la dirección correcta?

Estuve en la misma situación hace un par de meses, y actualmente estoy trabajando en una aplicación para iPad que requiere conectarse a un service SOAP. Ya tengo las classs, pero son específicas para mi proyecto y no estoy autorizado para compartirlas. Sin embargo, estoy haciendo una class Objective-C más genérica (en cualquier caso, la solución final para todos los serveres SOAP) para compartirla con el mundo en Github.

En primer lugar, debe configurar el post SOAP. Tiene una estructura común como esta:

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> // here comes the header information: cnetworkingentials, connection information. If needed, of course </soap:Header> <soap:Body> // here comes the request parameters. In my case, these parameters are related to a resource called SOAPAction (That identifies the method to be called. eg getListOfClients). I don't know if it is the same in all servers </soap:Body> </soap:Envelope> 

Te digo, la compañía para la que estoy haciendo la aplicación, me ha proporcionado los methods y la información de authentication. No sé si este es tu caso, pero aquí tienes una mirada general de qué hacer.

Utilizo AFNetworking para enviar la request, de esta manera:

 NSString *messageLength = [NSString stringWithFormat:@"%lu", (unsigned long)[msg length]]; NSURL *requestURL = [NSURL URLWithString:self.requestURL]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:requestURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:30]; [theRequest addValue:[requestURL host] forHTTPHeaderField:@"Host"]; [theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [theRequest addValue:soapAction forHTTPHeaderField:@"SOAPAction"]; [theRequest addValue:messageLength forHTTPHeaderField:@"Content-Length"]; [theRequest setHTTPMethod:@"POST"]; [theRequest setHTTPBody:[msg dataUsingEncoding:NSUTF8StringEncoding]]; // sending the request AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:theRequest]; operation.responseSerializer = [AFHTTPResponseSerializer serializer]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *xml = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"Take the data master Yoda: %@", xml); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Bad SOAP server!. Error: %@", error.description) }]; [[NSOperationQueue mainQueue] addOperation:operation]; 

self.requestURL es la URL del server, obviamente. Si la request fue exitosa, entonces tiene la respuesta XML del server list para analizar. De lo contrario, una descripción de error de request.

Esta página me ayudó mucho a encontrar una solución para algunos problemas que encontré, y está relacionado con el website http://sudzc.com/ que usted cita más arriba:

http://blog.exadel.com/working-with-ios-and-soap/

Espero que esto ayude de alguna manera.