冰楓論壇

 找回密碼
 立即註冊
查看: 387|回覆: 0

[心得] (分享)Android(Ksoap2)調用Service(可傳遞自訂物件)

[複製鏈接]

220

主題

1

好友

579

積分

高級贊助會員

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

UID
173947
帖子
264
主題
220
精華
0
積分
579
楓幣
2610
威望
198
存款
20
贊助金額
1500
推廣
0
GP
194
閱讀權限
150
性別
保密
在線時間
113 小時
註冊時間
2017-1-1
最後登入
2018-10-13

高級客戶 論壇支持王 貢獻王 VIP會員

發表於 2017-3-5 09:11:18 |顯示全部樓層
本帖最後由 KinKALaw 於 2017-3-5 10:56 編輯

1.參數準備

0235.jpg


URL : 伺服器ws地址,要去掉?wsdl,並且儘量用功能變數名稱不要用IP
NAMESPACE : wstargetNamespace="http://impl.webservice.cbst.ffcs.com/"
METHOD_NAME : 需要調用的方法,該例中調用遠端usersCertificate方法

2.代碼部分
  1. HttpTransportSE transport = new HttpTransportSE(URL);
  2. SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);

  3. //需要發送的物件需要做序列化
  4. //創建使用者認證物件
  5. UserCertificate uc = new UserCertificate();
  6. uc.setParamType(Constant.USERCERTIFICATE_USERACCOUNT);
  7. uc.setParamValue(user);
  8. md5 md = new md5();
  9. String md5Pwd = md.md5s(pwd);
  10. uc.setPassword(md5Pwd);
  11. uc.setQueryParams("userAccount,userArea,userName,mobileTelephone,carNumber,email,besttoneCard,idCard,isCertificate,PROPERTY|address");

  12. //通過getDemoWsRequest()方法獲得WsRequest物件
  13. WSRequest ws = getDemoWSRequest();
  14. //設置param
  15. ws.getParam().setUserCertificate(uc);
  16. //設置TransactionName,一般為方法名
  17. ws.setTransactionName(METHOD_NAME);

  18. //將ws放入pi對象
  19. PropertyInfo pi = new PropertyInfo();
  20. //name為伺服器端需要調用的方法參數名稱
  21. pi.setName("request");
  22. pi.setValue(ws);
  23. pi.setType(ws.getClass());
  24. soapObject.addProperty(pi);

  25. //做類型映射
  26. //發送時對象不指定類型,envelope.implicitTypes = true;
  27. envelope.addMapping(NAMESPACE, "WsRequest", ws.getClass());
  28. envelope.addMapping(NAMESPACE, "Param", Param.class);
  29. envelope.addMapping(NAMESPACE, "UserCertificate", UserCertificate.class);
  30. //指定xml版本,以及request中body
  31. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
  32.                                         SoapEnvelope.VER10);
  33. envelope.bodyOut = transport;
  34. envelope.setOutputSoapObject(soapObject);

  35. //發送request
  36. transport.call(null, envelope);

  37. SoapObject sb = (SoapObject) envelope.bodyIn;
  38. Object response = envelope.getResponse();
複製代碼
3.序列化需要傳送的物件
注:需要產生實體的物件要實現KvmSerializable介面,並且實現該幾口方法
  1. public class WSRequest implements KvmSerializable {
  2.         private String transactionName;
  3.         private Header header;
  4.         private IdentityInfo identityInfo;
  5.         private ScrollingInfo scrollingInfo;
  6.         private Param param;

  7.         public Header getHeader() {
  8.                 return header;
  9.         }

  10.         public void setHeader(Header header) {
  11.                 this.header = header;
  12.         }

  13.         public IdentityInfo getIdentityInfo() {
  14.                 return identityInfo;
  15.         }

  16.         public void setIdentityInfo(IdentityInfo identityInfo) {
  17.                 this.identityInfo = identityInfo;
  18.         }

  19.         public Param getParam() {
  20.                 return param;
  21.         }

  22.         public void setParam(Param param) {
  23.                 this.param = param;
  24.         }

  25.         public ScrollingInfo getScrollingInfo() {
  26.                 return scrollingInfo;
  27.         }

  28.         public void setScrollingInfo(ScrollingInfo scrollingInfo) {
  29.                 this.scrollingInfo = scrollingInfo;
  30.         }

  31.         public String getTransactionName() {
  32.                 return transactionName;
  33.         }

  34.         public void setTransactionName(String transactionName) {
  35.                 this.transactionName = transactionName;
  36.         }

  37.         @Override
  38.         public Object getProperty(int arg0) {
  39.                 switch (arg0) {
  40.                 case 0:
  41.                         return transactionName;
  42.                 case 1:
  43.                         return header;
  44.                 case 2:
  45.                         return identityInfo;
  46.                 case 3:
  47.                         return scrollingInfo;
  48.                 case 4:
  49.                         return param;
  50.                 }
  51.                 return null;
  52.         }

  53.         @Override
  54.         public int getPropertyCount() {
  55.                 // TODO Auto-generated method stub
  56.                 return 5;
  57.         }

  58.         @Override
  59.         public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
  60.                 switch (arg0) {
  61.                 case 0:
  62.                         arg2.type = PropertyInfo.STRING_CLASS;
  63.                         arg2.name = "transactionName";
  64.                         break;
  65.                 case 1:
  66.                         arg2.type = header.getClass();
  67.                         arg2.name = "header";
  68.                         break;
  69.                 case 2:
  70.                         arg2.type = identityInfo.getClass();
  71.                         arg2.name = "identityInfo";
  72.                         break;
  73.                 case 3:
  74.                         arg2.type = scrollingInfo.getClass();
  75.                         arg2.name = "ScrollingInfo";
  76.                         break;
  77.                 case 4:
  78.                         arg2.type = param.getClass();
  79.                         arg2.name = "param";
  80.                         break;
  81.                 default:
  82.                         break;
  83.                 }
  84.         }

  85.         @Override
  86.         public void setProperty(int arg0, Object arg1) {
  87.                 switch (arg0) {
  88.                 case 0:
  89.                         transactionName = arg1.toString();
  90.                         break;
  91.                 case 1:
  92.                         header = (Header) arg1;
  93.                         break;
  94.                 case 2:
  95.                         identityInfo = (IdentityInfo) arg1;
  96.                         break;
  97.                 case 3:
  98.                         scrollingInfo = (ScrollingInfo) arg1;
  99.                         break;
  100.                 case 4:
  101.                         param = (Param) arg1;
  102.                         break;
  103.                 default:
  104.                         break;
  105.                 }
  106.         }
  107. }
複製代碼

[發帖際遇]: KinKALaw 於2011年購買2498股票100張被套牢,今年度發放現金股利每股 1 楓幣. 幸運榜 / 衰神榜
您需要登入後才可以回帖 登入 | 立即註冊

正在連接伺服器...
打開冰楓聊天室
廣告刊登意見回饋關於我們職位招聘

Copyright © 2011-2019 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|意見反饋|手機版|Archiver|冰楓論壇

GMT+8, 2019-10-23 11:02

APP Store下載 Play Store下載
回頂部