Reputation: 12372
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:
NAMESPACE
, METHOD_NAME
, SOAP_ACTION
using only the WSDL of the service?addProperty(String name, Object value)
method, can I used arbitrary name
or it should follow a rule?Thanks in advance!
Upvotes: 2
Views: 3298
Reputation: 3057
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:
<wsdl:definitions targetNamespace="http://tempuri.org/">
And method(s) name(s) describes like as follow:
<s:element name="YourMethodName">
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
Upvotes: 1