Sudzc with iOS 5 and ARC

2020-05-19 07:58发布

问题:

I've been trying to get a webservices working using Sudzc. Whenever I convert my WSDL to obj-c without automatic reference counting it works just fine. The problem is, we are building all our applications in iOS 5 now and all our code uses ARC. Sudzc now also allows you to create a bundle with ARC enabled but when I run this code it always returns null.

I tried debugging the Sudzc code and it does receive a correct xml response back from the service. Somewhere something is lost in translation. I tried converting the working Sudzc code without ARC into code with ARC enabled but as soon as I've fixed all errors it returns null again.

Did anyone encounter this and know what is going wrong? Would save me loads of time not having to debug the whole Sudzc code by myself.

回答1:

In my case (SUDZC with ARC for IOS), I have replaced the folowing code in SoapRequest.m file;

CXMLNode* element = [[Soap getNode: [doc rootElement] withName:@"Body"] childAtIndex:0];

with

CXMLNode* element = [[Soap getNode: [doc rootElement] withName:@"soap:Body"] childAtIndex:0];

Somehow the respective function is searching for the root element with name "Body". After inspecting the soap envelope it is easy to see the root element's name is "soap:Body".



回答2:

My webService was create in Java with Axis Eclipse.

FOR ARC I use : "soapenv:Body"

And in the file SoapObject.m I add

#import "Soap.h"
#import "SoapObject.h"


回答3:

In my case "env:Body" worked. Check your return xml (by printing) and replace appropriately



回答4:

In my case it was an .Net web service (WCF) and I had to use s:Body: Found out by printing the CXML document:

CXMLNode* test = [doc rootElement];
NSLog(@"%@",test);

Here I got this:

<CXMLElement 0x68c1a50 [0x68c1b10] s:Envelope <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><**s:Body**><GetUserIDResponse xmlns="http://tempuri.org/"><GetUserIDResult>8</GetUserIDResult></GetUserIDResponse></s:Body></s:Envelope>>

Thanks to previous posts I was able to find it out and posted the complete answer again on my blog: http://www.dailycode.info/Blog/post/2012/08/07/SUDZC-webservices-always-return-0-(WCF-web-service-and-IOS-client).aspx