調用webservice總結: 1.加入第三方的jar包 Ksoap2-android-XXX 2.訪問響應的webservice的網站,查看響應的信息,得到nameSpace,methodName,url,soapAction 3.如果request信息還有帶有SoapHander的。那么就要封裝:依據參數封裝 Element[] header = new Element[1]; header[0] = new Element().createElement(nameSpace, "SoapHeader"); Element userName = new Element().createElement(nameSpace, "UserID"); userName.addChild(Node.TEXT, UserID); header[0].addChild(Node.ELEMENT, userName); Element pass = new Element().createElement(nameSpace, "PassWord"); pass.addChild(Node.TEXT, PassWord); header[0].addChild(Node.ELEMENT, pass); 4.封裝request信息的SoapBody // 指定WebService的命名空間和調用的方法名 SoapObject soapObject=new SoapObject(nameSpace, methodName); //處理soap12:Body數據部分 soapObject.addProperty("loginName",username); soapObject.addProperty("password",password); 5.指定SoapSerializationEnvelope信息 SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); //SoapEnvelope.VER11 表示使用的soap協議的版本號 1.1 或者是1.2 envelope.headerOut=header; envelope.bodyOut=soapObject; envelope.dotNet = true; //指定webservice的類型的(java,PHP,dotNet) envelope.setOutputSoapObject(soapObject); 6.指定HttpTransportSE HttpTransportSE ht = new HttpTransportSE(url); 7.訪問webservice服務器 ht.call(soapAction, envelope); 8.兩種方式獲取服務器返回的信息 envelope.getResponse(); envelope.bodyIn; 兩者的區別:Webservice開發的時候一般情況下大家接受webservice服務器返回值的時候都是使用 SoapObject soapObject = (SoapObject) envelope.getResponse();這個來接受返回 來的值,但這種方法往往會產生java.lang.ClassCastException: org.ksoap2. serialization.SoapPrimitive這樣的錯誤。 在服務器端返回值是String類型的數值的時候使用SoapObject soapObject = (SoapObject) envelope.getResponse()會產生java.lang.ClassCastException: org.ksoap2. serialization.SoapPrimitive這樣的錯誤。 使用SoapObject result = (SoapObject)envelope.bodyIn和 Object object = envelope.getResponse();就可以解決這種錯誤。 如果服務器返回值的類型是byte[] 的時候, 使用Object object = envelope.getResponse();和SoapObject result = (SoapObject)envelope.bodyIn; 都不會發生錯誤現象,但是在使用Object object = envelope.getResponse(); 取回來的值在使用base64進行解碼和編碼的時候會報出錯誤。如果使用SoapObject result = (SoapObject)envelope.bodyIn; 就可以完整的將byte[]進行解碼和編碼,byte[] ops = Base64.decode(result.getProperty(0).toString()); SoapObject result=(SoapObject) envelope.bodyIn; String str=result.getProperty(0).toString(); 或者是 Object result= (Object) reqVo.envelope.getResponse(); String str=result.toString(); 9.解析字符串str獲取客戶端想要的信息
