亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android通過ksoap2傳遞復雜數據類型及CXF發布的webservice詳細介紹

發布時間:2020-09-13 08:34:38 來源:腳本之家 閱讀:152 作者:lqh 欄目:移動開發

 Android通過ksoap2傳遞復雜數據類型及CXF發布的webservice詳細介紹

最近在學校搞點東西,搞了2天的webservice,心累呀,今天中午和小伙伴終于弄通了,感覺就是一些細節問題沒有注意到,啊,我的時間呀,進這么過去了,為了不讓小伙伴們走彎路,我還是認真的把開發文檔寫一遍吧!

首先,如果我們要用CXF發布webservice用自定義類型的對象來當參數傳遞的話,我們應該先把這個類序列化一遍,下面就是我測試的代碼,我創建了一個TGrade類,實現了KvmSerializable接口,這個接口里面的三個方法,這個接口的好處在于不需要服務端在去反序列化實體對象了,

public class TGrade implements KvmSerializable { 
 
  // Fields 
 
  private Integer GId; 
  private Integer GMax; 
  private Integer GMin; 
  private String GName; 
  private String GPic; 
  private String GType; 
   
  // Constructors 
  /** default constructor */ 
  public TGrade() { 
  } 
 
  /** minimal constructor */ 
  public TGrade(Integer GMax) { 
    this.GMax = GMax; 
  } 
 
  /** full constructor */ 
  public TGrade(Integer GMax, Integer GMin, String GName, String GPic, 
      String GType) { 
    this.GMax = GMax; 
    this.GMin = GMin; 
    this.GName = GName; 
    this.GPic = GPic; 
    this.GType = GType; 
  } 
 
  // Property accessors 
  public Integer getGId() { 
    return this.GId; 
  } 
 
  public void setGId(Integer GId) { 
    this.GId = GId; 
  } 
 
  public Integer getGMax() { 
    return this.GMax; 
  } 
 
  public void setGMax(Integer GMax) { 
    this.GMax = GMax; 
  } 
 
  public Integer getGMin() { 
    return this.GMin; 
  } 
 
  public void setGMin(Integer GMin) { 
    this.GMin = GMin; 
  } 
 
  public String getGName() { 
    return this.GName; 
  } 
 
  public void setGName(String GName) { 
    this.GName = GName; 
  } 
 
  public String getGPic() { 
    return this.GPic; 
  } 
 
  public void setGPic(String GPic) { 
    this.GPic = GPic; 
  } 
 
  public String getGType() { 
    return this.GType; 
  } 
 
  public void setGType(String GType) { 
    this.GType = GType; 
  } 
 
  @Override 
  public Object getProperty(int arg0) { 
    switch (arg0) {  
    case 0:  
      return GId;  
    case 1:  
      return GMax;  
    case 2:  
      return GMin;  
    case 3:  
      return GName;  
    case 4:  
      return GPic; 
    case 5:  
      return GType;  
    default:  
      break;  
    }  
    return null;  
  } 
 
  @Override 
  public int getPropertyCount() { 
    // TODO Auto-generated method stub 
    return 6;//y要注意這里,必須等于參數的個數,不然服務端沒有辦法接受有些參數 
  } 
 
  @Override 
  public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) { 
    switch (arg0) { 
    case 0:  
      arg2.type = PropertyInfo.STRING_CLASS;  
      arg2.name = "GId";  
      break;  
    case 1:  
      arg2.type = PropertyInfo.STRING_CLASS;  
      arg2.name = "GMax";  
      break;  
    case 2:  
      arg2.type = PropertyInfo.STRING_CLASS;  
      arg2.name = "GMin";  
      break;  
    case 3:  
      arg2.type = PropertyInfo.STRING_CLASS;  
      arg2.name = "GName";  
      break;  
    case 4:  
      arg2.type = PropertyInfo.STRING_CLASS;  
      arg2.name = "GPic";  
      break;  
    case 5:  
      arg2.type = PropertyInfo.STRING_CLASS;  
      arg2.name = "GType";  
      break;  
    default:  
      break;  
    }     
  } 
 
  @Override 
  public void setProperty(int arg0, Object arg1) { 
    switch (arg0) { 
    case 0: 
      GId=Integer.parseInt(arg1.toString()); 
      break; 
    case 1: 
      GMax=Integer.parseInt(arg1.toString()); 
 
      break; 
    case 2: 
      GMin=Integer.parseInt(arg1.toString()); 
 
      break; 
    case 3: 
      GName=arg1.toString(); 
 
      break; 
    case 4: 
      GPic=arg1.toString(); 
 
      break; 
    case 5: 
 
      GType=arg1.toString(); 
      break; 
 
    default: 
      break; 
    } 
  } 
 
 
 
} 
 
