SOAP Client mit Cocoa

Aus irgendwelchen Gründen bin ich auf die Schnaps-Idee gekommen, gleich bei einem meiner ersten Testprojekte einen Webservice Aufruf starten zu wollen. Apple liefert mit Xcode ein kleines Tool mit dem Namen 'WSMakeStubs' aus, welches anhand einer WSDL Datei Stub Files für verschiedene Programmiersprachen erzeugt.
Die erzeugten Stub Files hab ich dann per Drag & Drop in Xcode importiert. Soweit war das auch alles kein Problem.
Der Aufruf der Webservice Methode sollte mit Hilfe dieses Code Schnipsels eigentlich kein Problem darstellen:


SoapTestWithLogin *stat = [[SoapTestWithLoginLogin alloc] init];
[stat
setParameters: [NSNumber numberWithLong:100] in_username:@"felix" in_password:@"******"];
NSDictionary *dict = [stat getResultDictionary];

Leider lieferte mit der Aufruf nur folgende Fehlermeldung des Servers (übrigens J2EE):

No WSDL:Port has been found for the SOAP operation {http://anonuri/} ...

Nach längere Recherchen und Vergleichen hab ich dann festgestellt, dass beim HTTP Request folgender Header mitgeschickt wird: Soapaction: SOAPACTION.
Das macht nicht nur wenig Sinn, sondern ist auch falsch. Ich hab mir die von WSMakeStubs erzeugten Stub Files näher angesehen und dabei einen Fehler in der Datei WSGeneratedObj.m gefunden.
Die lokale Variable 'soapAction' überdeckt hier den Parameter mit dem gleichen Namen. Durch einfaches umbenennen der Variablen konnte der Soapaction Header korrigiert werden.
Der neue Codeabschnitt sieht jezt so aus:


NSString
* soapActionHeader = @"SOAPAction";
NSDictionary* headers = [self copyHeaderDictionary:1 extraVals:&soapAction extraKeys:&soapActionHeader];
WSMethodInvocationSetProperty(ref, kWSHTTPExtraHeaders, headers);
[headers
release];

Allerdings funktioniert der Soap Request immer noch nicht. Jetzt beschwert sich der Server über ein unbekanntes Element im XML Code.
Ich werde mich jetzt wohl oder übel direkt mit den Core Services befassen müssen da mich die erzeugten Stub Files nicht weiterbringen.
Allerdings bin ich schon etwas enttäuscht dass dieses Tool ganz offensichtliche Fehler enthält die auch bei Apple längst jemand bemerkt haben dürfte.
Eine Alternative zum Erzeugen von Cocoa Stub Files habe ich übrigens nicht finden können. Ich wäre da für jeden Tipp sehr dankbar.
Einen ganz interessanten Artikel zum Thema Core Web Services habe ich bei
macdevcenter gefunden.
|