android利用Ksoap2访问利用xfire自…

最近在做一项目,用到的通信方式主要是webservices,在此分享一下关于webservice的使用。
包括以下几个方面:
自定义webservice。并自动生成wsdl。
通过android访问wsdl。利用ksoap2.(关于ksoap2的更多信息可访问我的另一篇: http://www.eoeandroid.com/thread-162563-1-1.html
系统开发环境:
     myeclipse8.5(自带xfire)
    eclipse   (android环境)
  tomcat6.0
一.服务器的搭建:
新建 webservice 工程:(注意下面要选中xfire),直接点击完成即可。
     

此时:WEB-INF下的web.xml会自动添加webservice的配置文件:
  1.   
  2.     XFireServlet
  3.     org.codehaus.xfire.transport.http.XFireConfigurableServlet
  4.     0
  5.   
  6.   
  7.     XFireServlet
  8.     /services/*
  9.   
复制代码
并新建一个webservices文件夹并生成services.xml
2.新建webservice :

选中xfire。并新建bean

名称为AddOper


系统会自动生成services配置文件说明:

  1.                 AddOper
  2.                 com.chengying.webservices.IAddOper
  3.                
  4.                         com.chengying.webservices.AddOperImpl
  5.                
  6.                
  7.                 literal
  8.                 application
  9.         
复制代码
3.测试wsdl生成:在下图的图标的右面点击小三角,选择lanunch soap。。。。

按照下面步骤测试wsdl方法:

直接点击方法即可测试:

可以查看xml源文件:


二.android端:
  采用ksaoap2的方式联通webservice。需要导入包:ksoap2-android-assembly-2.5.5-jar-with-dependencies.jar
主要步骤:
step1 指定WebService的命名空间和调用的方法名  
step2 设置调用方法的参数值,这里的参数名称最好和WebService一致  
step3 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本  
step4 创建HttpTransportSE对象  
step5 调用WebService  
step6 使用getResponse方法获得WebService方法的返回结果  

  1.                 public static String getString(String msg){
  2.         // step1 指定WebService的命名空间和调用的方法名
  3.         SoapObject request = new SoapObject("http://webservices.chengying.com" , "example");
  4.         // step2 设置调用方法的参数值,这里的参数名称最好和WebService一致
  5.         request.addProperty("message", msg);
  6.         
  7.         
  8.         
  9.         // step3 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
  10.         SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
  11.                         SoapEnvelope.VER10);
  12.         // 设置是否调用的是dotNet下的WebService
  13.         // envelope.dotNet = false;
  14.         // 必须,等价于envelope.bodyOut = request;
  15.         envelope.bodyOut = request;
  16.         envelope.setOutputSoapObject(request);
  17.         // step4 创建HttpTransportSE对象
  18.         
  19.         HttpTransportSE ht = new HttpTransportSE("http://192.168.1.102:8080/webservices/services/AddOper");
  20.         // step5 调用WebService
  21.         
  22.         try {
  23.                 ht.call(null, envelope);
  24.         } catch (IOException e) {
  25.                 // TODO Auto-generated catch block
  26.                 e.printStackTrace();
  27.         } catch (Exception e) {
  28.                 // TODO Auto-generated catch block
  29.                 e.printStackTrace();
  30.                 return null;
  31.         }
  32.         // step6 使用getResponse方法获得WebService方法的返回结果
  33.         
  34.         Object tempresult = null;
  35.         try {
  36.                 tempresult = (Object)envelope.getResponse();
  37.         } catch (SoapFault e) {
  38.                 // TODO Auto-generated catch block
  39.                 e.printStackTrace();
  40.         }
  41.         //下面对结果进行解析,结构类似json对象
  42.         String reslut=(String) tempresult.toString();
  43.         
  44.         return reslut;
  45. }
  46.                 public static  user finduser(){
  47.                         user temp=new user();
  48.                         // step1 指定WebService的命名空间和调用的方法名
  49.                         SoapObject request = new SoapObject("http://webservices.chengying.com", "find");
  50.                         // step2 设置调用方法的参数值,这里的参数名称最好和WebService一致
  51.                         
  52.                         
  53.                         
  54.                         // step3 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
  55.                         SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
  56.                                         SoapEnvelope.VER11);
  57.                         // 设置是否调用的是dotNet下的WebService
  58.                         // envelope.dotNet = false;
  59.                         // 必须,等价于envelope.bodyOut = request;
  60.                         envelope.bodyOut = request;
  61.                         envelope.setOutputSoapObject(request);
  62.                         // step4 创建HttpTransportSE对象
  63.                         
  64.                         HttpTransportSE ht = new HttpTransportSE("http://192.168.1.102:8080/webservices/services/AddOper");
  65.                         // step5 调用WebService
  66.                         
  67.                         try {
  68.                                 ht.call(null, envelope);
  69.                         } catch (IOException e) {
  70.                                 // TODO Auto-generated catch block
  71.                                 System.out.println(e.toString());
  72.                                 e.printStackTrace();
  73.                         } catch (Exception e) {
  74.                                 // TODO Auto-generated catch block
  75.                                 e.printStackTrace();
  76.                                 return null;
  77.                         }
  78.                         // step6 使用getResponse方法获得WebService方法的返回结果
  79.                         
  80.                         SoapObject tempresult = null;
  81.                         try {
  82.                                 tempresult = (SoapObject)envelope.getResponse();
  83.                         } catch (SoapFault e) {
  84.                                 // TODO Auto-generated catch block
  85.                                 e.printStackTrace();
  86.                         }
  87.                         //下面对结果进行解析,结构类似json对象
  88.                                 
  89.                         temp.setId((String) tempresult.getProperty(0).toString());
  90.                         temp.setName((String) tempresult.getProperty(1).toString());
  91.                         
  92.                         return temp;
  93.                         
  94.                         
  95.                         
  96.                 }
  97. }
复制代码
其中 "http://webservices.chengying.com为webservice的命名空间,具体可以通过请求的xml原文件的 xmlns:q0="“
特别注意:读取string的时候一定要用object , 最后加上通信:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值