精华内容
下载资源
问答
  • WebService的几种框架 比较

    千次阅读 2018-05-18 10:03:08
    原文:...性能Webservice的关键要素,不同的框架性能上存在较大差异,而当前在官方网站、网络资料中可以方便的找到各自框架的介绍,但是很少有针对不同框架性能测试数据...

    原文:https://www.cnblogs.com/firstdream/p/5575928.html

    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

     

     

    表格2在端对端性能上,一个客户端驱动程序使用了一个胖客户端Web服务堆栈来发送和接受SOAP请求

    Webservice服务端

     

    Webservice客户端

    Webservice stack

     

    SOAP over HTTP

    4      性能测试

    4.1      测试方法

    本次假定在相同网络、主机环境条件下进行测试,因此性能的差别主要是由不同框架实现机制的所决定。

    l  采用两种方式测试:本机测试、远程测试。

    l  服务器端分别采用:axis1、axis2、xfire、CXF,对于选定的服务器端,用不同框架对应的工具包wsdl生成客户端stub代码进行测试。

    l  服务端接口内部没有复杂业务逻辑,客户端调用时,仅仅返回一个字符串。

    l  每次运行,采用java循环方式调用10次服务端接口,并记录下从发起到返回结果的时间。

    4.2      测试结果

    限于篇幅,本文仅提供了:以CXF框架为服务端的详细测试结果,及其各个框架的综合后测试结果。

     

    表格3以CXF作为服务端测试详细结果

    本机测试结果(单位:ms)

    服务器端

    cxf

    客户端

    cxf

    axis1

    客户端初始化

    第1组

    第2组

    第3组

    第4组

    第5组

    第1组

    第2组

    第3组

    第4组

    第5组

    2547

    2594

    2563

    2578

    2563

    2569

    422

    422

    407

    406

    421

    415.6

    连续10次调用接口测试

    第1组

    第2组

    第3组

    第4组

    第5组

    第1组

    第2组

    第3组

    第4组

    第5组

    1

    297

    281

    281

    282

    266

    281.4

    234

    219

    219

    234

    219

    225

    2

    0

    0

    0

    15

    15

    0

    16

    0

    0

    16

    3

    0

    16

    16

    0

    0

    16

    15

    16

    16

    0

    4

    0

    0

    0

    0

    0

    0

    0

    0

    0

    15

    5

    16

    0

    0

    0

    0

    15

    16

    15

    0

    0

    6

    0

    15

    15

    0

    16

    0

    0

    0

    16

    0

    7

    0

    0

    0

    0

    0

    16

    16

    16

    0

    16

    8

    15

    0

    0

    0

    0

    0

    0

    0

    15

    0

    9

    0

    0

    0

    0

    15

    16

    15

    16

    0

    16

    10

    0

    16

    16

    15

    0

    0

    0

    0

    16

    0

    10次平均值

    32.8

    32.8

    32.8

    31.2

    31.2

    32.16

    29.7

    29.7

    28.2

    29.7

    28.2

    29.61

    后9次平均值

    3.444

    5.222

    5.222

    3.333

    5.111

    4.467

    7

    8.667

    7

    7

    7

    7.333

    远程测试结果(单位:ms)

    服务器端

    cxf

    客户端

    cxf

    axis1

    客户端初始化

    第1组

    第2组

    第3组

    第4组

    第5组

    第1组

    第2组

    第3组

    第4组

    第5组

    2703

    2547

    2578

    2563

    2531

    2584

    406

    406

    422

    407

    422

    412.6

    连续10次调用接口测试

    第1组

    第2组

    第3组

    第4组

    第5组

    第1组

    第2组

    第3组

    第4组

    第5组

    1

    344

    281

    281

    281

    297

    296.8

    219

    234

    235

    234

    687

    321.8

    2

    0

    0

    16

    16

    16

    16

    0

    15

    16

    16

    3

    0

    16

    0

    0

    0

    62

    16

    0

    0

    0

    4

    16

    0

    16

    15

    0

    47

    16

    16

    15

    16

    5

    0

    15

    0

    0

    15

    16

    15

    15

    16

    0

    6

    0

    0

    15

    16

    0

    31

    0

    0

    0

    15

    7

    0

    16

    0

    0

    16

    16

    16

    16

    15

    0

    8

    15

    0

    0

    0

    0

    31

    0

    16

    16

    16

    9

    0

    16

    16

    15

    0

    31

    15

    0

    0

    0

    10

    0

    0

    0

    0

    15

    31

    16

    15

    16

    15

    10次平均值

    37.5

    34.4

    34.4

    34.3

    35.9

    35.3

    50

    32.8

    32.8

    32.8

    76.5

    43.37

    后9次平均值

    3.444

    7

    7

    6.889

    6.889

    6.244

    31.22

    10.44

    10.33

    10.44

    8.667

    14.22

     

     

    表格4不同框架本机和远程测试结果

    本机测试结果(单位:ms)

    服务器端

    axis2

    axis1

    xfire

    cxf

    客户端

    axis2

    axis1

    axis1

    axis2

    xfire+spring

    axis1

    cxf

    axis1

    客户端初始化

    656.4

    1138

    1325

    762.2

    0

    1340.6

    2569

    451.6

    10次中的初次调用值

    546.4

    568.8

    484.2

    434.8

    1022

    987.4

    281.4

    225

    10次平均值

    62.48

    66.7

    73.44

    57.22

    119.2

    120.9

    32.16

    29.61

    后9次平均值

    8.71

    11.84

    27.8

    15.27

    18.84

    25

    4.467

    7.333

    远程测试结果(单位:ms)

    客户端初始化

    672.8

    1040

    axis1

    772

    0

    2994

    2584

    421.6

    10次中的初次调用值

    645.8

    606

    684.4

    427.8

    1010

    1190

    296.8

    321.8

    10次平均值

    71.58

    70.36

    97.82

    60.28

    117.2

    139.1

    35.3

    43.37

    后9次平均值

    7.78

    10.58

    32.64

    19.44

    18.04

    27.13

    6.244

    14.22

     

    4.3      结果分析

    从数据可以看出,有下面几个特点:

    l  客户端初次调用,初始化客户端stub对象时,大约在:600ms~2500ms。由于需要建立网络连接,初始化java相关对象,因此耗时较长。

    l  客户端初始化stub后,接口初次调用,大约在:400ms~1000ms。相比后续的接口调用时间最长。

    l  在第一次调用完毕后,随后的调用中,性能都明显提升。大约在:7ms~30ms。

    l  本机测试与远程测试,性能上差距很微小,在高速的局域网内,性能差别几乎可以忽略。

    l  在相同的服务端下,采用不同框架生成的stub代码调用时,时间上也存在一定的差异。

     

    实际应用中,接口的调用都是在网络的不同的机器之间进行,本文也重点关注远程调用测试结果,在测试结果比较上,可以看出:

    l  最优组合是最差组合性能的5倍多。

    n  最优的组合为:cxf客户端+ cxf服务端,6ms左右。

    n  最差的组合为:axis1客户端+ axis1服务端,32ms左右。

    l  CXF作为服务端,对于不同的客户端调用时,性能最佳。

    从以上的结果进行分析得出用Axis2与CXF作为服务器端效率是比两外两者(Axis1与xfire)要高,所以下面就对CXF与Axis2进行对比

    5      选择框架的方法

    1. 选择能够对我们的开发过程提供更多、更好帮助的Web开发框架

    (CXF与Axis2都是apache的开源框架,也是目前比较流行的webservice框架,)(百度加个人观点)

    2. 开发框架的学习一定要简单,上手一定要快,没有什么比使用能得到更深的体会。那些动不动就需要半个月或者一个月学习周期的框架,实在是有些恐怖。(cxf学习成本比axis2低)【Axis2允许自己作为独立的应用来发布Web Service,并提供了大量的功能和一个很好的模型,这个模型可以通过它本身的架构(modular architecture)不断添加新的功能。有些开发人员认为这种方式对于他们的需求太过于繁琐。这些开发人员会更喜欢CXF。 】【CXF更注重开发人员的工效(ergonomics)和嵌入能力(embeddability)。大多数配置都可以API来完成,替代了比较繁琐的XML配置文件, Spring的集成性经常的被提及,CXF支持Spring2.0和CXF's API和Spring的配置文件可以非常好的对应。CXF强调代码优先的设计方式(code-first design),使用了简单的API使得从现有的应用开发服务变得方便。】{百度观点}

     

    3. 一定要能得到很好的技术支持,在应用的过程中,或多或少都会出现这样或者那样的问题,如果不能很快很好的解决,会对整个项目开发带来影响。一定要考虑综合成本,其实这是目前应用开源软件最大的问题,碰到问题除了死肯文档就是查阅源代码,或者是网上搜寻解决的办法,通常一个问题就会导致1-2天的开发停顿,严重的甚至需要一个星期或者更长,一个项目有上这么几次,项目整体的开发成本嗖嗖的就上去了。(所以个人感觉应该选择比较流行的框架,起码碰到问题还能上网搜索)

    4. 开发框架结合其他技术的能力一定要强(个人感觉和下同)

    5. 开发框架的扩展能力一定要强。在好的框架都有力所不及的地方,这就要求能很容易的扩展开发框架的功能,以满足新的业务需要。同时要注意扩展的简单性,如果扩展框架的功能代价非常大,还不如不用呢。(axis2与cxf 都支持很多优秀的框架(上已提到),但axis2扩展性比cxf要好,axis2不仅支持java对c/C++提供支持)(个人观点)【RESTEasy也能支持许多比较优秀的框架】(百度加个人观点)

    6. 开发框架最好能提供可视化的开发和配置,可视化开发对开发效率的提高,已经得到业界公认。(暂时无法提供观点)

    7. 开发框架的设计结构一定要合理,应用程序会基于这个框架,框架设计的不合理会大大影响到整个应用的可扩展性。(暂时无法提供观点)

    8. 开发框架一定要是运行稳定的,运行效率高的。框架的稳定性和运行效率直接影响到整个系统的稳定性和效率。(从上面的测试来看,cxf的效率要高于axis2,不知道在大并发量的时候系统的稳定性和安全性)

    9. 开发框架一定要能很好的结合目前公司的积累。在多年的开发中已有了很多积累,不能因为使用开发框架就不能再使用了,那未免有些得不偿失。(暂时无法提供观点)

    10. 选择开发框架另外要注意的一点就是:任何开发框架都不可能是十全十美的,也不可能是适应所有的应用场景的,也就是说任何开发框架都有它适用的范围。所以选择的时候要注意判断应用的场景和开发框架的适用性。(暂时无法提供观点)

     

     

    6 结束语

    Apache CXF是CodehausXFire的第二代产品,目前在不同框架中性能最佳,应该是开发者不错的选择,这与它本身的架构设计不无关系。相比其他框架,CXF具有几个突出的特性:支持JAX-WS、Spring集成、Aegi数据绑定、支持RESTful services、支持WS-*、Apache协议、代码实现简洁。

    Apache Axis2是Apache Axis1的第二代产品,架构上也非常不错,关键特性:支持多语言(C/C++)、支持各种规范、可插拔模块化设计、支持热部署等。与CXF相比性能也非常优异。

    RESTEasy也许也是个不错的框架!(个人观点)


    展开全文
  • 【 什么是WEBService,实现WEBService有哪些框架】 github:https://ptteng.github.io/PPT/PPT-java/Java-task2-webservice.html#/ 什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了...

    这里是修真院后端小课堂,每篇分享文从

    【 什么是WEBService,实现WEBService有哪些框架】

    github:https://ptteng.github.io/PPT/PPT-java/Java-task2-webservice.html#/

    什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?

    什么是webservice

    Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

    webservice分类

    在SOA的基础技术实现方式中WebService占据了很重要的地位,通常我们提到WebService第一想法就是SOAP消息在各种传输协议上交互。近几年REST的思想伴随着SOA逐渐被大家接受,同时各大网站不断开放API提供给开发者,也激起了REST风格WebService的热潮。

    基于soap的webservice

    其实SOAP最早是针对RPC的一种解决方案,简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等)。但是随着SOAP作为WebService的广泛应用,不断地增加附加的内容,使得现在开发人员觉得SOAP很重,使用门槛很高。在SOAP后续的发展过程中,WS-*一系列协议的制定,增加了SOAP的成熟度,也给SOAP增加了负担。

    rest式的webservice

    REST其实并不是什么协议也不是什么标准,而是将Http协议的设计初衷作了诠释,在Http协议被广泛利用的今天,越来越多的是将其作为传输协议,而非原先设计者所考虑的应用协议。SOAP类型的WebService就是最好的例子,SOAP消息完全就是将Http协议作为消息承载,以至于对于Http协议中的各种参数(例如编码,错误码等)都置之不顾。其实,最轻量级的应用协议就是Http协议。对于各种资源的操作最后总是能抽象成为这四种基本操作,在定义了定位资源的规则以后,对于资源的操作通过标准的Http协议就可以实现,开发者也会受益于这种轻量级的协议。

    restful不一定就要用json,xml同样可以,不过是类似去掉header的soap webservice。要注意的是,就算是restful,大多数公司也没有完全遵守,而且在复杂的业务接口设计下,要通过RUCD来抽象所有的接口作为资源基本是不实际的。很多公司只是套了个rest的壳子,自己在内部实现了别的协议,所以只要能达到目的,无论是基于soap的还是restful的webservice,并不一定都是泾渭分明的。

    那该如何选择?

    REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的接口设计带来便利。

    总的来说,基于soap协议的webservice由于有历史包袱,在安全性和扩展性上增强了很多,而且使用xml解析。相应地效率也不如rest式的。但restful的webservice速度虽然可以,但安全性上远不如上一个。所以没必要一定分是非高下,关键还是看应用场景。比如银行国企自然走soap协议的,对安全要求不高的web项目自然去追求速度。

    常用的webservice框架

    如cfx、jwx、XFire与Axis2,jwx也就是jax-ws,是java6提供的对webservice的一种实现。cxf框架则简化了服务发布过程。Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新。

    展开全文
  • C# 写的一个完整的webservice框架

    热门讨论 2008-12-24 21:20:20
    C# 写的一个完整的webservice框架,经过几个小时的努力,终于完成了,功能很完整,给大家共享一下
  • JAVA常用框架发布WebService

    热门讨论 2010-10-12 15:57:53
    由于工作的关系最近一直使用WebService实现不同系统、语言之间的接口对接。故把平时的应用总结一下,希望对各位有所帮助。
  • 一、框架介绍 1.Apache CXF 是由XFire和 Celtix 两个现有的项目进行了重组而形成的新框架,能够与spring完美衔接。支持WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile 2.Axis 为早起版本。 3....

    一、框架介绍

    1.Apache CXF 是由XFire和 Celtix 两个现有的项目进行了重组而形成的新框架,能够与spring完美衔接。支持WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile

    2.Axis 为早起版本。

    3.Axis2是对Axis 进行了彻底的重写的一个新项目了,它使用了新的模块化架构,更方便于功能性的扩展等等。Axis2 支持WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile,WS-Policy将在新版本里得到支持。

    二、Axis 的服务端搭建。

    与普通的web项目区别为:web.xml里边的sevlert的配置及WEB-INF里边的server-config.wsdd配置文件。

    web.xml里边要配置行webservice的映射。

    <servlet>
            <display-name>Apach-Axis servlet</display-name>        
            <servlet-name>AxisServlet</servlet-name>
            <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
        </servlet>    
        <servlet-mapping>
            <servlet-name>AxisServlet</servlet-name>
            <url-pattern>/services/*</url-pattern>
        </servlet-mapping>

    然后就是server-config.wsdd配置文件了。

    此文件中:

    
    <?xml version="1.0" encoding="UTF-8"?>
    <deployment name="defaultClientConfig"
                xmlns="http://xml.apache.org/axis/wsdd/"
                xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
                xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler">
     
     <globalConfiguration>
       <parameter name="disablePrettyXML" value="true"/>
       <parameter name="dotNetSoapEncFix" value="true"/>
       <parameter name="enableNamespacePrefixOptimization" value="false"/>
       <requestFlow>
         <handler type="java:org.apache.axis.handlers.JWSHandler">
            <parameter name="scope" value="session"/>
         </handler>
         <handler type="java:org.apache.axis.handlers.JWSHandler">
            <parameter name="scope" value="request"/>
            <parameter name="extension" value=".jwr"/>
         </handler>
         <!-- uncomment this if you want the SOAP monitor -->
         <!--
         <handler type="java:org.apache.axis.handlers.SOAPMonitorHandler"/>
         -->
       </requestFlow>
       <!-- uncomment this if you want the SOAP monitor -->
       <!--
       <responseFlow>
         <handler type="java:org.apache.axis.handlers.SOAPMonitorHandler"/>
       </responseFlow>
       -->
     </globalConfiguration>
     
     <handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>
     <handler type="java:org.apache.axis.transport.local.LocalResponder" name="LocalResponder"/>
     <handler type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" name="Authenticate"/>
     
     <service name="AdminService" provider="java:MSG">
      <namespace>http://xml.apache.org/axis/wsdd/</namespace>
      <parameter name="allowedMethods" value="AdminService"/>
      <parameter name="enableRemoteAdmin" value="false"/>
      <parameter name="className" value="org.apache.axis.utils.Admin"/>
     </service>
     
     <service name="Version" provider="java:RPC">
      <parameter name="allowedMethods" value="getVersion"/>
      <parameter name="className" value="org.apache.axis.Version"/>
     </service>
     
     <!--  ======================以上内容一般不需要修改===========================-->
     
     
     <!--  ======================================================================
      Services:Demo,此段包含Sevice配置实例
     =======================-->
      <!-- 
      	示例1:	简单 Service
      	情境:	包含下例代码中基本属性.所有参数传递均为元数据,即int、float、double、String、boolean等非对象数据;
    			可以访问此Service中所有的方法
      	引用:	在C#中借助于IDE引用。
      -->
      <service name="WSTest1" provider="java:RPC">	<!-- name: 此WebService的名称;provider:工作模式 -->>
    	  <parameter name="className" value="org.tp.SayHello"/><!-- 此Service对应的实现类 -->
    	  <parameter name="allowedMethods" value="*"/><!-- 可以访问这个Service中所有的方法 -->
      </service>
     
     <!--  ======================以下内容一般不需要修改===========================-->
     <transport name="http">
      <parameter name="qs:list" 
                   value="org.apache.axis.transport.http.QSListHandler"/>
      <parameter name="qs:method" 
                   value="org.apache.axis.transport.http.QSMethodHandler"/>
      <parameter name="qs:wsdl" 
                   value="org.apache.axis.transport.http.QSWSDLHandler"/>
      <requestFlow>
       <handler type="URLMapper"/>
       <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler">
       </handler>
      </requestFlow>
     </transport>
     
     <transport name="local">
      <responseFlow>
       <handler type="LocalResponder"/>
      </responseFlow>
     </transport>
     
    

    将服务端的业务类配置到上述文件中即可。

    展开全文
  • Java EE常用框架.xmind

    2020-06-19 16:08:35
    Java EE常用框架 WebService 介绍 基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用 术语 XML. Extensible Markup Language -扩展性标记语言 WSDL – ...
  • 一、关于SOA(面向服务架构)思想   1、关于协议   2、SOA 的诞生 ...SOA(Service-Oriented Architecture)面向服务架构是一种思想,它将...目前来说,WebService 是SOA 的一种较好的实现方WebService 采用HTTP...

    一、关于SOA(面向服务架构)思想

     

    1、关于协议

     

    2、SOA 的诞生

    SOA(Service-Oriented Architecture)面向服务架构是一种思想,它将应用程序的不同功能单元通过中立的契约(独立于硬件平台、操作系统和编程语言)联系起来,使得各种形式的功能单元更好的集成。目前来说,WebService 是SOA 的一种较好的实现方WebService 采用HTTP 作为传输协议,SOAP(Simple Object Access Protocol)作为传输消息的格式。但WebService 并不是完全符合SOA 的概念,因为SOAP 协议是WebService 的特有协议,并未符合SOA 的传输协议透明化的要求。SOAP 是一种应用协议,早期应用于RPC 的实现,传输协议可以依赖于HTTP、SMTP 等。SOA 的产生共经历了如下过程:

    通常采用SOA 的系统叫做服务总线(BUS),结构如下图所示:

     

     

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

     

    (1.)JAX-WS:

    JAX-WS(Java API For XML-WebService),JDK1.6 自带的版本为JAX-WS2.1,其底层支持为JAXB。早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For

    XML-Remote Procedure Call)目前已经被JAX-WS 规范取代,JAX-WS 是JAX-RPC 的演进版本,但JAX-WS 并不完全向后兼容JAX-RPC,二者最大的区别就是RPC/encoded 样式的WSDL,JAX-WS 已经不提供这种支持。JAX-RPC 的API 从JAVA EE5 开始已经移除,如果你使用J2EE1.4,其API 位于javax.xml.rpc.*包。JAX-WS(JSR 224)规范的API 位于javax.xml.ws.*包,其中大部分都是注解,提供API 操作Web 服务(通常在客户端使用的较多,由于客户端可以借助SDK 生成,因此这个包中的API 我们较少会直接使用)。WS-MetaData(JSR 181)是JAX-WS 的依赖规范,其API 位于javax.jws.*包,使用注解配置公开的Web 服务的相关信息和配置SOAP 消息的相关信息。

     

    (2.)JAXM&SAAJ:

    JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,相当于Web 服务的服务器端,其API 位于javax.messaging.*包,它是JAVA EE 的可选包,因此你需要单独下载。SAAJ(SOAP With Attachment API For Java,JSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输,它在服务器端、客户端都需要使用。这里还要提到的是SAAJ 规范,其API 位于javax.xml.soap.*包。JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,相比之下JAXM&SAAJ 暴漏了SOAP更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,隐藏了更多的细节,更加面向对象,实现起来你基本上不需要关心SOAP 的任何细节。那么如果你想控制SOAP 消息的更多细节,可以使用JAXM&SAAJ,2012年版本为1.3。

     

    (3.)JAX-RS:

    JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行,你需要到JCP 上单独下载JAX-RS 规范的接口,其API 位于javax.ws.rs.*包。

    这里的JAX-WS 和JAX-RS 规范我们采用Apache CXF 作为实现,CXF 是Objectweb Celtix和Codehaus XFire 合并而成。CXF 的核心是org.apache.cxf.Bus(总线),类似于Spring 的ApplicationContext,Bus 由BusFactory 创建,默认是SpringBusFactory 类,可见默认CXF是依赖于Spring 的,Bus 都有一个ID,默认的BUS 的ID 是cxf。你要注意的是Apache CXF2.2 的发行包中的jar 你如果直接全部放到lib 目录,那么你必须使用JDK1.6,否则会报JAX-WS 版本不一致的问题。对于JAXM&SAAJ 规范我们采用JDK 中自带的默认实现。

     

     

    三、几种Web Service框架的基本概念介绍

    1、JWS

    JWS是Java语言对WebService服务的一种实现,用来开发和发布服务。而从服务本身的角度来看JWS服务是没有语言界限的。但是Java语言为Java开发者提供便捷发布和调用WebService服务的一种途径。

     

    2、Axis2

    Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。这是它的优势所在。但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的,打包部署发布都比较麻烦,不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是你不二的选择。Axis2的开发方式类似一个小型的应用服务器,Axis2的开发包要以WAR的形式部署到Servlet容器中,比如Tomcat,通过这些容器可以对工作中的Web Service进行很好的监控和管理。Axis2的Web administrion模块可以让我们动态的配置Axis2.一个新的服务可以上载,激活,使之失效,修改web服务的参数。管理UI也可以管理一个或者多个处于运行状态的服务。这种界面化管理方式的一个弊端是所有在运行时修改的参数没有办法保存,因为在重启动之后,你所做的修改就会全部失效。Axis2允许自己作为独立的应用来发布Web Service,并提供了大量的功能和一个很好的模型,这个模型可以通过它本身的架构(modular architecture)不断添加新的功能。有些开发人员认为这种方式对于他们的需求太过于繁琐,从而会更喜欢CXF。

     

    3、XFire

    XFire是一个高性能的WebService框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购了,原因是它太优秀了,收购后,随着Java6 JWS的兴起,开源的WebService引擎已经不再被看好,渐渐的都败落了。

     

    4、CXF

    Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。CXF支持多种协议,如:SOAP、XML/HTTP、RESTful HTTP 、 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 、 JBI。CXF可以与Spring进行无缝集成。CXF 框架是一种基于 Servlet 技术的 SOA 应用开发框架,要正常运行基于 CXF 应用框架开发的企业应用,除了 CXF 框架本身之外,还需要 JDK 和 Servlet 容器的支持。CXF不但是一个优秀的Web Services / SOAP / WSDL 引擎,也是一个不错的ESB总线,为SOA的实施提供了一种选择方案,当然他不是最好的,它仅仅实现了SOA架构的一部分。CXF更注重开发人员的工效(ergonomics)和嵌入能力(embeddability)。大多数都可以通过配置API来完成,替代了比较繁琐的XML配置文件, Spring的集成性经常的被提及,CXF支持Spring2.0和CXF's API和Spring的配置文件可以非常好的对应。

    注:对于Axis2与CXF之间的关系,一个是Axis2出现的时间较早,而CXF的追赶速度快。

     

    以上几种框架的总结:

    a:目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所提供的对Web Service服务的一种实现。)

    b:Axis与XFire已随着技术不断的更替慢慢落幕,都已不再更新。

    c:以axis2与cxf所最为常用,目前也只有axis2和cxf官方有更新。

    d:从使用场景来说,如果你需要多语言的支持,你应该选择AXIS2。如果你需要把你的实现侧重JAVA并希望和Spring集成,CXF就是更好的选择。

    展开全文
  • 在SOA领域,我们认为Web Service是SOA体系的构建单元(building block)。对于服务开发人员来说,AXIS和CXF一定都不会陌生。...这两个框架 都是从已有的开源项目发展起来的。Axis2是从Axis1.x系列发展而来。CXF则是XF
  • 每一种框架都有自己的特点,有自己的侧重,但是他们的共同之处在于对发布WebService进行了封装,所以我们只需编写一个配置文件或者使用@WebService注解就可以发布WebService,我们这里着重说一下他们各自的特点: ...
  • WebService详解

    2020-12-19 21:59:12
    WebService 什么是Webservice? Web Service是自包含的、模块化的应用程序,它可以在Web中被描述、发布、查找以及调用。 webservice是基于网络的,分布式的模块化组件,他执行特定的任务,遵守具体的技术规范,...
  • 一、WebService是什么?  1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据)  2. 一个跨语言、跨平台的规范(抽象)  3. 多个跨平台、跨语言的应用间通信整合的方案(实际) 二、为什么要...
  • Android 和 IOS 的[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/8.gif][/img]
  • WebService基本介绍

    万次阅读 2018-03-05 15:18:56
    什么是WebService?W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。...
  • 关于webService笔试面试题(一)

    千次阅读 2018-05-30 11:45:31
    一 什么是webservice(用你的话描述webservice)?在什么时候用webservicewebservice能给我们解决什么样的问题)?一句话概括:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。所谓跨编程语言和跨操作...
  • 项目需要,这两天系统要调一个webservice的服务,webservice的东西都扔了好几年了,怎么使用都忘得一干二净了。以前都是使用系统现成的框架掉一个方法就行了,现在几乎是从0开始一点一点搭建环境啊 由于只是调用...
  • 那么首先需要了解jersey和webservice的关系,捋顺webservice框架的各种实现,通过查阅相关博客,我个人总结webservice的结构图如下: 通过上图,大概可以了解到webservice和jersey的关系了,然后我们需要了解...
  • Webservice接口之CXF框架及Axis框架

    千次阅读 2017-03-06 11:16:29
     每一种框架都有自己的特点,有自己的侧重,但是他们的共同之处在于对发布WebService进行了封装,所以我们只需编写一个配置文件或者使用@WebService注解就可以发布WebService,我们这里着重说一下他们各自的特点: ...
  • 手把手教你SSM框架中开发WebService服务手把手教你SSM框架中开发WebService服务一、Webservice简单介绍二、Webservice相关术语三、SSM框架下整合cxf四、客户端五、使用CXF时因缺少对应jar包而报错问题汇总总结 ...
  • 文章来源:...新一代的 Web Services 框架如 Axis2、CXF 都是由现有的项目中逐渐演化而来的,Axis2 是由大家熟悉的 Axis
  • RPC远程调用及常用框架之Hessian

    千次阅读 2019-08-28 23:37:21
    RPC远程调用及常用框架 从语言兼容上的rpc框架有 thrift zeroC-ICE protbuf 从服务治理角度的rpc架构有 dubbo RMI、Hessian spring Cloud RPC的协议有很多,比如Java RMI、WebService的RPC风格、Hession、Thrift...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,577
精华内容 5,430
关键字:

webservice常用框架