views:

269

answers:

2

Hi,

I know this question has been asked here before, but I don't think those answers were adequate for my needs.

We have a SOAP webservice that is used for an iPhone application, but it is possible that we need an Android specific version or a proxy of the service, so we have the option to go with either SOAP or JSON. I have a few concerns about both methods:

SOAP solution:

  1. Is it possible to generate java source code from a WSDL file, if so, will it include some kind of proxy class to invoke the webservice and will it work in the Android environment at all?
  2. Google has not provided any SOAP library in Android, so i need to use 3rd party, any suggestion?
  3. What about the performance/overhead with parsing and transmitting SOAP xml over the wire versus the JSON solution?

JSON solution:

  1. There is a few classes in the Android sdk that will let me parse JSON, but does it support generic parsing, like if I want the result to be parsed as a complex type? Or would I need to implement that myself?
  2. I have read about 2 libraries before here on Stackoverflow, GSON an Jackson. What is the difference performance and usability (from a developers perspective) wise? Do you guys have any experince with either of those libraries?

So i guess the big question is, what method to go with?

I hope you can help me out. Thanks in advance :-)

+2  A: 

I cannot talk much about the JSON solution. But I've been working with SOAP on Android for a while.

Here are my comments regarding the SOAP solution.

  1. The most popular library that I've found for doing SOAP on Android devices is kSOAP.
  2. The default kSOAP library doesn't provide a way to generate Java classes from a WSDL. It is a big problem if you have a WSDL with a lot of method. I found a project (http://en.sourceforge.jp/projects/sfnet_wsdl2ksoap2/) that "claims" to do it. NOTE: I've not used this successfully yet. I discovered it after I had implemented the current version of my code.
  3. XML parsing has an overhead and sometimes it can be a problem. The parsing overhead will depend on your application context and performance requirements. Currently, I'm getting acceptable performance by using SOAP to send video frames (SOAP containing base64 encoded MJPEG frames.) For large messages parsing time on a Nexus One are of the order of a 150-200 ms (depending on the message size.)

This may be unrelated but I found this Google I/O session on building RESTFul applications for Android useful. I think they also released a JSON API in 2.2

Hope this helps.

Soumya Simanta
Thank you for your answer. Wsdl2ksoap2 sounds like an interesting project, but its empty though. I can't be the only one looking for such a tool, what do you guys do when you want to consume a fairly large webservice (wsdl), write it all manually?I'm still hoping someone will comment on the JSON solution :-)
Lasse P
A: 

I have been working on something similar myself, and although I may not be the best authority on this, I would say 9 times out of 10 JSON is the way you want to go. Not that soap doesn't have it's place, but for most things JSON will be simpler, and if it doesn't look that way it's more likely that your service needs refactoring rather than having a genuinely complex domain to represent.

The added bonus ofcourse is if you want to use the same service on iPhone, Blackberry, WinMo7, Ajax website, or really anywhere else, it will be much much better for you :-)

My $0.02

amarsuperstar
Thanks. I went with the json solution, since its likely going to be used for ajax also, and it was very easy to parse the json with Gson ;-)
Lasse P