android通过ksoap2和axis调用web service

时间:2022-06-26 13:22:11

针对我们的订餐系统做如下记录:

1.       整理dao包下的类:

a)         把连接数据库的内容直接写在类里,不调用SqlFunction

b)        有些返回的是entity包下的实体类,把这些返回值改成String,内容用标签分隔

2.       axis在tomcat的webapp下面,把整理好的类放到axis下,把后缀改成jws

3.       在浏览器测试一下,输入http://localhost:8080/axis/包/类.jws,如果显示xml文件就说明发布成功

4.       android程序详细代码附后,其中几个类的调用顺序:

a)         SoapObject (addProperty添加参数)

b)        SoapSerializationEnvelope

c)        AndroidHttpTransport

5.       在android程序中要注意以下几点:

a)         要记得在AndroidManifest.xml中加

<uses-permission android:name="android.permission.INTERNET" />

b)        用SoapObject传输,其中用addProperty方法添加参数,参数名和服务器的不用一致,但是顺序要一致。

c)        SOAP请求信息对应SoapSerializationEnvelope对象。其中构造中传递的是SOAP协议的版本号,我们用的是SoapEnvelope.VER11。然后要指定bodyOut属性,对应SoapObject对象。

d)        用HttpTransportSE类指定WebService的WSDL文档的URL,也就是我们的web service的地址。call方法的第1个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象

e)         使用KSOAP2调用WebService可分为6步来完成,其中主要使用了SoapObject对象来指定了要调用的方法,然后通过HttpTransportSE对象的call方法来调用WebService的方法,最后通过getResponse方法返回结果。

f)         详细教程可以参考http://www.cnblogs.com/xiaohuzi/articles/1887312.html 

 

调用代码:

public static String doCallWebService(String soapAction, String methodName, Map<String, String> props){

    String xmlStr;   

    SoapObject request = new SoapObject(Constant.NAMESPACE, methodName);

    Set<String> sets = props.keySet();

   Iterator it = sets.iterator();

   while(it.hasNext()){

        String name =(String)it.next();

        String value =(String)props.get(name);

        request.addProperty(name, value);

     

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

        envelope.dotNet = true;

        envelope.setOutputSoapObject(request);

        AndroidHttpTransport androidHttpTransport =new AndroidHttpTransport (Constant.URL);            

       try {

        androidHttpTransport.call(soapAction, envelope);

       

            Object result = envelope.getResponse();

            Log.i("resultObject",String.valueOf(result==null));

            xmlStr = result.toString();

        } catch(Exception e) {

        e.printStackTrace(); 

       return null;

             

       return xmlStr;

}

其中

   public static final String SOAP_ACTION = "http://tempuri.org/axis/3G/ModBean/check";
 public static final String METHOD_NAME = "check";
  
    public static final String NAMESPACE = "http://tempuri.org/axis/3G/ModBean";
    public static final String URL = "http://10.21.244.54:8080/axis/3G/ModBean.jws";