<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      java ee WebService Axis / Xfire / CXF / JAX-WS / JAX-RPC / Digester

      一月收集幾個有用的谷歌Chrome插件  postman for webservice

      http://www.poluoluo.com/jzxy/201301/194875.html

      Postman – REST Client

       

      Postman是一個工具的幫助開發人員提高工作效率的API,他是一個功能強大的的HTTP REST客戶端,是前端模擬發送數據/調試的好工具。

       

      WebService JAX-RPC / JAX-WS

      Web 服務提示與技巧: JAX-RPC 與 JAX-WS 的比較
      http://www.ibm.com/developerworks/cn/webservices/ws-tip-jaxwsrpc.html
      引言
      Russell Butek (butek@us.ibm.com), IT 專家, EMC
      Nicholas Gallardo (nlgallar@us.ibm.com), 軟件工程師, EMC
      簡介:
      JAX-WS 2.0 是 JAX-RPC 1.1 的后續版本。
      本文將引出對這兩個 Java Web 服務編程模型進行比較的一系列文章。
      Russell Butek 是 IBM 的一名 SOA 和 Web 服務顧問。
      他曾是 IBM WebSphere Web 服務引擎的開發人員之一。
      他也是 JAX-RPC Java Specification Request (JSR) 專家組的成員。
      他參與了 Apache 的 AXIS SOAP 引擎的實現,并推動 AXIS 1.0 遵守 JAX-RPC。

       

       

      Digester

      http://commons.apache.org/digester/

      Digester API 2.0

      http://commons.apache.org/digester/commons-digester-2.0/docs/api/

      Digester Example

      http://www.ibm.com/developerworks/java/library/j-lucene/

      Digester Download

      http://commons.apache.org/digester/download_digester.cgi?Preferred=http%3A%2F%2Flabs.xiaonei.com%2Fapache-mirror

      http://labs.xiaonei.com/apache-mirror/commons/digester/binaries/commons-digester-2.0-bin.tar.gz

      http://labs.xiaonei.com/apache-mirror/commons/digester/binaries/commons-digester-2.0-bin.zip

      http://labs.xiaonei.com/apache-mirror/commons/digester/source/commons-digester-2.0-src.tar.gz

      http://labs.xiaonei.com/apache-mirror/commons/digester/source/commons-digester-2.0-src.zip

       

      Web Service 性能測試工具   soapUI , Jmeter

      http://www.51testing.com/?action_viewnews_itemid_93122.html

      計時機制

      JMeter 用的是System.currentTimeMillis();

      soapUI用的是System.nanoTime();    soapUI-x32-4_0_0.exe

       

      幾種基于HTTP協議的RPC性能比較

      http://jspengxue.iteye.com/blog/48124

       

      WebService是用犧牲性能來換取跨平臺的遠程過程調用或者消息交換的。由于采用了SOAP這樣的標準協議,才可能得到很多支持。如果你繞過SOAP,你的東西就不能稱為WebService的了,但可以算是借鑒了它的實現思想的一種結構。

      比如你完全可以基于底層的協議來實現internet上2個程序之間的交互,但是這個開發量很大的。因為基于SOAP的Webservice已經得到了幾 乎所有的開發工具的支持,所以開發量就小多了,它解決了不同語言的數據結構不同的問題,比如你可以用java寫一個方法,在服務器端發布成一個 Webservice,而另外的人可以用delphi,c#等各種支持標準webservice的語言來調用你用java寫的方法,而不用關心java的 String和delphi的TString在內存里是不同的東西。   
        至于性能,由于不知道你的應用是什么應用,Webservice的性能比直接調用方法肯定要慢,畢竟要把數據組織成XML,但是在目前的硬件性能下,這些已經不是瓶頸了。倒是對帶寬的要求比較高一些。畢竟XML比較大。   

      referrence

      http://www.w3.org/2002/ws/  Web Services Activity

      http://blog.sina.com.cn/s/blog_4d6be6f301000bsz.html

      http://blog.csdn.net/kay5804/archive/2008/05/04/2382428.aspx

      http://hi.baidu.com/lioliang/blog/item/03e134a4887e1ef29152ee6a.html

      http://www.blogjava.net/zhuyuanxiang/archive/2008/03/03/183377.html

       

       

      download axis1.4

      http://apache.mirror.phpchina.com/ws/axis/1_4/

      http://apache.mirror.phpchina.com/ws/axis/1_4/axis-bin-1_4.zip

      http://apache.mirror.phpchina.com/ws/axis/1_4/axis-src-1_4.zip  

      copy

      D:\program\webService\axis\axis-bin-1_4\axis-1_4\webapps\axis

      to

      D:\tomcat5\webapps\axis

      download other jars 

      mail.jar: D:\program\webService\axis\javamail-1.4.1\mail.jar

      http://java.sun.com/products/javamail/downloads/index.html

      http://java.sun.com/products/javabeans/glasgow/jaf.html

      Activation.jar : D:\program\webService\axis\jaf-1.0.2\activation.jar

      http://java.sun.com/products/javabeans/jaf/downloads/index.html

       

      xmlsec.jar: D:\program\webService\axis\xml-security-1_4_2\libs\xmlsec-1.4.2.jar

       

      http://xml.apache.org/security/dist/java-library/  

       

      to

      D:\tomcat5\webapps\axis

      deploy

      http://localhost:8080/axis

      info

      http://localhost/axis/happyaxis.jsp

       

      Needed Components

      • Found SAAJ API ( javax.xml.soap.SOAPMessage ) at D:\tomcat5\webapps\axis\WEB-INF\lib\saaj.jar
      • Found JAX-RPC API ( javax.xml.rpc.Service ) at D:\tomcat5\webapps\axis\WEB-INF\lib\jaxrpc.jar
      • Found Apache-Axis ( org.apache.axis.transport.http.AxisServlet ) at D:\tomcat5\webapps\axis\WEB-INF\lib\axis.jar
      • Found Jakarta-Commons Discovery ( org.apache.commons.discovery.Resource ) at D:\tomcat5\webapps\axis\WEB-INF\lib\commons-discovery-0.2.jar
      • Found Jakarta-Commons Logging ( org.apache.commons.logging.Log ) at D:\tomcat5\bin\commons-logging-api.jar
      • Found Log4j ( org.apache.log4j.Layout ) at D:\tomcat5\webapps\axis\WEB-INF\lib\log4j-1.2.8.jar
      • Found IBM's WSDL4Java ( com.ibm.wsdl.factory.WSDLFactoryImpl ) at D:\tomcat5\webapps\axis\WEB-INF\lib\wsdl4j-1.5.1.jar
      • Found JAXP implementation ( javax.xml.parsers.SAXParserFactory ) at an unknown location
      • Found Activation API ( javax.activation.DataHandler ) at D:\tomcat5\webapps\axis\WEB-INF\lib\activation.jar

      Optional Components

      • Found Mail API ( javax.mail.internet.MimeMessage ) at D:\tomcat5\webapps\axis\WEB-INF\lib\mail.jar
      • Found XML Security API ( org.apache.xml.security.Init ) at D:\tomcat5\webapps\axis\WEB-INF\lib\xmlsec-1.4.2.jar
      • Found Java Secure Socket Extension ( javax.net.ssl.SSLSocketFactory ) at an unknown location

      http://fsun.iteye.com/blog/80180  

      AXIS Service Config Sucess!

       

      AXIS Service test

      將SayHello.java改為SayHello.jws放入D:\tomcat5\webapps\axis\

      //package com.lindows.service;
      
      
      //AxisService 基本數據類型
      
      
      public class SayHello {
      
      
      	// 這個類沒有包,注意了.
      
      
      	public String say(String name) {
      
      
      		return " Hello ~~" + name;
      
      
      	}
      
      
      }
      
      
      

      http://localhost/axis/SayHello.jws  ok

      AXIS Client test

       

      package com.lindows.client;
      import java.rmi.RemoteException;
      import javax.xml.rpc.ServiceException;
      import org.apache.axis.client.Call;
      import org.apache.axis.client.Service;
      
      public class SayHello {
      
      
      
      
      
      	/**
      
      
      	 * @param args
      
      
      	 * @author Lindows
      
      
      	 * 普通數據類型
      
      
      	 */
      
      
      	public static void main(String[] args) {
      
      
      
      		String urlname = "http://localhost/axis/SayHello.jws";
      
      
      		/*
      
      
      		 * 這是wsdl的絕對路徑.也可以直接寫成如下 ,這個沒有區別.
      
      
      		 * http://localhost/axis/SayHello.jws?wsdl
      
      
      		 */
      
      
      		Service s = new Service();
      
      
      		try {
      
      
      			Call call = (Call) s.createCall();
      
      
      			// 調用的目標url
      
      
      			call.setTargetEndpointAddress(urlname);
      
      
      			// 調用的方法名
      
      
      			call.setOperationName("say");
      
      
      			// 設置調用方法參數
      
      
      			String val = (String) call.invoke(new Object[] { "我是 Lindows" });
      
      
      			System.out.println("這里是服務器返回給你的:>>>" + val);
      
      
      		} catch (ServiceException e) {
      
      
      			e.printStackTrace();
      
      
      		} catch (RemoteException e) {
      
      
      			e.printStackTrace();
      
      
      		}
      
      
      	}
      
      
      }
      
      
      

       

      run: 這里是服務器返回給你的:>>> Hello ~~我是 Lindows ok

       


      JavaSE6.0 Web Service學習筆記

      http://cissco.iteye.com/blog/221108

      Web Service概述

      Web Service的定義
      W3C組織對其的定義如下,它是一個軟件系統,為了支持跨網絡的機器間相互操作交互而設計。Web Service服務通常被定義為一組模塊化的API,它們可以通過網絡進行調用,來執行遠程系統的請求服務。

      這 里我們從一個程序員的視角來觀察web service。在傳統的程序編碼中,存在這各種的函數方法調用。通常,我們知道一個程序模塊M中的方法A,向其發出調用請求,并傳入A方法需要的參數 P,方法A執行完畢后,返回處理結果R。這種函數或方法調用通常發生在同一臺機器上的同一程序語言環境下?,F在的我們需要一種能夠在不同計算機間的不同語 言編寫的應用程序系統中,通過網絡通訊實現函數和方法調用的能力,而Web service正是應這種需求而誕生的。

      最普遍的一種說 法就是,Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)協議是web service的主體,它通過HTTP或者SMTP等應用層協議進行通訊,自身使用XML文件來描述程序的函數方法和參數信息,從而完成不同主機的異構系 統間的計算服務處理。這里的WSDL(Web Services Description Language)web 服務描述語言也是一個XML文檔,它通過HTTP向公眾發布,公告客戶端程序關于某個具體的 Web service服務的URL信息、方法的命名,參數,返回值等。
      下面,我們先來熟悉一下SOAP協議,看看它是如何描述程序中的函數方法、參數及結果對象的。

      SOAP協議簡介

      什么是SOAP
      SOAP 指簡單對象訪問協議,它是一種基于XML的消息通訊格式,用于網絡上,不同平臺,不同語言的應用程序間的通訊。可自定義,易于擴展。一條 SOAP 消息就是一個普通的 XML 文檔,包含下列元素:
      ? Envelope 元素,標識XML 文檔一條 SOAP 消息
      ? Header 元素,包含頭部信息的XML標簽
      ? Body 元素,包含所有的調用和響應的主體信息的標簽
      ? Fault 元素,錯誤信息標簽。

      以上的元素都在 SOAP的命名空間http://www.w3.org/2001/12/soap-envelope中聲明;
      SOAP的語法規則
      ? SOAP 消息必須用 XML 來編碼
      ? SOAP 消息必須使用 SOAP Envelope 命名空間
      ? SOAP 消息必須使用 SOAP Encoding 命名空間
      ? SOAP 消息不能包含 DTD 引用
      ? SOAP 消息不能包含 XML 處理指令

      SOAP 消息的基本結構
      Java代碼 復制代碼
      1. <? xml version= "1.0" ?>   
      2. <soap:Envelope   
      3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
      4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
      5. <soap:Header>   
      6.   ...   
      7.   ...   
      8. </soap:Header>   
      9. <soap:Body>   
      10.   ...   
      11.   ...   
      12.   <soap:Fault>   
      13.     ...   
      14.     ...   
      15.   </soap:Fault>   
      16. </soap:Body>   
      17. </soap:Envelope>  
      Java代碼 復制代碼
      1. <? xml version= "1.0" ?>  
      2. <soap:Envelope  
      3. xmlns:soap="http://www.w3.org/2001/12/soap-envelope"   
      4. soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding" >  
      5. <soap:Header>  
      6.   ...  
      7.   ...  
      8. </soap:Header>  
      9. <soap:Body>  
      10.   ...  
      11.   ...  
      12.   <soap:Fault>  
      13.     ...  
      14.     ...  
      15.   </soap:Fault>  
      16. </soap:Body>  
      17. </soap:Envelope>  
      <? xml version="1.0"?>
      
      
      <soap:Envelope
      
      
      xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
      
      
      soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
      
      
      <soap:Header>
      
      
        ...
      
      
        ...
      
      
      </soap:Header>
      
      
      <soap:Body>
      
      
        ...
      
      
        ...
      
      
        <soap:Fault>
      
      
          ...
      
      
          ...
      
      
        </soap:Fault>
      
      
      </soap:Body>
      
      
      </soap:Envelope>


      SOAP Envelope 元素
      Envelope 元素是 SOAP 消息的根元素。它指明 XML 文檔是一個SOAP 消息。它的屬性 xmlns:soap的值必須是http://www.w3.org/2001/12/soap-envelope。
      ? encodingStyle 屬性,語法:soap:encodingStyle="URI"
      encodingStyle 屬性用于定義文檔中使用的數據類型。此屬性可出現在任何 SOAP 元素中,并會被應用到元素的內容及元素的所有子元素上。
      Java代碼 復制代碼
      1. <? xml version= "1.0" ?>   
      2. <soap:Envelope   
      3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
      4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
      5.   ...   
      6.   Message information goes here   
      7.   ...   
      8. </soap:Envelope>  
      Java代碼 復制代碼
      1. <? xml version= "1.0" ?>  
      2. <soap:Envelope  
      3. xmlns:soap="http://www.w3.org/2001/12/soap-envelope"   
      4. soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding" >  
      5.   ...  
      6.   Message information goes here  
      7.   ...  
      8. </soap:Envelope>  
      <? xml version="1.0"?>
      
      
      <soap:Envelope
      
      
      xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
      
      
      soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
      
      
        ...
      
      
        Message information goes here
      
      
        ...
      
      
      </soap:Envelope>


      SOAP Header 元素

      • actor 屬性,語法soap:actor="URI"

      通過沿著消息路徑經過不同的端點,SOAP 消息可從某個發送者傳播到某個接收者。并非 SOAP 消息的所有部分均打算傳送到 SOAP 消息的最終端點,不過,另一個方面,也許打算傳送給消息路徑上的一個或多個端點。SOAP 的 actor 屬性可被用于將 Header 元素尋址到一個特定的端點。

      • mustUnderstand 屬性 ,語法soap:mustUnderstand="0|1"

      SOAP 的 mustUnderstand 屬性可用于標識標題項對于要對其進行處理的接收者來說是強制的還是可選的。假如您向 Header 元素的某個子元素添加了 "mustUnderstand="1",則要求處理此頭部的接收者必須認可此元素。
      Java代碼 復制代碼
      1. <? xml version= "1.0" ?>   
      2. <soap:Envelope   
      3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
      4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
      5. <soap:Header>   
      6. <m:Trans   
      7. xmlns:m= "http://www.jsoso.net/transaction/"     
      8. soap:mustUnderstand= "1"     
      9. soap:actor="http: //www.w3schools.com/appml/ “  >234</m:Trans>   
      10. </soap:Header>   
      11. ...   
      12. ...   
      13. </soap:Envelope>  
      Java代碼 復制代碼
      1. <? xml version= "1.0" ?>  
      2. <soap:Envelope  
      3. xmlns:soap="http://www.w3.org/2001/12/soap-envelope"   
      4. soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding" >  
      5. <soap:Header>  
      6. <m:Trans  
      7. xmlns:m="http://www.jsoso.net/transaction/"    
      8. soap:mustUnderstand="1"    
      9. soap:actor="http://www.w3schools.com/appml/ “  >234</m:Trans>   
      10. </soap:Header>  
      11. ...  
      12. ...  
      13. </soap:Envelope>  
      <? xml version="1.0"?>
      
      
      <soap:Envelope
      
      
      xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
      
      
      soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
      
      
      <soap:Header>
      
      
      <m:Trans
      
      
      xmlns:m="http://www.jsoso.net/transaction/" 
      
      
      soap:mustUnderstand="1" 
      
      
      soap:actor="http://www.w3schools.com/appml/ “  >234</m:Trans>
      
      
      </soap:Header>
      
      
      ...
      
      
      ...
      
      
      </soap:Envelope>


      SOAP Body 元素
      必需的 SOAP Body 元素可包含打算傳送到消息最終端點的實際 SOAP 消息。Body元素中既可以包含SOAP定義的命名空間中的元素,如Fault,也可以是用戶的應用程序自定義的元素。以下是一個用戶定義的請求:
      Java代碼 復制代碼
      1. <? xml version= "1.0" ?>   
      2. <soap:Envelope   
      3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
      4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
      5. <soap:Body>   
      6.    <m:GetPrice xmlns:m= "http://www.jsoso.net/prices" >   
      7.       <m:Item>Apples</m:Item>   
      8.    </m:GetPrice>   
      9. </soap:Body>   
      10. </soap:Envelope>  
      Java代碼 復制代碼
      1. <? xml version= "1.0" ?>  
      2. <soap:Envelope  
      3. xmlns:soap="http://www.w3.org/2001/12/soap-envelope"   
      4. soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding" >  
      5. <soap:Body>  
      6.    <m:GetPrice xmlns:m="http://www.jsoso.net/prices" >  
      7.       <m:Item>Apples</m:Item>  
      8.    </m:GetPrice>  
      9. </soap:Body>  
      10. </soap:Envelope>  
      <? xml version="1.0"?>
      
      
      <soap:Envelope
      
      
      xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
      
      
      soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
      
      
      <soap:Body>
      
      
         <m:GetPrice xmlns:m="http://www.jsoso.net/prices">
      
      
            <m:Item>Apples</m:Item>
      
      
         </m:GetPrice>
      
      
      </soap:Body>
      
      
      </soap:Envelope>

      上面的例子請求蘋果的價格。請注意,上面的 m:GetPrice 和 Item 元素是應用程序專用的元素。它們并不是 SOAP 標準的一部分。而對應的 SOAP 響應應該類似這樣:
      Java代碼 復制代碼
      1. <?xml version= "1.0" ?>   
      2. <soap:Envelope   
      3. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
      4. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
      5. <soap:Body>   
      6.    <m:GetPriceResponse xmlns:m= "http://www.jsoso.net/prices" >   
      7.       <m:Price> 1.90 </m:Price>   
      8.    </m:GetPriceResponse>   
      9. </soap:Body>   
      10. </soap:Envelope>  
      <?xml version="1.0"?>
      
      
      <soap:Envelope
      
      
      xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
      
      
      soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
      
      
      <soap:Body>
      
      
         <m:GetPriceResponse xmlns:m="http://www.jsoso.net/prices">
      
      
            <m:Price>1.90</m:Price>
      
      
         </m:GetPriceResponse>
      
      
      </soap:Body>
      
      
      </soap:Envelope>


      SOAP Fault 元素
      Fault 元素表示 SOAP的錯誤消息。它必須是 Body 元素的子元素,且在一條 SOAP 消息中,Fault 元素只能出現一次。Fault 元素擁有下列子元素:

      常用的SOAP Fault Codes


      HTTP協議中的SOAP 實例
      下面的例子中,一個 GetStockPrice 請求被發送到了服務器。此請求有一個 StockName 參數,而在響應中則會返回一個 Price 參數。此功能的命名空間被定義在此地址中: "http://www.jsoso.net/stock"
      • SOAP 請求:(注意HTTP的Head屬性)

      Java代碼 復制代碼
      1. POST /InStock HTTP/ 1.1   
      2. Host: www.jsoso.net   
      3. Content-Type: application/soap+xml; charset=utf- 8   
      4. Content-Length: XXX   
      5.   
      6. <? xml version= "1.0" ?>   
      7. <soap:Envelope   
      8. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
      9. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
      10.   <soap:Body xmlns:m= "http://www.jsoso.net/stock" >   
      11.     <m:GetStockPrice>   
      12.       <m:StockName>IBM</m:StockName>   
      13.     </m:GetStockPrice>   
      14.   </soap:Body>     
      15. </soap:Envelope>  
      Jav
      POST /InStock HTTP/1.1
      
      
      Host: www.jsoso.net
      
      
      Content-Type: application/soap+xml; charset=utf-8
      
      
      Content-Length: XXX
      
      
      
      
      
      <? xml version="1.0"?>
      
      
      <soap:Envelope
      
      
      xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
      
      
      soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
      
      
        <soap:Body xmlns:m="http://www.jsoso.net/stock">
      
      
          <m:GetStockPrice>
      
      
            <m:StockName>IBM</m:StockName>
      
      
          </m:GetStockPrice>
      
      
        </soap:Body>  
      
      
      </soap:Envelope>
      
      
      


      • SOAP 響應:(注意HTTP的Head屬性)

      Java代碼 復制代碼
      1. HTTP/ 1.1   200  OK   
      2. Content-Type: application/soap+xml; charset=utf- 8   
      3. Content-Length: XXX   
      4.   
      5. <? xml version= "1.0" ?>   
      6. <soap:Envelope   
      7. xmlns:soap= "http://www.w3.org/2001/12/soap-envelope"   
      8. soap:encodingStyle= "http://www.w3.org/2001/12/soap-encoding" >   
      9.   <soap:Body xmlns:m= "http://www.jsoso.net/stock" >   
      10.     <m:GetStockPriceResponse>   
      11.       <m:Price> 34.5 </m:Price>   
      12.     </m:GetStockPriceResponse>   
      13.   </soap:Body>     
      14. </soap:Envelope>  
      HTTP/1.1 200 OK
      
      
      Content-Type: application/soap+xml; charset=utf-8
      
      
      Content-Length: XXX
      
      <? xml version="1.0"?>
      
      <soap:Envelope
      
      xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
      
      soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
      
        <soap:Body xmlns:m="http://www.jsoso.net/stock">
      
          <m:GetStockPriceResponse>
      
            <m:Price>34.5</m:Price>
      
          </m:GetStockPriceResponse>
      
        </soap:Body>  
      
      </soap:Envelope>


      HTTP協議中的SOAP RPC工作流程


      WSDL簡介
      介紹過了SOAP,讓我們關注Web Service中另外一個重要的組成WSDL。
      WSDL的主要文檔元素

       

       

       

      幾種基于HTTP協議的RPC性能比較

      http://jspengxue.iteye.com/blog/48124

       

      有 了整體的了解后,可以發現Hessian的這個遠程過程調用,完全使用動態代理來實現的,其實從客戶端代碼不難看 出,HessianProxyFactory的create方法就是創建接口Basic的代理類,該類實現了Basic接口,JDK的proxy類會自動 用 InvocationHandler 的實現類(該類在Hessian中表現為HessianProxy)的invoke方法體 來填充所生成代理類的方法體,從而實現遠程調用,傳輸過程使用的是基于Http的二進制字節流。

      RMI與Hessian的調用過程比較:

      Java代碼
      Hessian:客戶端(basic.hello())——>序列化寫到輸出流——>遠程方法(服務器端)——>序列化寫到輸出流 ——>客戶端讀取輸入流——>輸出結果
      
      
      RMI:客戶端——>stub——>序列化——>skeleton——>遠程方法——>序列化——>stub—— >輸出結果



      服務端的是一個簡單的加密、解密方法,各種協議使用同一個實現的代碼。
      客戶端是獨立的java程序,分別用各種協議對服務端的方法進行調用。每一種協議循環調用n次,然后取平均值。

      循環1,000次的測試
      第一次

      Java代碼
      Axis --------------->> Total time: 11123 ms, Avg time: 11.123 ms
      
      Burlap ------------->> Total time:   866 ms, Avg time:  0.866 ms
      
      Hessian ------------>> Total time:   581 ms, Avg time:  0.581 ms
      
      REST --------------->> Total time:   929 ms, Avg time:  0.929 ms
      
      AxisUsingWSDL2Java ->> Total time: 11998 ms, Avg time: 11.998 ms



      第二次

      Java代碼
      Axis --------------->> Total time: 11256 ms, Avg time: 11.256 ms
      
      Burlap ------------->> Total time:   816 ms, Avg time:  0.816 ms
      
      Hessian ------------>> Total time:   582 ms, Avg time:  0.582 ms
      
      REST --------------->> Total time:   919 ms, Avg time:  0.919 ms
      
      
      AxisUsingWSDL2Java ->> Total time: 11908 ms, Avg time: 11.908 ms



      循環10,000次的測試
      第一次

      Java代碼
      Axis --------------->> Total time:  88013 ms, Avg time:  8.8013 ms
      
      Burlap ------------->> Total time:   5789 ms, Avg time:  0.5789 ms
      
      Hessian ------------>> Total time:   5162 ms, Avg time:  0.5162 ms
      
      REST --------------->> Total time:   8316 ms, Avg time:  0.8316 ms
      
      AxisUsingWSDL2Java ->> Total time: 112801 ms, Avg time: 11.2801 ms



      第二次

      Java代碼
      Axis --------------->> Total time:  87359 ms, Avg time:  8.7359 ms
      
      Burlap ------------->> Total time:   5784 ms, Avg time:  0.5784 ms
      
      Hessian ------------>> Total time:   5084 ms, Avg time:  0.5084 ms
      
      REST --------------->> Total time:   7983 ms, Avg time:  0.7983 ms
      
      AxisUsingWSDL2Java ->> Total time: 113234 ms, Avg time: 11.3234 ms


      測試結果
      Hessian最快,Burlap第二,REST第三,Axis最慢。前3種要比Axis快了10倍或者更多。

      上面的測試,服務端用的是Resin-3.0.13,出于好奇,我又用Tomcat-5.5.9測試了一把,結果是Resin確實比Tomcat快些。 Tomcat-5.5.9 循環10,000次的測試

      Java代碼
      1. Axis --------------->> Total time:  122551  ms, Avg time:  12 .2551ms  
      2. Burlap ------------->> Total time:   6401  ms, Avg time:   0 .6401ms  
      3. Hessian ------------>> Total time:   5745  ms, Avg time:   0 .5745ms  
      4. REST --------------->> Total time:   8090  ms, Avg time:   0 .809ms  
      5. AxisUsingWSDL2Java ->> Total time: 156908  ms, Avg time:  15 .6908ms 
       
      http://www.open-open.com/31.htm
       Xerces 
      Xerces是由Apache組織所推動的一項XML文檔解析開源項目,它目前有多種語言版本包括JAVA、C++、PERL、COM等。

      更多Xerces信息

       JDOM 
      JDOM 是一種面向Java的讀、寫和操作XML文檔的API。JDOM 與現行的SAX 和DOM標準兼容,為Java 程序員提供了一個簡單、輕量的XML文檔操作方法。由于JDOM是專門為Java 程序員開發的,所以采用許多Java語言的優秀特性,比如方法重載、集合(Collections)和類映射(Reflection)。

      更多JDOM信息

       dom4j 
      Dom4j是一個易用的、開源的庫,用于XML,XPath和XSLT。它應用于Java平臺,采用了Java集合框架并完全支持DOM,SAX和JAXP。

      更多dom4j信息

       XOM 
      XOM雖然也是一種面向對象的XML API,類似于DOM 的風格,但是它有一些與眾不同的特性比如嚴格保持內存中對象的不變性,從而使XOM實例總是能序列化為正確的XML。此外,與其他Java XML API相比,XOM 追求更簡單和更正規。

      更多XOM信息

       JiBX 
      JiBX是一個為Java提供的XML數據綁定框架。它可以和現存的類一起運行,使用一個靈活的映射定義文件來決定如何將數據對象轉換成XML。

      更多JiBX信息

       KXML 
      KXML是一個只占很小存儲空間的XML語法分析程序,對于J2ME應用程序非常適合。它有一個非常獨特的DOM操作方法和被稱為Pull的語法分析方法。它有以下性能:  
      · 支持XML名稱空間   
      · 用"松散"模式分析HTML或其它SGML格式   
      · 占用很少的存儲空間(21 kbps)   
      · 基于Pull的分析   
      · 支持XML寫操作   
      · 可選的DOM支持   
      · 可選的WAP支持

      更多KXML信息

       XMLBeans 
      XMLBeans是一個XML-Java綁定工具,利用它可以很方便地解析XML文檔。Eclipse支持插件: xmlbeansplug (在線更新 地址 )。

      更多XMLBeans信息

       jConfig 
      因 為properties的局限性,有時候得使用XML文件來定義應用的配置參數,jConfig 正是這樣一個讀寫XML配置文件的工具。開發者在 Java 程序中只需要使用get/set方法就能讀取修改 XML 文件中的配置參數。jConfig 目前只支持兩層結構,最新版本為 2.3。

      更多jConfig信息

       XStream 
      XStream使用起來非常簡單,不需要預先生成相關的輔助類,不需要映射文件。當然,使用簡單也注定了它只能處理簡單結構的 XML 文件。

      更多XStream信息

       XJR 
      一個XML的Java綁定框架,它的主要特點是不需要映射文件,用XJRDTDCompiler直接通過DTD文件生成Java文件,也可以用 XJRDTDCreator對Java類處理生成DTD文件。當然也有不足,就是還不支持Schema。

      更多XJR信息

       Piccolo XML Parser 
      Piccolo是利用java快速解析XML文檔的開源項目。它實現 SAX 1, SAX 2.0.1, and JAXP 1.1 接口作為一個(Non-validating)非驗證剖析器。

      更多Piccolo XML Parser信息

       NanoXML 
      NanoXML是一個能在CLDC 環境下運行的開放源代碼非確認性(不做驗證工作直接進行解析)的XML 分析器。Nanoxml是一步解析器(非常小6KB的XML解析器),一次就把文檔解析完并以一個樹狀的結構傳回。

      更多NanoXML信息

       XP Parser 
      XP是一個Java開發的XML1.0解析器.它當前是一個非驗證解析器,然而它可以解析所有外部實休:外部DTD子集,外部參數實體,普通的外部實體.

      更多XP Parser信息

       Commons-Digester 
      Digester基于規則的XML文檔解析,主要用于XML到Java對象的映射.

      更多Commons-Digester信息

       NunniMJAX 
      NunniMJAX是一個Java非驗證XML解析器。它的APIs與功能類似于SAX.這意味著你如果熟悉SAX你將很容易掌握這個解析器。

      更多NunniMJAX信息

       Crimson 
      Crimson是一個基于Java的XML解析器.它通過JAXP1.1,SAX2.0,SAX2擴展版本1.0,DOM Level 2 Core Recommendation來支持XML1.0.

      更多Crimson信息

       JOX 
      JOX是一組Java類庫,它使得在XML文檔與Java Beans之間進行數據轉換變得容易.你可以把JOX想象成Java對象序列化(Java Object Serialization)的一個種特殊形式,利用XML作為序列化的格式.

      更多JOX信息

       JaxMe 
      JaxMe是對JAXB(Java/XML綁定規范)的一種開放源代碼實現。它對基本的JAXB 規范作了一些改進之外并且集成了數據庫和Enterprise JavaBeans.

      更多JaxMe信息

       XMLConfigReader  
      XMLConfigReader是對Java ResourceBundle類的一個開源擴展.利用它可以直接從XML文件中讀取配置數據并把數據存儲在一個HashTable中.

      更多XMLConfigReader 信息

       JVoiceXML 
      JVoiceXML一個開源的VoiceXML解析器.

      更多JVoiceXML信息

       Woodstox 
      Woodstox是一個快速開源且符合StAX(STreaming Api for Xml processing)規范的XML處理器(做為一個處理器意味著它可以處理輸入(相當于解析)與輸出(相當于寫入,序列化))。

      更多Woodstox信息

       xalan 
      xalan- java是一套xslt處理器,用來將XML文件轉換為HTML,TEXT和XML等其他類型文件格式。支持XSLT1.0和XPATH 1.0版。開發人員可以通過命令行方式或在JAVA APPLET和SERVLET中使用,并可以作為自己開發的應用程序的類庫使用。xalan-java實現的是transformation API for XML(TRaX)接口,此接口為jaxp1.2標準中的一部分。

      更多xalan信息

       XmlIO 
      XmlIO是一個利用SAX來解析XML然后創建Java對象并同時調用這些對象 setter 方法的框架.這個框架還能夠把一張包含有單個根節點的Java對象圖序列化成XML格式的字符串。

      更多XmlIO信息

       VTD-XML 
      VTD-XML是一種新的XML處理API,它能夠克服DOM和SAX的一些問題。VTD-XML能夠在內存中對XML進行快速檢查并提供XPath查詢支持。 在它的主頁上有詳細的API描述,源代碼,文檔和例子。

      更多VTD-XML信息

       Nux 
      Nux 是一個開源的Java工具,它能夠讓XML高效處理變得容易。Nux可嵌入到具有高吞吐量的XML消息中間件中比如:大型p2p底層結構,消息隊列,發布 -訂閱和Blogs/新聞聚合的matchmaking系統,分布式系統,防火墻等.Nux集成并擴展XOM,Saxon和Lucene這些優秀的開源組 件包以提供XQuery/XPath,全文本搜索等功能。

      更多Nux信息

       StAX 
      StAX(Streaming API for XML)是標準的XML處理API,它能夠從應用程序的stream對象解析XML數據或把XML數據轉換成stream對象。StAX是一個用Java實現的XML拉式解析器。

      更多StAX信息

       Skaringa 
      Skaringa提供一個類庫實現Java object與XML文檔的相互轉換,并能夠為Java class生成XML schema定義。

      更多Skaringa信息

       X2JB 
      X2JB是一個Java開發類包用于把XML映射成Java實體。實際上它與JAXB、XML Beans、Jakarta Commons Digester 等相似但沒有它們復雜。X2JB使用注釋(annotation)來映射XML元素和元素屬性。

      更多X2JB信息

       Smooks 
      Smooks 用于處理XML與非XML(CSV,EDI,Java等)的一個Java框架與引擎。Smooks能夠用于各種數據格式的轉換:XML to XML,CSV to XML,EDI to XML,XML to EDI,XML to CSV,Java to XML,Java to EDI,Java to CSV,Java to Java,XML to Java,EDI to Java等。

      更多Smooks信息

       WAX 
      WAX 是一個用于創建大型XML文檔的高效工具。與其它XML操作類庫(如JDOM)相比,它占用的內存比較少。創建XML所需要的代碼也比較少。只關注創建功 能,而沒有讀取/解析功能。整個類庫只有12K左右。特別適合用于創建基于REST或SOAP Web Service的請求與響應信息。

      更多WAX信息

         共 2 頁『   1    2   』
       

       

      end

      posted @ 2008-07-09 00:33  siemens800  閱讀(49)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 被灌满精子的少妇视频| 男人的天堂av社区在线| 亚洲国产女性内射第一区| 国产精品黄色精品黄色大片| 亚洲中文在线精品国产| 林口县| 国产精品国产精品偷麻豆| 免费国产一区二区不卡| 国产成人午夜福利院| 一区二区视频| 无套内射视频囯产| 国产在线精彩自拍视频| 99久久国产综合精品女图图等你| 亚洲国产精品一区二区第一页| 精品亚洲欧美高清不卡高清| 久久不见久久见www日本| 亚洲国产精品日韩在线| 亚洲精品一区二区三区蜜臀| 亚洲情A成黄在线观看动漫尤物| 徐闻县| 夜色福利站WWW国产在线视频| 自偷自拍亚洲综合精品| 野外做受三级视频| 亚洲欧美日韩成人综合一区| 亚洲国产精品男人的天堂| 国产在线精品欧美日韩电影| 久久久久久久久18禁秘| 国产精品久久国产三级国不卡顿 | 日本不卡的一区二区三区| 熟女系列丰满熟妇AV| 国产成人精品亚洲日本在线观看| 国产涩涩视频在线观看| 国产精品深夜福利免费观看| 日韩人妻少妇一区二区三区 | 久久国产精品精品国产色| 香蕉EEWW99国产精选免费| 国产精品中文字幕二区| 国产女同一区二区在线| 亚洲熟女精品一区二区| 国产精品午夜福利合集| 久久碰国产一区二区三区|