一月收集几个有用的谷歌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:programwebServiceaxisaxis-bin-1_4axis-1_4webappsaxis
to
D:tomcat5webappsaxis
download other jars?
mail.jar: D:programwebServiceaxisjavamail-1.4.1mail.jar
http://java.sun.com/products/javamail/downloads/index.html
http://java.sun.com/products/javabeans/glasgow/jaf.html
Activation.jar : D:programwebServiceaxisjaf-1.0.2activation.jar
http://java.sun.com/products/javabeans/jaf/downloads/index.html
?
xmlsec.jar: D:programwebServiceaxisxml-security-1_4_2libsxmlsec-1.4.2.jar
?
http://xml.apache.org/security/dist/java-library/ ?
?
to
D:tomcat5webappsaxis
deploy
http://localhost:8080/axis
info
http://localhost/axis/happyaxis.jsp
?
Needed Components
- Found SAAJ API ( javax.xml.soap.SOAPMessage ) at D:tomcat5webappsaxisWEB-INFlibsaaj.jar
- Found JAX-RPC API ( javax.xml.rpc.Service ) at D:tomcat5webappsaxisWEB-INFlibjaxrpc.jar
- Found Apache-Axis ( org.apache.axis.transport.http.AxisServlet ) at D:tomcat5webappsaxisWEB-INFlibaxis.jar
- Found Jakarta-Commons Discovery ( org.apache.commons.discovery.Resource ) at D:tomcat5webappsaxisWEB-INFlibcommons-discovery-0.2.jar
- Found Jakarta-Commons Logging ( org.apache.commons.logging.Log ) at D:tomcat5bincommons-logging-api.jar
- Found Log4j ( org.apache.log4j.Layout ) at D:tomcat5webappsaxisWEB-INFliblog4j-1.2.8.jar
- Found IBM's WSDL4Java ( com.ibm.wsdl.factory.WSDLFactoryImpl ) at D:tomcat5webappsaxisWEB-INFlibwsdl4j-1.5.1.jar
- Found JAXP implementation ( javax.xml.parsers.SAXParserFactory ) at an unknown location
- Found Activation API ( javax.activation.DataHandler ) at D:tomcat5webappsaxisWEB-INFlibactivation.jar
Optional Components
- Found Mail API ( javax.mail.internet.MimeMessage ) at D:tomcat5webappsaxisWEB-INFlibmail.jar
- Found XML Security API ( org.apache.xml.security.Init ) at D:tomcat5webappsaxisWEB-INFlibxmlsec-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:tomcat5webappsaxis
//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的定义
W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。
这 里我们从一个程序员的视角来观察web service。在传统的程序编码中,存在这各种的函数方法调用。通常,我们知道一个程序模块M中的方法A,向其发出调用请求,并传入A方法需要的参数 P,方法A执行完毕后,返回处理结果R。这种函数或方法调用通常发生在同一台机器上的同一程序语言环境下。现在的我们需要一种能够在不同计算机间的不同语 言编写的应用程序系统中,通过网络通讯实现函数和方法调用的能力,而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 消息的基本结构
- <??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>??
- <??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>??
<? 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 元素中,并会被应用到元素的内容及元素的所有子元素上。
- <??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>??
- <??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>??
<? 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",则要求处理此头部的接收者必须认可此元素。
- <??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>??
- <??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>??
<? 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,也可以是用户的应用程序自定义的元素。以下是一个用户定义的请求:
- <??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>??
- <??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>??
<? 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 响应应该类似这样:
- <?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>??
<?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属性)
- 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>??
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属性)
- 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/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的调用过程比较:
Hessian:客户端(basic.hello())——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果 RMI:客户端——>stub——>序列化——>skeleton——>远程方法——>序列化——>stub—— >输出结果
服务端的是一个简单的加密、解密方法,各种协议使用同一个实现的代码。
客户端是独立的java程序,分别用各种协议对服务端的方法进行调用。每一种协议循环调用n次,然后取平均值。
循环1,000次的测试
第一次
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
第二次
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次的测试
第一次
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
第二次
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次的测试
- Axis?--------------->>?Total?time:? 122551 ?ms,?Avg?time:? 12 .2551ms??
- Burlap?------------->>?Total?time:???6401 ?ms,?Avg?time:?? 0 .6401ms??
- Hessian?------------>>?Total?time:???5745 ?ms,?Avg?time:?? 0 .5745ms??
- REST?--------------->>?Total?time:???8090 ?ms,?Avg?time:?? 0 .809ms??
- AxisUsingWSDL2Java?->>?Total?time:?156908 ?ms,?Avg?time:? 15 .6908ms?
更多Xerces信息
更多JDOM信息
更多dom4j信息
更多XOM信息
更多JiBX信息
· 支持XML名称空间
· 用"松散"模式分析HTML或其它SGML格式
· 占用很少的存储空间(21 kbps)
· 基于Pull的分析
· 支持XML写操作
· 可选的DOM支持
· 可选的WAP支持
更多KXML信息
更多XMLBeans信息
更多jConfig信息
更多XStream信息
更多XJR信息
更多Piccolo XML Parser信息
更多NanoXML信息
更多XP Parser信息
更多Commons-Digester信息
更多NunniMJAX信息
更多Crimson信息
更多JOX信息
更多JaxMe信息
更多XMLConfigReader 信息
更多JVoiceXML信息
更多Woodstox信息
更多xalan信息
更多XmlIO信息
更多VTD-XML信息
更多Nux信息
更多StAX信息
更多Skaringa信息
更多X2JB信息
更多Smooks信息
更多WAX信息