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

来源:互联网 发布:怎么遍历json数组 编辑:程序博客网 时间:2024/05/20 09:07
/*        * 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