使用Apache CXF实现Web Service1.Web service的概念什么是Web Service呢?从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。
这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。
从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。
一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。
Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。
它可以使用标准的互联网协议,像超文本传输协议HTTP和XML,将功能体现在互联网和企业内部网上。
Web Service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。
你可以用你喜欢的任何语言,在你喜欢的任何平台上写Web Service。
Web Service是构建互联网分布式系统的基本部件。
"网络服务"(Web Service)的本质,就是通过网络调用其他网站的资源。
举例来说,写一个“四川大地震图片墙”,它能动态显示关于四川地震的最新图片。
但是,所有的图片都不是储存在自己的服务器上,而是来自。
只需要发出一个动态请求,要求向自己提供图片。
这种情况下,提供的就是一种Web service。
如果把图片都存放在本地服务器,不调用,那么我就是在使用“本地服务”。
所以,Web service让你的网站可以使用其他网站的资源,比如在网页上显示天气、地图、twitter上的最新动态等等。
2.Web Service架构和云如果一个软件的主要部分采用了“网络服务”,即它把存储或计算环节“外包”给其他网站了,那么我们就说这个软件属于Web Service架构。
Web Service架构的基本思想,就是尽量把非核心功能交给其他人去做,自己全力开发核心功能。
比如,如果你要开发一个相册软件,完全可以使用Flickr的网络服务,把相片都储存到它上面,你只要全力做好相册本身就可以了。
总体上看,凡是不属于你核心竞争力的功能,都应该把它“外包”出去。
最近很红的“云计算”(cloud computing)或者“云服务”(cloud services),实际上就是Web Service的同义词,不过更形象一些罢了。
它们不说你把事情交给其他计算机去做,而说你把事情交给“云”去做。
3.Web Service的优势Web Servcie最主要的优点是,使用不同程序和在不同系统平台上开发出来的程序,都可以相互通信。
SOAP作为Web Service的基本通信协议,简单,投入和使用的代价也很小。
Web Service使用标准的互联网协议-XML、HTTP和TCP/IP。
Web Service有以下的优越性:1)平台无关。
不管你使用什么平台,都可以使用Web service。
2)编程语言无关。
只要遵守相关协议,就可以使用任意编程语言,向其他网站要求Web service。
这大大增加了web service的适用性,降低了对程序员的要求。
3)对于Web service提供者来说,部署、升级和维护Web service都非常单纯,不需要考虑客户端兼容问题,而且一次性就能完成。
4)对于Web service使用者来说,可以轻易实现多种数据、多种服务的聚合(mashup),因此能够做出一些以前根本无法想像的事情。
4.Web Service 三个基本技术Web Service通过标准通信协议,在互联网上发布有用的程序模块(以服务的方式),目前大部分是用SOAP来作通信协议。
Web Service提供一份详细的接口说明书,来帮助用户构建应用程序,这个接口说明书叫作WSDL(Web Service Description Language)。
通常已发布的Web Service要注册到管理服务器,这样便于使用者查询和使用。
这个是通过UDDI(Universal Discovery Description and Integration)来完成的。
4.1 SOAPSOAP是Web Service的基本通信协议,是一种规范,用来定义SOAP消息的XML格式(XML Format)。
包含在一对 SOAP 元素(SOAP Elements)中的、结构正确的 XML 段就是 SOAP 消息。
SOAP 规范还介绍了如何将程序数据表示为 XML,以及如何使用 SOAP 进行远程过程调用(RPC)。
最后SOAP规范还定义了HTTP消息是怎样传输SOAP消息的。
这并不代表SOAP只能用HTTP来作为传输协议,MSMQ、SMTP、TCP/IP都可以做SOAP的传输协议。
4.2 WSDLWeb Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言。
WSDL是Web Service的描述语言,用于描述Web Service的服务,接口绑定等,为用户提供详细的接口说明书。
举个例子,你要使用供应商的Web Service构建应用程序。
你可以向供应商索取使用Web Service的范例,然后按照范例来构建应用程序。
这样可能出现意料不到的错误,比如说,你在程序中使用的客户代码的数据类型是integer,而供应商使用的数据类型是string。
WSDL详细定义客户端消息的格式,需要什么样的参数,这样可以避免不必要的错误。
要查看 WSDL 的值,可以假设您要调用由您的一位业务伙伴提供的 SOAP 方法。
您可以要求对方提供一些 SOAP 消息示例,然后编写您的应用程序以生成并使用与示例类似的消息。
WSDL 通过明确的表示法指定请求消息必须包含的内容以及响应消息的样式。
WSDL 文件用于说明消息格式的表示法以 XML 架构标准为基础,这意味着它与编程语言无关,而且以标准为基础,因此适用于说明可从不同平台、以不同编程语言访问的 XML Web Service 接口。
除说明消息内容外,WSDL 还定义了服务的位置,以及使用什么通信协议与服务进行通信。
WSDL 文件定义了编写使用 XML Web Service 的程序所需的全部内容。
4.3 UDDIUniversal Description Discovery and Integration即统一描述、发现和集成协议。
UDDI实现了一组可公开访问的接口,通过这些接口,网络服务可以向服务信息库注册其服务信息、服务需求者可以找到分散在世界各地的网络服务。
UDDI 目录条目是介绍所提供的业务和服务的 XML 文件。
可以把它比喻成电话本,电话本里记录的是电话信息,而UDDI记录的是Web Service信息。
你可以不把Web Service注册到UDDI。
但如果要让全球的人知道你的Web Service,最好还是注册到UDDI。
UDDI 目录还包含若干种方法,可用于搜索构建您的应用程序所需的服务。
例如,您可以搜索特定地理位置的服务提供商或者搜索特定的业务类型。
之后,UDDI 目录将提供信息、联系方式、链接和技术数据,以便您确定能满足需要的服务。
UDDI 允许您查找提供所需的 Web 服务的公司。
如果您已经知道要与谁进行业务合作,但尚不了解它还能提供哪些服务,这时该如何处理呢?WS-Inspection 规范允许您浏览特定服务器上提供的 XML Web Service 的集合,从中查找所需的服务。
UDDI 目录说明文件也是一个XML文档,它包括下面三个部分:“白页(White Paper)”介绍提供Web Service的公司信息,比如名称、地址、联系方式等等;“黄页(Yellow Paper)”说明UDDI目录的分类,包括基于标准分类法的行业类别,比如说金融、服务和印刷等等;“绿页(green Paper)”详细介绍了访问服务的接口,以便用户能够编写应用程序以使用 Web 服务。
5.Web Service的开源实现Web Service更多是一种标准,而不是一种具体的技术。
不同的平台,不同的语言大都提供Web Service的开发实现,在JAVA领域,Web Service的框架很多,例如:Axis1&2,Xfire,CXF,java6自带Web Service引擎。
1)从JavaSE6.0开始,Java引入了对Web Service的原生支持。
我们只需要简单的使用Java的Annotation标签即可将标准的Java方法发布成Web Service。
但不是所有的Java 类都可以发布成Web Service。
Java类若要成为一个实现了Web Service的bean,它需要遵循下边这些原则:这个类必须是public类这些类不能是final的或者abstract这个类必须有一个公共的默认构造函数这个类绝对不能有finalize()方法2)Axis2(Apache eXtensible Interaction System)是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService 框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。
这是它的优势所在。
但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的,打包部署发布都比较麻烦,不能很好的与现有应用整合为一体。
但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是你不二的选择。
3)XFire是一个高性能的WebService框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便。
但是对Java之外的语言,没有提供相关的代码工具。
XFire后来被Apache 收购了,原因是它太优秀了,收购后,随着Java6 JWS的兴起,开源的WebService引擎已经不再被看好,渐渐的都败落了。
4)Apache CXF是Apache旗下一个重磅的SOA简易框架,它实现了ESB(企业服务总线)。
CXF 继承了 Celtix 和 XFire 两大开源项目的精华,不仅提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。