Back

WebService简介

WebService简介

webService(又名XML Web Service)是一种跨语言跨操作系统的远程调用技术(是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术)。

WebService平台技术

XML+XSD

WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的 返回结果是什么)。
XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。

SOAP

SOAP是"简单对象访问协议",是一种简单的、基于HTTP和XML的协议, 用于在WEB上交换结构化的数据。
soap消息:请求消息和响应消息

WSDL

WSDL是webservice定义语言, 对应.wsdl文档, 一个webservice会对应一个唯一的wsdl文档, 定义了客户端与服务端发送请求和响应的数据格式和过程。

工作调用原理

对客户端而言,我们给这各类WebService客户端API传递wsdl文件的url地址,这些API就会创建出底层的代理类,我们调用 这些代理,就可以访问到webservice服务。

代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap 数据变成返回值返回。

对服务端而言,各类WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它通过http协议发送过来 soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成 soap格式的数据,通过http响应消息回给客户端。

相比HTTP(post/get)的优势

  1. 接口中实现的方法和要求参数一目了然
  2. 不用担心大小写问题
  3. 不用担心中文urlencode问题
  4. 代码中不用多次声明认证(账号,密码)参数
  5. 传递参数可以为数组,对象等

框架简介

JWS

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

Axis2

Axis2是从Axis1.x系列发展而来,不过它从底层全部重新实现,使用了新的扩展性更好模块架构。

Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。这是它的优势所在。但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的,打包部署发布都比较麻烦,不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是你不二的选择。

XFire

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

CXF

CXF是Apache旗下一个重磅的SOA简易框架,它实现了ESB(企业服务总线),支持可集成spring。CXF是XFire和Celtix项目的结合产品,是XFire经过改造后形成的,就像目前的Struts2来自WebWork一样。可以看出XFire的命运会和WebWork的命运一样,最终会淡出人们的视线。CXF不但是一个优秀的Web Services / SOAP / WSDL 引擎,也是一个不错的ESB总线,为SOA的实施提供了一种选择方案,当然他不是最好的,它仅仅实现了SOA架构的一部分。

Axis2与CXF比较

  1. 通用结构WS-Policy等,数据并对XMLBeans等,Axis2与CXF后面的几个版本基本都支持了,差别不大。
  2. CXF可以很好支持Spring。Axis2不能
  3. Axis2支持多语言-除了Java,他还支持C/C++版本。

从开发者的角度,两个框架的特性相当的不同。
Axis2的开发方式类似一个小型的应用服务器,Axis2的开发包要以WAR的形式部署到Servlet容器中,比如Tomcat,通过这些容器可以对工作中的Web Service进行很好的监控和管理。Axis2的Web administrion模块可以让我们动态的配置Axis2.一个新的服务可以上载,激活,使之失效,修改web服务的参数。管理UI也可以管理一个或者多个处于运行状态的服务。这种界面化管理方式的一个弊端是所有在运行时修改的参数没有办法保存,因为在重启动之后,你所做的修改就会全部失效。Axis2允许自己作为独立的应用来发布Web Service,并提供了大量的功能和一个很好的模型,这个模型可以通过它本身的架构(modular architecture)不断添加新的功能。有些开发人员认为这种方式对于他们的需求太过于繁琐。这些开发人员会更喜欢CXF。
CXF更注重开发人员的工效(ergonomics)和嵌入能力(embeddability)。大多数配置都可以API来完成,替代了比较繁琐的XML配置文件, Spring的集成性经常的被提及,CXF支持Spring2.0和CXF’s API和Spring的配置文件可以非常好的对应。CXF强调代码优先的设计方式(code-first design),使用了简单的API使得从现有的应用开发服务变得方便。
不过你选择Axis2还是CXF,你都可以从开源社区得到大量的帮助。这两个框架都有商业公司提供服务,WSO2提供AXIS2的支持,Iona提供CXF的支持。这两公司都有很活跃的开发者社区。

如何选择?

  1. 如果应用程序需要多语言的支持,Axis2 应当是首选了;
  2. 如果应用程序侧重JAVA并希望和Spring集,Apache CXF 是一种更好的选择,特别对嵌入式的 Web Services 来说;
  3. 如果应用程序没有新的特性需要的话,就仍用原来项目所用的框架,比如 Axis1,XFire,Celtrix或 BEA 等等厂家自己的 Web Services 实现。

引用

每天进步一点点~
孤傲苍狼~

comments powered by Disqus