//-----------------------------下面是我測試部分的代碼,這部分代碼很重要,需要認真的看,我也寫的比較詳細,代碼的世界模糊不得 
 
public boolean addMaintenanceInfo() { 
    String methodName = "addGrade";//服務端的方法 
    String soapAction =“http://10.127.80.67/gbckf/Android/GradeService”+methodName; 
     
    TGrade person = new TGrade(); 
    person.setProperty(0, "6"); 
    person.setProperty(1, 1); 
    person.setProperty(3, "1"); 
    person.setProperty(4, "1"); 
    person.setProperty(5, "1"); 
    // 建立webservice連接對象 
    HttpTransportSE transport = new HttpTransportSE(AgbcApi.GRADESERVICEURL,5000);//5秒超時 
    transport.debug = true;// 是否是調試模式 
    // 設置連接參數 
    SoapObject soapObject = new SoapObject(AgbcApi.NAMESPACE, methodName); 
    PropertyInfo objekt = new PropertyInfo(); 
    objekt.setName("arg0");//這個arg0很重要,不能是其他的東西,只能是arg0,不要問我為何,不然你就永遠接受不了參數,因為是xml文檔類型的東西 
    objekt.setValue(person); 
    objekt.setType(TGrade.class); 
    soapObject.addProperty(objekt); 
    // 設置返回參數 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// soap協議版本必須用SoapEnvelope.VER11(Soap 
    envelope.dotNet = false;// 注意:這個屬性是對dotnetwebservice協議的支持,如果dotnet的webservice 
    envelope.bodyOut = transport; 
    Log.i("請求參數", soapObject.toString()); 
    envelope.setOutputSoapObject(soapObject);// 設置請求參數 
      envelope.addMapping(AgbcApi.NAMESPACE, "addGrade", TGrade.class);// 傳對象時必須,參數namespace是webservice中指定的, 
      (new MarshalBase64()).register(envelope); 
      try { 
      transport.call(soapAction, envelope); 
      if(envelope.bodyIn instanceof SoapFault){ 
        String str = ((SoapFault) envelope.bodyIn).faultstring; 
        Log.i("空節點返回的東西", str); 
      }else { 
        // SoapObject sb = (SoapObject)envelope.bodyIn;//服務器返回的對象存在envelope的bodyIn中 
        Object obj = envelope.getResponse();// 直接將返回值強制轉換為已知對象 
        //Log.d("WebService", "返回結果:" + obj.toString()); 
      } 
    } 
    catch (IOException e) { 
      e.printStackTrace(); 
    } 
    catch (XmlPullParserException e) { 
      e.printStackTrace(); 
    } 
    catch (Exception ex) { 
      ex.printStackTrace(); 
    } 
 
    return true; 

上面是我親手寫的代碼,若是沒有明白小伙伴,給我留言我給你看看吧,注意請求網絡不能放在主線程哦,不然要報錯的

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

攀枝花市| 遂溪县| 修文县| 武陟县| 双桥区| 称多县| 泰兴市| 宁乡县| 武冈市| 阿巴嘎旗| 白水县| 洛阳市| 藁城市| 石门县| 金川县| 原阳县| 定西市| 吴桥县| 拉萨市| 玛纳斯县| 东城区| 甘孜县| 卢氏县| 盐边县| 剑阁县| 达拉特旗| 宁德市| 仙桃市| 新密市| 夏津县| 仙居县| 丹江口市| 新乡市| 绥滨县| 高雄市| 阿勒泰市| 祁阳县| 阜城县| 大足县| 土默特右旗| 洛浦县|