亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Web Service實現包--AXIS2學習筆記二

2019-11-18 12:51:16
字體:
來源:轉載
供稿:網友

  客戶端的調用
  
  Web services提供的服務多種多樣,有的可以馬上獲得結果,有的要消耗很長的時間。所以,假如我們需要多種調用方式來對付不同的情況。
  
  大多數的Web services都提供阻塞(Blocking)和非阻塞(Non-Blocking)兩種APIs. 這兩個概念以前應該學過,簡單說一下。
  
  Blocking API - 調用端要等被調用的函數運行完畢才繼續往下走。
  
  Non-Bloking API - 調用端運行完調用函數以后就直接往下走了,調用端和被調用端是異步執行的。返回值是用回調函數來實現的。
  
  這種異步叫做API層異步(API Level Asynchrony)。他們只用到一個連接來發送和接收消息,而且,假如是那種需要運行很長時間的函數,還會碰到Time Out 錯誤,假如用兩個連接分別處理發送和接收消息,調用的時間就可以縮短,也可以解決Time Out 問題。用兩個連接來分別處理發送和接收消息,叫做傳輸層異步(Transport Level Asynchrony)。
  
 Web Service實現包--AXIS2學習筆記二

  理論真無聊,還是來看實例吧。
  
  打開 Eclipse, 創建一個新PRoject, 新建一個叫userguide.clients的包, 把"samples/userguide/src/userguide/clients" 下面的文件都copy到那個包下面, 把AXIS2的lib下面的jar都加到ilbrary里面去(應該不用全加,懶一點就全加了吧.) 發現了關于echo的調用的方式, 居然有五個:
  
  EchoBlockingClient
  EchoBlockingDualClient
  EchoBlockingWsaBasedClient
  EchoNonBlockingClient
  EchoNonBlockingDualClient
  
  一個一個看吧.
  
  EchoBlockingClient.java
  public class EchoBlockingClient {
  private static EndpointReference targetEPR = new EndpointReference("http://localhost:8080/axis2/services/MyService");
  
  public static void main(String[] args) {
  try {
  OMElement payload = ClientUtil.getEchoOMElement();
  Call call = new Call();
  call.setTo(targetEPR);
  call.setTransportInfo(Constants.TRANSPORT_HTTP,
  Constants.TRANSPORT_HTTP,
  false);
  
  //Blocking invocation
  OMElement result = call.invokeBlocking("echo",
  payload);
  
  StringWriter writer = new StringWriter();
  result.serializeWithCache(xmlOutputFactory.newInstance()
  .createXMLStreamWriter(writer));
  writer.flush();
  
  System.out.println(writer.toString());
  
  } catch (AxisFault axisFault) {
  axisFault.printStackTrace();
  } catch (XMLStreamException e) {
  e.printStackTrace();
  }
  }
  }
  
  和一代幾乎一樣, 弄一個EndpointReference, 再弄一個call, 其他不一樣,但是也很簡單, 弄一個OMElement作為參數, 返回也是一個OMElement. 可惜運行居然有錯.
  
  再來看雙通道的版本
  
  EchoBlockingDualClient.java
  public class EchoBlockingDualClient {
  private static EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8080/axis2/services/MyService");
  
  public static void main(String[] args) {
  try {
  OMElement payload = ClientUtil.getEchoOMElement();
  
  Call call = new Call();
  call.setTo(targetEPR);
  
  call.engageModule(new QName(Constants.MODULE_ADDRESSING));
  call.setTransportInfo(Constants.TRANSPORT_HTTP,
  Constants.TRANSPORT_HTTP,
  true);
  
  //Blocking Invocation
  OMElement result = call.invokeBlocking("echo",
  payload);
  
  StringWriter writer = new StringWriter();
  result.serializeWithCache(XMLOutputFactory.newInstance()
  .createXMLStreamWriter(writer));
  writer.flush();
  System.out.println(writer.toString());
  
  
  //Need to close the Client Side Listener.
  call.close();
  
  } catch (AxisFault axisFault) {
  axisFault.printStackTrace();
  } catch (Exception ex) {
  ex.printStackTrace();
  }
  
  }
  }
  
  加了一句engageModule, 這句話似乎沒什么用,我刪掉這句話也能運行的, 然后setTransportInfo最后一個參數改成了true. 關于setTransportInfo的三個參數, 第一個是發送的Transport, 第二個是接收的Transport, 第三個是"是否雙通道", 支持的搭配形式如下:
  
  http, http, true
  http, http, false
  http,smtp,true
  smtp,http,true
  smtp,smtp,true
  
  看下一個吧,EchoNonBlockingClient,這個是單通道的非阻塞模式:
  
  public class EchoNonBlockingClient {
  private static EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8080/axis2/services/MyService");
  
  public static void main(String[] args) {
  try {
  OMElement payload = ClientUtil.getEchoOMElement();
  
  Call call = new Call();
  call.setTo(targetEPR);
  call.setTransportInfo(Constants.TRANSPORT_HTTP,
  Constants.TRANSPORT_HTTP,
  false);
  
  //Callback to handle the response
  Callback callback = new Callback() {
  public void onComplete(AsyncResult result) {
  try {
  StringWriter writer = new StringWriter();
  result.getResponseEnvelope().serializeWithCache(XMLOutputFactory.newInstance()
  .createXMLStreamWriter(writer));
  writer.flush();
  System.out.println(writer.toString());
  
  
  } catch (XMLStreamException e) {
  reportError(e);
  }
  }
  
  public void reportError(Exception e) {
  e.printStackTrace();
  }
  };
  
  //Non-Blocking Invocation
  call.invokeNonBlocking("echo", payload, callback);
  
  //Wait till the callback receives the response.
  while (!callback.isComplete()) {
  Thread.sleep(1000);
  }
  
  } catch (AxisFault axisFault) {
  axisFault.printStackTrace();
  } catch (Exception ex) {
  ex.printStackTrace();
  }
  
  }
  }
  
  不同的地方,只是調用的方法從invokeBlocking變成了invokeNonBlocking,然后寫了一個簡單的匿名Callback類作為回調函數。關于這個Callback類,它是一個抽象類,其中有兩個方法:onComplete和reportError,都是client端必須實現的,他還有一個Field,就是complete,可以用來設置和查詢調用是否完成??上б膊荒苓\行,和上面的錯誤一樣,是在createSOAPMessage的時候報null錯誤。
  
  看下一個EchoNonBlockingDualClient,非阻塞的雙通道:
  
  public class EchoNonBlockingDualClient {
  private static EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8080/axis2/services/MyService");
  
  public static void main(String[] args) {
  try {
  OMElement payload = ClientUtil.getEchoOMElement();
  
  Call call = new Call();
  call.setTo(targetEPR);
  
  //The boolean flag informs the axis2 engine to use two separate transport connection
  //to retrieve the response.
  call.engageModule(new QName(Constants.MODULE_ADDRESSING));
  call.setTransportInfo(Constants.TRANSPORT_HTTP,
  Constants.TRANSPORT_HTTP,
  true);
  
  //Callback to handle the response
  Callback callback = new Callback() {
  public void onComplete(AsyncResult result) {
  try {
  StringWriter writer = new StringWriter();
  result.getResponseEnvelope().serializeWithCache(XMLOutputFactory.newInstance()
  .createXMLStreamWriter(writer));
  writer.flush();
  System.out.println(writer.toString());
  
  
  } catch (XMLStreamException e) {
  reportError(e);
  }
  }
  
  public void reportError(Exception e) {
  e.printStackTrace();
  }
  };
  
  //Non-Blocking Invocation
  call.invokeNonBlocking("echo", payload, callback);
  
  //Wait till the callback receives the response.
  while (!callback.isComplete()) {
  Thread.sleep(1000);
  }
  //Need to close the Client Side Listener.
  call.close();
  
  } catch (AxisFault axisFault) {
  axisFault.printStackTrace();
  } catch (Exception ex) {
  ex.printStackTrace();
  }
  
  }
  }
  雙通道和單通道基本沒什么不同,只是雙通道的時候,它總是要

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91极品视频在线| 久久久久国产视频| 欧美伊久线香蕉线新在线| 精品二区三区线观看| 亚洲成色777777在线观看影院| 亚洲精品色婷婷福利天堂| 欧美大片免费看| 亚洲毛片一区二区| 在线播放亚洲激情| 日韩电影免费在线观看| 日韩毛片中文字幕| 欧美一区二区三区免费观看| 亚洲精品www久久久| 午夜免费在线观看精品视频| 成人午夜一级二级三级| 国产精品wwww| 亚洲成av人片在线观看香蕉| 亚洲一区二区久久久久久| 欧美中文字幕在线| 国产不卡一区二区在线播放| 大胆欧美人体视频| 午夜精品久久17c| 亚洲白拍色综合图区| 欧美日韩综合视频网址| 欧美日韩亚洲一区二| 成人免费福利在线| 欧美成人精品不卡视频在线观看| 精品国产一区av| 日韩av免费在线播放| 亚洲专区在线视频| 国产精品女人久久久久久| 欧美一级大片视频| 狠狠色狠狠色综合日日小说| 欧美日本国产在线| 欧美日韩国产二区| 国产精品久久久久7777婷婷| 97超级碰在线看视频免费在线看| 一区二区三区日韩在线| 91理论片午午论夜理片久久| 中文字幕在线日韩| 91精品视频在线播放| 国产精品色视频| 亚洲自拍高清视频网站| 国产精自产拍久久久久久| 欧美整片在线观看| 丝袜亚洲另类欧美重口| 国产精品成人va在线观看| 91av在线免费观看视频| 色诱女教师一区二区三区| 精品亚洲一区二区三区四区五区| 亚洲欧美制服第一页| 成人a在线观看| 欧美性感美女h网站在线观看免费| 疯狂欧美牲乱大交777| 国产精品偷伦一区二区| 欧美激情二区三区| 亚洲人成电影网站| 在线观看91久久久久久| 亚洲天堂男人的天堂| 欧美极度另类性三渗透| 国产亚洲成精品久久| 日韩最新av在线| 欧美午夜影院在线视频| 久久影院模特热| 久久成人av网站| 亚洲午夜未删减在线观看| 亚洲人成亚洲人成在线观看| 美女撒尿一区二区三区| 国产精品美女主播在线观看纯欲| 91日本在线视频| 最近更新的2019中文字幕| 亚洲欧洲日产国码av系列天堂| 亚洲欧美日韩一区二区三区在线| 91久久国产精品| 国产日韩欧美在线观看| 国产自摸综合网| 在线视频欧美日韩精品| 亚洲精品在线看| 亚洲欧美激情一区| 精品亚洲aⅴ在线观看| 久久91亚洲精品中文字幕奶水| 国产欧美日韩免费看aⅴ视频| 亚洲精品91美女久久久久久久| 亚洲精品国产精品自产a区红杏吧| 欧美成人精品在线| 久久久久久久久久久久av| 亚洲人成在线免费观看| 午夜精品久久久久久久久久久久久| 宅男66日本亚洲欧美视频| 亚洲精品91美女久久久久久久| 午夜精品久久久99热福利| 亚洲第一偷拍网| 亚洲欧洲xxxx| 亚洲自拍在线观看| 亚洲一级一级97网| 欧美一区二区三区免费观看| 中文字幕久精品免费视频| 久久久国产精品免费| 九色精品免费永久在线| 91精品在线播放| 美女少妇精品视频| 91av在线免费观看| 国产精品久久久久久亚洲影视| 欧美电影电视剧在线观看| 日韩av免费在线| 亚洲国产精品电影| 欧美国产日产韩国视频| 久久久极品av| 国产精品国产三级国产aⅴ9色| 日韩美女免费视频| 久久综合国产精品台湾中文娱乐网| 日韩免费中文字幕| 亚洲国产精品系列| 久久久天堂国产精品女人| 欧美一级片在线播放| 久久91精品国产91久久跳| 亚洲欧洲偷拍精品| 亚洲在线视频观看| 97成人在线视频| 久久亚洲春色中文字幕| 日韩成人在线观看| 欧洲永久精品大片ww免费漫画| 91在线网站视频| 国产成人精彩在线视频九色| 成人免费福利视频| 91在线视频导航| 最近的2019中文字幕免费一页| 在线观看欧美www| 91免费在线视频网站| 久久精品一本久久99精品| 亚洲欧美三级在线| 欧美日韩国产影院| 欧美视频在线视频| 91av在线不卡| 法国裸体一区二区| 欧美日韩爱爱视频| 日韩av在线精品| 亚洲一区二区三区成人在线视频精品| 亚洲午夜av电影| 久久99久国产精品黄毛片入口| 欧美影院久久久| 亚洲精品福利资源站| 国产精品第一第二| 97色在线视频观看| 97国产精品免费视频| 成人久久一区二区三区| 欧美中文字幕在线视频| 成人有码在线视频| 欧美精品免费在线观看| 国产精品va在线播放| 成人自拍性视频| 欧美精品video| 亚洲美女av在线| 中文字幕av一区二区| 欧美国产视频日韩| 日韩av在线免费看| 国产精品吹潮在线观看| 国产精品自在线| 欧美激情在线有限公司| 亚洲最大福利视频网站| 77777亚洲午夜久久多人| 国产一区二区三区视频免费| 亚洲乱亚洲乱妇无码| 国产999视频|