10

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.

3
  • As always 12 minutes after finding the courage to post a question I found the solution. Flagged the Sudzc classes with -no-objc-arc and now I can use the old working code. As a fairly new user of obj-c I didn't know that existed.. Commented Dec 27, 2011 at 14:38
  • I'm experiencing the same problem and is probably a newer user than you :) I honestly don't know what you mean with flagging with -no-objc-arc, can you explain this? Commented Dec 30, 2011 at 10:30
  • Consider posting that as an answer and mark it accepted so that this question will be considered solved. While you're at it you may want to address @Stefan Jansson's comment as well. Commented Dec 30, 2011 at 11:08

4 Answers 4

16

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".

Sign up to request clarification or add additional context in comments.

5 Comments

THANK YOU THANK YOU THANK YOU! I was stuck on this same issue for two days and this was the fix I needed.
Thanks. Also, if this ilyasd's doesn't work, try @"soapenv:Body" instead of @"soap:Body".
Just had the same problem, and the above fix solved the issue :)
FYI, this will only work if the actual namespace is "soap", it is perfectly legal for it to be something else so long as it is properly declared in the XML document. Eg, you could have <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> which would need @"s:Body" or <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> which would be just @"Body".
One more thing, the SoapFault handling fails for the same lack of namespace support.
1

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" 

Comments

0

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

Comments

0

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.