`

webservice几种实现框架比较

 
阅读更多

转发的

 

1摘要

 

开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有很多种,这对于开发者如何选择带来一定的疑惑。性能Webservice的关键要素,不同的框架性能上存在较大差异,而当前在官方网站、网络资料中可以方便的找到各自框架的介绍,但是很少有针对不同框架性能测试数据。本文选择了比较流行几个框架:

Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF、Apache Wink、Jboss  RESTEasy、sun JAX-WS(最简单、方便)、阿里巴巴  Dubbo(除外)等,采用Java作为测试用例,通过本机和远程两种进行测试方式,对这几种框架进行了性能测试,并对测试结果分析和性能比较,最后并对性能优异的框架进行了推荐。

目前三种主流的web服务实现方法: 

REST(新型):表象化状态转变 (软件架构风格)RESTEasy、Wink、CXF、Axis2…….

SOAP(比较成熟):简单对象访问协议  Xfire、Axis2、CXF、Axis1

XML-RPC(淘汰):远程过程调用协议(慢慢被soap 所取代)

REST 简单易用,效率高,貌似未来有很大的发展空间,也有宣称rest性能个方便比soap强大的,已经有很多框架宣称对rest进行支持比如spring 3.0、struts…….. (百度观点)

SOAP 成熟度较高,安全性较好

关键词:Axis1、Axis2、XFire、CXF、Spring、SOAP、StAX、WSDL

2      框架介绍

2.1      Apache Axis1

Axis本质上就是一个SOAP引擎(Apache Axis is an implementation of the SOAP),提供创建服务器端、客户端和网关SOAP操作的基本框架。但Axis并不完全是一个SOAP引擎,它还包括:

l  是一个独立的SOAP服务器。

l  是一个嵌入Servlet引擎(例如Tomcat)的服务器。

l  支持WSDL。

l  提供转化WSDL为Java类的工具。

l  提供例子程序。

l  提供TCP/IP数据包监视工具。

2.2      Apache Axis2

Apache Axis2相比Apache Axis1更加有效、更加模块化、更加面向xml,支持容易插件模块扩展新功能和特性,例如安全和可靠。Apache Axis2是基于Apache AXIOM,它是一个高性能、pull-based XML对象模型。Apache Axis2的关键特性:

l  解析xml更快。采用自己的对象模型和StAX (Streaming API for XML)。

l  更低的内存占用。

l  支持热部署。新服务加入到系统,无需重启服务。

l  支持异步webservice、

l  MEP支持,灵活支持在WSDL 2.0定义的Message Exchange Patterns (MEPs)

l  更加灵活。引擎给开发人员提供了充足的自由度可扩展客户头信息处理、系统管理、

l  更加稳定性。

l  传输框架不依赖于具体协议。为集成和传输协议(SMTP, FTP, message-oriented middleware, etc)有一个简单和抽象,引擎核心是完全独立于具体的传输协议。

l  支持WSDL。支持WSDL1.1、WSDL2.0。

l  方便集成其他组件(Add-ons)。几个web services已经被集成,包括:WSS4J for security (Apache Rampart), Sandesha for reliable messaging, Kandula which is an encapsulation of WS-Coordination, WS-AtomicTransaction and WS-BusinessActivity.

l  良好的扩展性。

2.3      Codehaus  XFire

XFire核心是一个轻量的基于STAX消息处理模型,用来与SOAP消息交互,它支持不同类型的绑定机制、容器和传输协议。

支持webservice标准- SOAP, WSDL, WS-I Basic Profile, WS-Addressing, WS-Security, etc.

l  高性能SOAP STACK

l  可插拔绑定POJOs, XMLBeans, JAXB 1.1, JAXB 2.0, and Castor support

l  通过Java1.5 和1.4(Commons attributes JSR 181 syntax)使用JSR 181 API配置服务

l  支持多中传输协议- HTTP, JMS, XMPP, In-JVM, etc.

l  可嵌入的和直观的API

l  支持Spring, Pico, Plexus, and Loom

l  支持JBI

l  客户端和服务端stub代码生成

l  支持JAX-WS early access

2.4      Apache CXF

Apache CXF是一个开源服务框架。Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了Celtix和XFire两大开源项目的精华,比如:JAX-WS and JAX-RS,主要特性包括:

l  支持Web services标准。包括:SOAP、the WSI Basic Profile、WSDL、WS-Addressing、WS-Policy、WS-ReliableMessaging、WS-Security、WS-SecureConversation和WS-SecurityPolicy.

l  支持不同类型前端开发模型。CXF实现了JAX-WS APIs,支持JAX-RS开发。

l  容易使用。CXF设计的简洁和直观,具有简洁APIs迅速的构建基于代码的服务,Maven插件使得工具集成更加容易、JAX-WS API支持、Spring 2.x XML使得配置更加容易。

l  支持二进制和遗留协议。CXF被设计为可插拔的架构,在不同的传输协议结合下,不仅支持XML,也支持非XML类型绑定,例如:JSON和CORBA。

2.5 RESTEasy(百度观点较好)

 

RESTEasy是JBoss的一个开源项目,提供各种框架帮助你构建RESTful Web Services和RESTful Java应用程序。它是JAX-RS规范的一个完整实现并通过JCP认证。作为一个JBOSS的项目,它当然能和JBOSS应用服务器很好地集成在一起。但是,它也能在任何运行JDK5或以上版本的Servlet容器中运行。RESTEasy还提供一个RESTEasy JAX-RS客户端调用框架。能够很方便与EJB、Seam、Guice、Spring和Spring MVC集成使用。支持在客户端与服务器端自动实现GZIP解压缩。 (资料少无法比较)

 

有较专业的人士对CXF、Restlet、RESTEasy、Jersey框架测试数据】,他说从性能上看RESTEasy是最好的,Jersey其次(但Jersey连可查阅的英文文档都比较少故个人不推荐使用),cxf和Restlet最差,

 

2.6  Dubbo (个人观点----无理由)

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。(资料少无法比较)

2.7 java6JAX-WS

JAX-WS2.0 (JSR 224)是Sun新的web services协议栈

JAVA中有三种WebService规范,分别是JAX-WS(JAX-RPC)、JAX-RS、JAXM&SAAJ。

JAX-WS(Java API For XML-WebService),JDK1.6 自带的版本为JAX-WS2.1,其底层支持为JAXB。早期的JAVA Web服务规范JAX-RPC(Java API ForXML-Remote Procedure Call)目前已经被JAX-WS 规范取代,JAX-WS 是JAX-RPC 的演进版本,但JAX-WS 并不完全向后兼容JAX-RPC。()

 

2.8  Apache Wink

 

REST(Representational State Transfer)  based Web Service【http://baike.soso.com/v812054.htm】是相对于传统的Web Service(SOAP+WSDL+UDDI)而提出的。传统的Web Service可以很好的解决异构系统之间的通信问题,但是需要首先定义好XML格式的合同(WSDL),client和server都必须严格遵守协议,不容易升级以及集群伸缩。REST Web Service不需要事先定义格式,传输的内容也可以依据不同的client变化(json,xml,html等),最重要的是使用源URL来唯一定位资源,对资源的增删改查映射为HTTP的四个方法,无状态传输,具有非常好的伸缩性。

 

Apache Wink就是一个纯Java的REST框架。它完整的实现了JSR 311并扩展了部分功能,此外还提供了良好的扩展性,难能可贵的是还可以与流行的Java框架Spring无缝集成。目前该项目还在开发中。所谓框架无非就是定义好格式,提供一些工具和钩子,让开发人员可以专注于业务逻辑的开发。

 

 

 

3      测试准备

表格1测试基本元素

测试条件

描述

主机环境

A测试机:CPU:1.60GHz;内存:1.37G

B测试机:CPU:1.83GHz;内存:1G

Web服务
框架

axis1 1.3

axis2 1.2

xfire 1.2.6

应用环境

jdk 1.4、spring 2.x

客户端代码

public void testgetVersion() throws java.lang.Exception {
  String url = "http://localhost:8081/boss/services/Calculate";
  // 客户端初时化时间
  long startTime = System.currentTimeMillis();
  // 客户端stub代码分别是axis1/axis2/xfire/cxf框架 wsdl2java生成
CalculateCalculateHttpportStub stub = new CalculateCalculateHttpportStub(url);
  long endTime = System.currentTimeMillis();
System.out.println("client init time is: " + (endTime - startTime));

  // 连续调用10次
  for (int i = 0; i < 10; i++) {
   long startTime1 = System.currentTimeMillis();
   String ret = stub.getVersion().get_return();
   long endTime1 = System.currentTimeMillis();

System.out.println("[" + i + "] elapsed time is: " + (endTime1 - startTime1) + " ms");
System.out.println("stub.getVersion() is: " + ret);
  }
 }

服务端代码

public String getVersion() 
注:接口无任何业务逻辑,只返回一个字符串:"Hello";

测试方法

本机接口测试,客户端和服务端都在A测试机上进行;

远程接口测试,A测试机作为客户端,B测试机作为服务器。本次测试是在局域网内完成。

结果精度

数字精确到小数点后两位

名词解释

服务器端:部署到服务器的程序。

客户端:发起请求调用服务器上webservcie的程序。

客户端初时化时间:发起接口调用时,初始化客户端java对象所需时间。
例如:CalculateCalculateHttpportStub stub = new CalculateCalculateHttpportStub(url); // 由框架 wsdl2java生成客户端stub

分享到:
评论

相关推荐

    PowerBuilder+webservice源代码

    经过几个月的努力,终于把PB11 WEBSERVICE 框架完成(除了没有封装动态调用存储过程外,已经封装了全部常用功能); 本想把客户端程序上传让大家测试,但是由于公司的WEB服务器上有其它正式的程序在用,所以暂时不准...

    webservice开发指南

    介绍了axis,xfire,cfx几种webservice框架

    Web_Service开发指南_2[1].3.1.rar

    介绍目前流行的webservice几种框架的开发步骤。

    java面试题20道(适合工作1~3年)(附答案).docx

    java中实现多态的机制是什么?多线程创建有几种方式?...编写Webservice接口服务端(框架)有几种方式?常用的缓存框架有哪几个?简述TCP三次握手的理解 Linux下你常用的命令有哪些?Nginx有什么作用?

    深入.net调用webservice的总结分析

    最近做一个项目,由于是在别人框架里...后来经过一番搜索,就找出另外几种动态调用webservice 的方法。废话少说,下面是webservice 代码 代码如下:View Code using System;using System.Collections.Generic;using Sys

    wsdl2java源码-Axis1WebService:Axis1WebService例子,通过wsdl文件生成服务器端代码并部署

    通过几天折腾,找到一种解决方案是通过Axis1框架; 由于联通提供WSDL版本旧(2009),尝试过Axis2,Apache CXF,Spring WS,都不能满足需求; 以 获取手机号信息的wsdl为例子 生成过程 先将tool\asix1.4\asix\WEB-INF拷贝...

    asp.net知识库

    在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值...

    XfireWebService实例和讲解

    最近公司里面要求为家校通开发一个短信接口,所以一直再忙这个webservice,刚...没办法只好转向例外一种框架xfire这个东西可以说很好用,可以传递所有复杂的对象,好了,废话少说,开始动工介绍,我开发的项目实例吧~

    Bucode Enterprise Solution(BES) Beta1.0

    BES是面向.NET开发人员的一系列工具集,目前BES包括以下几部份: .Bucode Framework 基于标准的三层架构,对常见任务进行封装:数据访问、网络通信、事务、日志、域模型。 .Bucode Remoting Server 利用Bucode ...

    最新Java面试宝典pdf版

    58、Collection框架中实现比较要实现什么接口 43 59、ArrayList和Vector的区别 44 60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set...

    Java面试宝典2010版

    58、Collection框架中实现比较要实现什么接口 59、ArrayList和Vector的区别 60、HashMap和Hashtable的区别 61、List 和 Map 区别? 62、List, Set, Map是否继承自Collection接口? 63、List、Map、Set三个接口,...

    Java面试笔试资料大全

    58、Collection框架中实现比较要实现什么接口 43 59、ArrayList和Vector的区别 44 60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set...

    JAVA面试宝典2010

    58、Collection框架中实现比较要实现什么接口 43 59、ArrayList和Vector的区别 44 60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set...

    Java面试宝典-经典

    58、Collection框架中实现比较要实现什么接口 43 59、ArrayList和Vector的区别 44 60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set...

    java面试题大全(2012版)

    58、Collection框架中实现比较要实现什么接口 43 59、ArrayList和Vector的区别 44 60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set...

    Java面试宝典2012版

    58、Collection框架中实现比较要实现什么接口 43 59、ArrayList和Vector的区别 44 60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map...

    java面试宝典2012

    58、Collection框架中实现比较要实现什么接口 47 59、ArrayList和Vector的区别 47 60、HashMap和Hashtable的区别 48 61、List 和 Map 区别? 49 62、List, Set, Map是否继承自Collection接口? 49 63、List、Map、Set...

    Java面试宝典2012新版

    58、Collection框架中实现比较要实现什么接口 43 59、ArrayList和Vector的区别 44 60、HashMap和Hashtable的区别 44 61、List 和 Map 区别? 45 62、List, Set, Map是否继承自Collection接口? 45 63、List、Map、Set...

Global site tag (gtag.js) - Google Analytics