I'm starting to use webservices in Android and I followed this tutorial: Create Web Service in Java Using Apache Axis2 and Eclipse to create and consume the webservice. This tutorial explain the client side application in Java but with some others tutorials I was able to consume the WS in Android like this:
package com.android.webservices;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class AddNumbersWSActivity extends Activity {
/** Called when the activity is first created. */
private String METHOD_NAME = "addTwoNumbers"; // our webservice method name
private String NAMESPACE = "http://sencide.com"; // Here package name in webservice with reverse order.
private String SOAP_ACTION = "http://sencide.com/addTwoNumbers"; // NAMESPACE + method name
private static final String URL = "http://192.168.1.214:8080/axis2/services/FirstWebService?wsdl"; // you must use ipaddress here, don’t use Hostname or localhost
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button addButton = (Button) findViewById(R.id.button1);
addButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
try
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
EditText num1 = (EditText) findViewById(R.id.editText1);
EditText num2 = (EditText) findViewById(R.id.editText2);
request.addProperty("firstNumber", Integer.valueOf(num1.getText().toString()));
request.addProperty("secondNumber", Integer.valueOf(num2.getText().toString()));
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
// envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION,envelope);
Object result = envelope.getResponse();
System.out.println("Result : " + result.toString());
((TextView) findViewById (R.id.textView4)).setText(result.toString());
} catch (Exception E) {
E.printStackTrace();
}
}
});
}
}
But now I have some questions about consuming WS in Android:
- As I can see here, the kSOAP2 library is deprecated... Should I continue to use this library or I need another tool? If yes, which one?
- Is it possible to know the
NAMESPACE
,METHOD_NAME
,SOAP_ACTION
using only the WSDL of the service? - Can I generate some code automatically using WSDL (like WSDL2Java tool that is used for Java applications)?
- At the
addProperty(String name, Object value)
method, can I used arbitraryname
or it should follow a rule?
Thanks in advance!
Apache Axis is for Java and do not work in Android platform. Ksoap2 library is an alternate for this and mostly used tool to consuming webservices in Android. For your questions:
1 - Today [15.5.2012] i can see the last commit only 4 days ago in here
2 - Yes it is possible. The namespace describes like as follow:
And method(s) name(s) describes like as follow:
And SOAP action is genarally consist NAMESPACE + METHOD_NAME;
3 - As I know, there is no well written project for now.
4 - It should follow a rule that must be mach to WSDL's attributes name and case sensitivity