下载地址: http://axis.apache.org/axis2
建立一个pojo,放到已经部署到tomcat的axis文件夹的WEB-INF的pojo文件夹下,如果没有自己建一个:
这个是pojo的java代码
import java.util.Random; public class Test2 { public String sayHello(String name) { return name + " say: hello [axis2]"; } public int getAge(int i) { return i + new Random().nextInt(100); } }
下面是Android部分
下载最新的ksoap2-android-assembly-3.0.0-RC.2-jar-with-dependencies.jar包,
下载地址: http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2
在Android Application Project 中建立一个文件夹,把Jar包放进去,并引入此Jar包
注意:一定要把这个Jar包所在的文件夹Build Path里设置为Use As Source Folder
接下来是Android Activity代码:
package com.example.testandroidwebservice; import java.io.IOException; import org.ksoap2.SoapEnvelope; import org.ksoap2.SoapFault; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class LoginActivity extends Activity { private static final String NAME_SPACE = "http://ws.apache.org/axis2"; private static final String WDSL_LINK = "http://192.168.1.102:8089/axis2/services/Test2?wsdl"; private static final String METHOD_NAME = "sayHello"; private Button call_soap; private EditText name_input; private TextView textView; private String resultStr; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); this.initUI(); this.call_soap.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { callWebService(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_login, menu); return true; } private void initUI() { call_soap = (Button) this.findViewById(R.id.soap_button); name_input = (EditText) this.findViewById(R.id.name_input); textView = (TextView) this.findViewById(R.id.textView); } private void callWebService() { Thread thr = new Thread() { public void run() { try { String name = name_input.getText().toString(); //Soap Object 是 SoapSerializationEnvelope的重要组成部分 SoapObject request = new SoapObject(NAME_SPACE, METHOD_NAME); request.addProperty("name", name); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = request; envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE ht = new HttpTransportSE(WDSL_LINK); ht.call("", envelope); String ret = String.valueOf(envelope.getResponse()); Log.d("resultStr = ", ret); setResultStr(ret); } catch (SoapFault e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } } }; thr.start(); textView.setText(resultStr); } public String getResultStr() { return resultStr; } public void setResultStr(String resultStr) { this.resultStr = resultStr; } }
我发现调用WebService不能用本线程,另外,调用本机的WebService,不能用127.0.0.1和localhost,切记