java soap协议接口实例,javaweb 服务器 提供SOAP协议接口,android客户端调用代码实现过程...

packagekandroid.keegan.com.theclient;importandroid.app.Activity;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.Button;importorg.ksoap2.SoapEnvelope;importorg.ksoap2.serialization.SoapObject;importorg.ksoap2.serialization.SoapSerializationEnvelope;importorg.ksoap2.transport.HttpTransportSE;importorg.xmlpull.v1.XmlPullParserException;importjava.io.IOException;public classMainActivity extendsActivity {

privateButton button;@Overrideprotected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button= (Button)findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {

testWebservice();printChenxinkuiString();}

});}

public voidtestWebservice(){

newThread(newRunnable() {

@Overridepublic voidrun() {

try{

String nameSpace = "http://service.hyan.com/";String methodName = "getValue";String actionName = nameSpace + methodName;//SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。//指定webservice的命名空间和调用的方法名SoapObject request = newSoapObject(nameSpace,methodName);//设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下//要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致(我发现必须为“arg0,arg1”),只要设置参数的顺序一致即可。request.addProperty("arg0","chenxinkui");//生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述//创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象SoapSerializationEnvelope envelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);envelope.dotNet= false;// envelope.bodyOut = request;envelope.setOutputSoapObject(request);// envelope.bodyOut = request;//创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URLHttpTransportSE ht =newHttpTransportSE("http://10.37.68.153:8080/TheService2/ServiceHello");//使用call方法调用WebService方法//Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象ht.call(actionName,envelope);//使用getResponse方法获得WebService方法的返回结果if(envelope.getResponse() != null){

/*** 打印服务端返回的结构*/Log.e("chenxinkui","服务端返回的结果是::"+envelope.getResponse().toString());// SoapObject result = (SoapObject) envelope.bodyIn;// String strResponse = result.getProperty("org0");}else{

Log.e("chenxinkui","envelope 为空");}

// SoapObject soapObject = ( SoapObject) envelope.getResponse();// Log.e("chenxinkui","soapObject:"+"adsfasdf");// Log.e("chenxinkui","soapObject:"+soapObject.toString());// SoapObject result = (SoapObject) envelope.bodyIn;// detail = (SoapObject) result// .getProperty("getWeatherbyCityNameResult");} catch(IOException e) {

Log.e("~~","e1:"+ e.toString());Log.e("~~","getMessage:"+ e.getMessage());e.printStackTrace();} catch(XmlPullParserException e) {

Log.e("~~","e2:"+ e.toString());e.printStackTrace();}

}

}).start();}

//这个是我第二个方法,实现代码基本一模一样,就加了一个参数,看懂上面那个方法就好了

public voidprintChenxinkuiString(){

newThread(newRunnable() {

@Overridepublic voidrun() {

try{

String nameSpace = "http://service.hyan.com/";String methodName = "printChenxinkuiString";String actionName = nameSpace + methodName;//SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。//指定webservice的命名空间和调用的方法名SoapObject request = newSoapObject(nameSpace,methodName);//设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下//要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致(我发现必须为“arg0,arg1”),只要设置参数的顺序一致即可。request.addProperty("arg0","3");request.addProperty("arg1","5");//生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述//创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象SoapSerializationEnvelope envelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);envelope.dotNet= false;// envelope.bodyOut = request;envelope.setOutputSoapObject(request);// envelope.bodyOut = request;//创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URLHttpTransportSE ht =newHttpTransportSE("http://10.37.68.153:8080/TheService2/ServiceHello");//使用call方法调用WebService方法//Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象ht.call(actionName,envelope);//使用getResponse方法获得WebService方法的返回结果if(envelope.getResponse() != null){

/*** 打印服务端返回的结构*/Log.e("chenxinkui","客户端传入的两个数,服务器相加结果为:"+envelope.getResponse().toString());// SoapObject result = (SoapObject) envelope.bodyIn;// String strResponse = result.getProperty("org0");}else{

Log.e("chenxinkui","envelope 为空");}

// SoapObject soapObject = ( SoapObject) envelope.getResponse();// Log.e("chenxinkui","soapObject:"+"adsfasdf");// Log.e("chenxinkui","soapObject:"+soapObject.toString());// SoapObject result = (SoapObject) envelope.bodyIn;// detail = (SoapObject) result// .getProperty("getWeatherbyCityNameResult");} catch(IOException e) {

Log.e("~~","e1:"+ e.toString());Log.e("~~","getMessage:"+ e.getMessage());e.printStackTrace();} catch(XmlPullParserException e) {

Log.e("~~","e2:"+ e.toString());e.printStackTrace();}

}

}).start();}

@Overridepublic booleanonCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main,menu);return true;}

@Overridepublic booleanonOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.intid = item.getItemId();//noinspection SimplifiableIfStatementif(id == R.id.action_settings) {

return true;}

return super.onOptionsItemSelected(item);}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值