国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

Axis 1.1 for Java進行Web Services開發

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

  用Axis 1.1 for java進行Web Services開發
  
  下面的所有幾乎來自Axis1.1的文檔。但不完全來自文檔,本人做了部分修改,這些修改完全出自國內讀者的需要。
  
  什么是SOAP?
  
  SOAP是一個基于xml的用于應用程序之間通信數據編碼的傳輸協議。最初由微軟和Userland Software提出,隨著不斷地完善和改進,SOAP很快被業界廣泛應用,目前完全發布版本是1.1。在其發展過程中,W3C XML標準工作小組積極促成SOAP成為一個真正的開放標準。在寫作此文檔之時,SOAP1.2草案已經發布,1.2對1.1中相對混亂的部分做了改進。
  
  SOAP被廣泛作為新一代跨平臺、跨語言分布計算Web Services的重要部分。
  
  這里太膚淺的說明,請參閱我的整理《一步一步學習SOAP》。
  
  什么是Axis?
  
  Axis本質上就是一個SOAP引擎,提供創建服務器端、客戶端和網關SOAP操作的基本框架。Axis目前版本是為Java編寫的,不過為C++的版本正在開發中。
  
  但Axis并不完全是一個SOAP引擎,它還包括:
  
  是一個獨立的SOAP服務器。
  
  是一個嵌入Servlet引擎(例如Tomcat)的服務器。
  
  支持WSDL。
  
  提供轉化WSDL為Java類的工具。
  
  提供例子程序。
  
  提供TCP/ip數據包監視工具。
  
  Axis是第三代Apache SOAP,從2000年起,SOAP v2開發小組開始討論如何讓Axis更加靈活、可配置,以及能夠處理SOAP和來自W3C的各種XML標準。通過不斷地討論和代碼編寫,Axis目前取得了如下成果:
  
  速度提高。 Axis通過基于事件的SAX對XML文檔進行處理,從而在速度和效率上比Apache SOAP有所提高。
  
  靈活性提高。
  
  穩定性提高。
  
  提供面向組件的部署。
  
  提供一個簡潔的傳輸抽象框架。其核心引擎完全于傳輸方式獨立。從而使基于何種協議傳輸的選擇更加靈活。
  
  支持WSDL。包括到處WSDL和客戶代理生成等。
  
  在目前發行1.1版本中有什么東西?
  
  SOAP1.1/1.2引擎。
  
  靈活的配置和部署系統。
  
  支持及時自動生成SOAP服務(JWS)。
  
  支持所有的基本數據類型,為自定義串行操作提供類型映射系統。
  
  JavaBean的自動串行操作,包括將自定義屬性類型映射到XML的屬性和元素。
  
  RPC和基于消息的SOAP服務提供者。
  
  從部署好的服務自動生成WSDL。
  
  WSDL2Java工具可以從WSDL描述文件中產生相應的客戶和服務器端SOAP操作框架。
  
  初步提供安全擴展,能夠與Servlet2.2安全集成。
  
  通過HTTP Cookie和與傳輸無關的SOAP頭信息提供會話跟蹤。
  
  初步支持帶附件的SOAP消息。
  
  在EJB方面提供把EJB作為Web服務的訪問途經。
  
  基于Servlet的HTTP傳輸。
  
  基于JMS的傳輸。
  
  獨立的服務器(但需要HTTP 服務器和Servlet容器支持)。
  
  提供客戶端、服務器端相關應用程序的樣例。
  
  Axis的運行需要如下組件包
  
  axis.jar
  
  jaxrpc.jar
  
  saaj.jar
  
  commons-logging.jar
  
  commons-discovery.jar
  
  wsdl4j.jar
  
  符合JAXP-1.1的XML處理器。
  
  一步一步開始用Axis進行Web Services操作
  
  下面給出一段簡單的調用Web Services方法的客戶端代碼(由于原文檔中直接用導入包的方式初學者不易了解那個類在那個包中,所以下面我做了一些簡單的修改,希望能給學習者清楚的思路):
  
  public class TestClient {
  
  public static void main(String[] args) {
  
  try{
  
  String endpoint="http://localhost:8080/axis/SayHello.jws?wsdl";// 調用的web服務的url地址,這里是一個http請求,希望得到的結果是wsdl文檔。
  
  org.apache.axis.client.Service service=new org.apache.axis.client.Service();//建立請求服務框架實例。
  
  /*
  
  * org.apache.axis.client.Service實現JAX-RPC's javax.xml.rpc.Services接口
  
  * 該接口充當產生下面提到的org.apache.axis.client.Call實例
  
  * 的角色。
  
  */
  
  org.apache.axis.client.Call call=(org.apache.axis.client.Call)service.createCall();//從框架中生成一個維護調用的實例。
  
  /*
  
  * org.apache.axis.client.Call實現了JAX-RPC's javax.xml.rpc.Call接口。
  
  */
  
  call.setTargetEndpointAddress(new java.net.URL(endpoint));
  
  call.setOperationName(new javax.xml.namespace.QName("http://www.edu-edu.com.cn/luopc/ws","echoString"));//設置需要調用的函數名稱
  
  String result=(String)call.invoke(new Object[]{"hello!"});
  
  System.out.PRintln(result);
  
  }catch(Exception e){
  
  System.err.println(e.toString());
  
  }
  
  }
  
  }
  
  上面的代碼可能和原文檔中不同,并且在名稱空間、函數多態上會給用戶造成糊涂。不過別急,我在翻譯手冊的同時會加入很多解釋的代碼,假如哪位純粹看不懂可以通過郵件獲取幫助:luopc@edu-edu.com.cn ,郵件主題必須是我提供的文檔名稱。
  
  通過上面的調用代碼,最終生成向服務器請求SOAP信息包,具體XML內容如下:
  
  <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <ns1:echoString xmlns:ns1="http://www.edu-edu.com.cn/luopc/ws">  <arg0 xsi:type="xsd:string">Hello!</arg0> </ns1:echoString> </SOAP-ENV:Body></SOAP-ENV:Envelope>
  
  這里我不再多少,細心的朋友請從代碼中找相應的對應信息來進行自己的邏輯理解。至于SOAP協議在我以后的翻譯文檔中會加入進去。
  
  從上面的代碼中我們在調用的時候輸入了參數new Object[]{“hello!”}。然后從生成的SOAP請求包中可以看到自動序列化成<arg0 xsi:type="xsd:string">Hello!</arg0>。你可以看到參數名稱為arg0,類型為xsd:string。其實在Axis客戶端我們可以直接通過具體的方法來設置每一個參數名稱、類型以及返回值類型。如下代碼:
  
  call.addParameter("testParam",  org.apache.axis.Constants.XSD_STRING,  javax.xml.rpc.ParameterMode.IN);call.setReturnType(org.apache.axis.Constants.XSD_STRING);
  
  加入上面的代碼之后生成如下的SOAP信息:
  
  <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <ns1:echoString xmlns:ns1="http://www.edu-edu.com.cn/luopc/ws">  <testParam xsi:type="xsd:string">Hello!</testParam> </ns1:echoString> </SOAP-ENV:Body></SOAP-ENV:Envelope>
  
  可以作簡單的對比。
  
  也許你會迷惑設置參數名稱和不設置參數名稱有什么區別的疑問。這里作簡單的解釋:
  
  1. 為什么要call.setReturnType(org.apache.axis.Constants.XSD_STRING)?
  
  上面你可以調用或者可以不調用,但當返回結果中沒有標明數據類型時Axis就不知道如何進行數據類型轉換。當然假如返回類型你很清楚并且返回應答SOAP的結果中表明了相應的數據類型你便可以不進行上面的函數調用。
  
  2. 為什么要設置參數名稱和類型?
  
  好了,下在你知道了如何調用Web Services了,下面告訴你如何寫作和發布Web Services。
  
  通過Axis發布Web Services
  
  這里寫作一個簡單的類,然后一步一步進行發布。希望用戶能夠從中理出一些思路來。我在其他的關于Web Services的文章中會專門針對Web Services的通用發布方法。雖然Web Services牽涉到很多復雜的知識,但請大家不要感覺到這些操作簡單,也許你已經有很多疑問,沒關系,記下你的疑問,不斷的投試。
  
  public class SayHello {  public String echoString(String hello){    return hello;  }}
  
  哈哈,這個類是不是太簡單了。
  
  一步一步來。
  
  Axis提供兩種將Java類發布成Web Services的途徑,即即時快速自動發布和通過配置文件進行發布。我們首先從最輕易部署的入手。
  
  JWS----即時部署
  
  簡單說就是將自己寫的Java類源文件按一定的規則Copy到特定的目錄下便可自行被Axis部署。具體步驟如下:
  
  將上面寫的SayHello.java復制到axis目錄下。
  
  改名為SayHello.jws。
  
  注重:在你寫的類中不能有具體包的信息,因為這正是Axis即時部署不支持的。
  
  運行我們前面寫的客戶端進行測試,運行結果是hello!。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 溧阳市| 宿松县| 新闻| 七台河市| 宝山区| 郓城县| 深泽县| 宝兴县| 彰化市| 石楼县| 昭平县| 乾安县| 文昌市| 林周县| 清水县| 兰考县| 板桥市| 临汾市| 黑河市| 五峰| 平顺县| 张家港市| 景德镇市| 平和县| 永年县| 水富县| 英德市| 确山县| 怀集县| 商洛市| 武川县| 霸州市| 安庆市| 保靖县| 达州市| 万年县| 米脂县| 波密县| 福建省| 永宁县| 祁门县|