WebService学习系列之基础理论知识
本系列文章将介绍WebService是什么、 WebService的应用场景、WebService的标准规范、WebService的分类、WebService的落地实现框架、WebService怎么玩
是什么
webservice就是web服务,其本质是远程调用技术的一套标准或规范
应用场景
webservice应用于需要进行远程过程调用的场景中,比如获取天气预报的服务等
调用过程
1.服务端暴露服务
2.客户端调用服务端提供的服务
交互细节
1.服务器首先用一套标准的方法向外界描述它所提供的服务的内容,就属于JAX-WS规范中的WSDL;
2.客户端需要以一种标准的协议来调用此服务,这属于JAX-WS规范中的SOAP;
3.服务提供者将服务内容放在一个公共的网址让大家查询,就属于JAX-WS规范中 的UDDI.(可以没有).
标准规范
WebService是一套标准规范,它制定了webservice开发的套路,只有按照这套标准玩才能开发webservice。有过三种标准,分别是JAX-WS、JAX-RS、JAXM&SAAJ,下面是各种规范的概念性东西,非常枯燥,但是也需要了解一下。
1.JAX-WS(JAX-RPC)
JAX-WS 的全称为Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。
JAX-WS的三要素:WSDL、SOUP、UUDI
-
WSDL——本质是服务内容的标准化描述,是一种接口API文档
WSDL的全称是web service Description Language,是一种基于XML格式的关于web服务的描述语言。
WSDL作用:web service提供者发布自己web服务的API文档,通过这个文档使用者可以知道接口服务的访问路径、服务方法、接口参数及参数的类型、服务返回值及值的类型等等。
WSDL获取: WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:
1.注册到UDDI服务器,以便被人查找;
2.直接告诉给客户端调用者。
-
SOAP——本质是标准的传输协议
SOAP是web service的标准通信协议,SOAP为simple object access protocoll的缩写,简单对象访问协议. 它是一种标准化的传输消息的XML消息格式。WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC(Remote Procedure Call Protocol——远程过程调用协议)方法来调用Web Service。Soap协议是基于http的应用层协议,soap协议传输是xml数据。所以SOAP协议 = HTTP协议 + XML数据格式。
-
UUDI——本质是服务的公共网址。
将web service进行UDDI注册发布,UDDI是一种创建注册表服务的规范,以便大家将自己的web service进行注册发布供使用者查找.然而当服务提供者想将自己的web service向全世界公布,以便外部找到其服务时,那么服务提供者可以将自己的web service注册到相应的UDDI商用注册网站。
因为WSDL文件中已经给定了web service的地址URI,外部可以直接通过WSDL提供的URI进行相应的web service调用。所以UDDI并不是一个必需的web service组件,服务方完全可以不进行UDDI的注册。
2.JAX-RS
JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行。
jax-RS可以发布 rest风格webservice,因为rest的webservice不采用soap传输,直接采用http传输,可以返回xml或json,比较轻量。听说以后会流行这种规范,不过我现在还暂时在实际项目中没有应用到,暂时没有学习该系列知识。
3.JAXM&SAAJ(已废弃)
JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,SAAJ(SOAP With Attachment APIFor Java,JSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输等,JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,相比之下JAXM&SAAJ 暴漏了SOAP更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,隐藏了更多的细节,更加面向对象,实现起来你基本上不需要关心SOAP 的任何细节)
分类
根据其规范的不同,产生了不同风格的webservice
1、SOAP WebService,采用JAX-WS规范。一般如果不特殊说明,平时我们听说的Webservice就是指的SOAP WebService,后面讨论的也都是这种。
2、RESTful WebService,采用 JAX-RS规范。听说以后会流行这种。后面补讨论这种。
落地实现框架
天上飞的理论,必须要有落地的实现,webservice指定了一套标准规范,就必须要有一套实现了它规范的实现,落地实现框架有如下几种
cxf和axis2最为常用,Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新。
那些落伍的框架本人认为只需要知道有这么回事就行,毕竟就怕有些姥姥级别的项目里面还有用这些框架开发webservice服务端的,如果这些落后的框架支持一些被废弃的webservice规范,如果用其他流行框架根据wsdl生成客户端代码时,有可能不支持,本人就遇到过用JAX-RPC这种被废弃的规范开发的webservice服务端的,我根据它生成的wsdl文件,用cxf去生成webservice客户端代码时失败了。但是用AXIS2框架提供的工具可以生成,我估计是AXIS2框架还是支持JAX-RPC这种被废弃的规范。
-
JWS——最简单、方便
这是Java6发布所提供的对Web Service服务的一种实现。它开发最简单,最方便,不过实际项目中用得并不多,个人估计是功能没有CXF和AXIS2全,性能也没有他们高。
-
CXF——最流行
最流行的框架。CXF是Apache旗下一个重磅的SOA简易框架,它实现了ESB(企业服务总线)。CXF来自于XFire项目,经过改造后形成的,就像目前的Struts2来自WebWork一样。可以看出XFire的命运会和WebWork的命运一样,最终会淡出人们的视线。CXF不但是一个优秀的Web Services / SOAP / WSDL 引擎,也是一个不错的ESB总线,为SOA的实施提供了一种选择方案,当然他不是最好的,它仅仅实现了SOA架构的一部分。
注:对于Axis2与CXF之间的关系,一个是Axis2出现的时间较早,而CXF的追赶速度快。
-
AXIS2——重量级,需要很多jar包
Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。这是它的优势所在。但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的。
-
AXIS——已落伍,被AXIS1取代
AXIS2的早期产品,被AXIS2升级取代
-
Xfire——已落伍,被CXF整合取代
XFire是一个高性能的WebService框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购了,原因是它太优秀了,收购后,被整合到CXF中去了。
怎么玩
既然有这么多落地的实现框架,那么就可以用这些框架来进行WebService开发。利用这些Webservice开发框架来进行开发非常简单。
1.如果我们是开发客户端
那么我们可以直接通过服务端发布的wsdl文件直接生成客户端代码,都不用自己开发代码。
2.如果我们是开发服务端
- 可以先按Webservice框架的API进行开发后,发布webservice服务,最后生成wsdl文件;
- 也可以先提前制定wsdl文件,然后通过wsdl文件生成服务端代码发布webservice服务,这种方式服务端不需要自己开发代码,不过手动编写wsdl文件不是那么简单,但是有工具可以利用wsdl Editor,就是那种傻瓜式的图形化拖拽软件。制定好接口规范后,可以用wsdl Editor来编辑生成对应接口规范的wsdl文件。
下面几篇文章中我将介绍如何使用jdk,cxf两种框架来开发webservice