webservice總結

原文:http://jnshilang.iteye.com/blog/1628218

調用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獲取客戶端想要的信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章