Android WebService(基于SOAP协议) 连接方法

/*
        * SoapObject request = new SoapObject(serviceNamespace, methodName);
        * SoapObject构造函数的两个参数含义为:
        * serviceNamespace – 你的webservice的命名空间,
        * 既可以是
        * http://localhost:8088/flickrBuddy/services/Buddycast这样的,
        * 也可以是
        * urn:sap-com:document:sap:soap:functions:mc-style这样的;
        * methodName – 你要调用方法的名字。
        */
        SoapObject request = new SoapObject(NAMESPACE, methodName);// set up
        // SoapObject添加参数
        /*
        * 对于webservice方法返回String类型的情况,还用不着开发者做序列化(Serialization)定制工作。
        * 要点:
        * kSOAP1.X/2.0可以自动把四种SOAP类型映射为Java类型
        * SOAP type Java type
        * xsd:int java.lang.Integer
        * xsd:long java.lang.Long
        * xsd:string java.lang.String
        * xsd:boolean java.lang.Boolean 除此之外,都需要开发者自己做类型映射。
        */
        if (properties != null) {
            for (Iterator<Map.Entry<String, String>> it = properties.entrySet().iterator(); it.hasNext(); ) {
                Map.Entry<String, String> entry = it.next();
                request.addProperty(entry.getKey(), entry.getValue());
            }
        }
        /*
        * SoapSerializationEnvelope envelope =new
        * SoapSerializationEnvelope(SoapEnvelope.VER11);
        * envelope.bodyOut = request;
        * 要点:
        * 你可以通过SoapSerializationEnvelope或者SoapEnvelope的构造函数来指明你要用SOAP的哪一个规范
        * ,可以是以下几种之一: 常量SoapEnvelope.VER10:对应于SOAP 1.0规范
        * 常量SoapEnvelope.VER11:对应于SOAP 1.1规范 常量SoapEnvelope.VER12:对应于SOAP 1.2规范
        * 这样,无论要调用的webservice采用了哪一个SOAP规范,你都可以轻松应对。
        */
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10); // put all required data into a soap
        envelope.dotNet = false;
        envelope.setOutputSoapObject(request);
        /*
        * HttpTransport tx = new HttpTransport(serviceURL); ht.debug = true;
        * HttpTransport构造函数的参数含义为: serviceURL – 要投递SOAP数据的目标地址,譬如说
        * http://soap.amazon.com/onca/soap3 。
        * HttpTransport是一个强大的辅助类,来完成Http-call transport
        * process,它封装了网络请求的一切,你完全不用考虑序列化消息。我们通过设置它的debug属性为true来打开调试信息。
        * 方法HttpTransport.call()自己就能够发送请求给服务器、接收服务器响应并序列化SOAP消息,如下所示:
        * ht.call(null, envelope); HttpTransport的call方法的两个参数含义为: soapAction –
        * SOAP 规范定义了一个名为 SOAPAction 的新 HTTP 标头,所有 SOAP HTTP 请求(即使是空的)都必须包含该标头。
        * SOAPAction
        * 标头旨在表明该消息的意图。通常可以置此参数为null,这样HttpTransport就会设置HTTP标头SOAPAction为空字符串。
        * Envelope – 就是前面我们构造好的SoapSerializationEnvelope或SoapEnvelope对象。
        * 注意:
        * 对于HttpTransport的处理上,kSOAP2和kSOAP1.2的写法不一样。 对于kSOAP
        * 1.2,HttpTransport的构造函数是HttpTransport (String url, String
        * soapAction),第二个参数soapAction可以是要调用的webservice方法名。 而kSOAP 2,构造函数是
        * HttpTransport(String
        * url)。kSOAP2相当于把webservice方法名分离出去,完全交给SoapObject去封装
        * ,而HttpTransport仅仅负责把SoapEnvelope发送出去并接收响应
        */
        HttpTransportSE httpTransport = new HttpTransportSE(url);
        httpTransport.debug = true;
        try {
            httpTransport.call(SOAP_ACTION, envelope);
            SoapObject result = (SoapObject) envelope.bodyIn;
            for (int i = 0; i < result.getPropertyCount(); i++) {
                SoapObject obj3 = (SoapObject) result.getProperty(0);
                System.out.println("theeeeeeeeee" + obj3);
            }
        } catch (SocketException ex) {
            ex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值