为什么要用webservice?究其原因肯定是其存在市场需求,人们需要这样的技术出现来解救他们于重重阻碍之中。其中很重要的用途是满足SOA的需要。
SOA(service-orientedarchitecture)面向服务的体系结构,它是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。需要时通过网络访问这些服务和任务。这个网络可以是本地网络、Internet,也可以分散于各地且采用不同的技术,通过对来自不同地方的服务进行组合,可让最终用户感觉似乎这些服务就安装在本地桌面上一样。可以对这些服务进行结合,以完成特定的业务任务,从而让您的业务快速适应不断变化的客观条件和需求。
既然涉及到不同服务的结合,必然需要不同服务之间的通信。但程序往往受限于平台和语言,使通信变的复杂。软件行业存在这样的事实:跨多个操作系统、编程语言和硬件平台集成软件应用程序不可能由任何一种专门的环境来解决。传统上,这个问题一直是一个紧耦合问题,调用远程网络的应用程序通过自己发出的函数调用和请求的参数与远程网络紧密地联系在一起。在 Web 服务出现之前,在大多数系统上,采用的是固定的接口,但对于不断变化的环境或需求,这样做缺乏灵活性或适用性。
经过不断的尝试和总结,出现了web 服务概念。使用 Web 服务,应用程序可以与平台和编程语言无关的方式相互通信。Web 服务是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换的数据。在面向服务的体系结构(Service-Oriented Architecture,SOA)中,一组以这种方式交互的Web 服务定义了特定的 Web 服务应用程序。
Web 服务所使用的是Internet上统一、开放的标准,如HTTP、XML、SOAP(简单对象访问协议)、WSDL等,所以Web 服务可以在任何支持这些标准的环境(Windows,Linux)中使用。
实际上,Web Service 最基本的组成部分为服务的提供者(Service Provider)和服务的请求者(Service Requester)。这看起来很像 C/S 架构的软件,与之不同的是,WebService 两端的应用是通过基于标准的 XML 格式的协议进行通信的,这种最常用的协议就是 SOAP(Simple Object Access Protocol)。当然,webservices 不简单地只是按这种方式进行通信。按照 Web Service 的相关标准描述,服务的提供者应该首先通过 WSDL(Web Service Definition Language)和 UDDI (UniversalDescription, Discovery, and Integration)发布它所提供的服务到一个统注册这些服务信息的存储库中去。这样,服务的请求者就也可以通过 WSDL 和 UDDI 发现到服务提供者提供的服务,并可以通过应用的调用方法来使用这个服务了。
对于web service,如果人工去创建和解析基于 XML 格式的 SOAP 消息一个非常复杂的过程。还好不同的语言对web service都进行了实现,让我们更加方便地使用web service。
对于java,最先是应运而生的规范是 JAX-RPC 1.0这个标准化成就是建立在WSDL 1.1 和 SOAP 1.1 的基础上的。它最重要的成就之一就是它定义了一个标准,该标准用于将 WSDL 文档(它表示了服务描述)映射为其 Java 表示(服务端点、存根、绑定以及 Java 类型),反之亦然。
主要解决了以下问题:
将 XML 类型映射为 Java 类型
将抽象的 WSDL 定义(端口类型、操作和消息)映射为 Java 接口和 Java 类。
将具体的 WSDL 定义(端口、绑定和服务)映射为 Java 类。
大约1年之后, 编写此规范的 JavaCommunity Process (JCP) 人员望构建一个更好的版本:JAX-RPC 2.0。其主要目标是与行业方向保持一致,但行业中不仅只使用 RPC Web 服务,还使用面向消息的 Web 服务。因此从名称中去掉了“RPC”,取而代之的是“WS”。因此 JAX-RPC 1.1 的后续版本是 JAX-WS 2.0——Java API for XML-based Web services。
JAX-WS在jdk1.6之后就有了自带的实现,不过实现很简单。基本上就只能够传递SOAP协议格式的消息。如果我们需要其他的服务,比如我想让JAX-WS与Spring集成。那么这种解决方案是采用框架,支持JAX-WS的框架有AXIS2和CXF以及XFire 。
注:
1. SOAP协议(SimpleObject Access Protocal,简单对象访问协议),它是一个用于分散和分布式环境下网络信息交换的基于XML的通讯协议。在此协议下,软件组件或应用程序能够通过标准的HTTP协议进行通讯。它的设计目标就是简单性和扩展性,这有助于大量异构程序和平台之间的互操作性,从而使存在的应用程序能够被广泛的用户访问。
2. WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。
3.JAX-WS 2.0与JAX-RPC 1.0的区别:
相同部分:
JAX-WS 仍然支持 SOAP 1.1over HTTP 1.1,因此互操作性将不会受到影响,仍然可以在网上传递相同的消息。
JAX-WS 仍然支持 WSDL 1.1,因此您所学到的有关该规范的知识仍然有用。
区别部分:
SOAP 1.2
JAX-RPC 和 JAX-WS 都支持 SOAP 1.1。JAX-WS 还支持 SOAP 1.2。
XML/HTTP
WSDL 1.1 规范在 HTTP 绑定中定义,这意味着利用此规范可以在不使用 SOAP 的情况下通过 HTTP 发送 XML 消息。JAX-RPC 忽略了HTTP 绑定。而 JAX-WS 添加了对其的支持。
WS-I Basic Profile
JAX-RPC 支持 WS-I BasicProfile (BP) V1.0。JAX-WS 支持 BP 1.1。(WS-I 即 Web 服务互操作性组织。)
新 Java 功能
JAX-RPC 映射到 Java 1.4。JAX-WS 映射到 Java 5.0。JAX-WS 依赖于 Java 5.0 中的很多新功能。
Java EE 5 是 J2EE 1.4 的后续版本,添加了对JAX-WS 的支持,但仍然支持 JAX-RPC,这可能会对 Web 服务新手造成混淆。
数据映射模型
JAX-RPC 具有自己的映射模型,此模型大约涵盖了所有模式类型中的 90%。它没有涵盖的部分映射到了 javax.xml.soap.SOAPElement。
JAX-WS 的数据映射模型是 JAXB。JAXB 可保证所有 XML 模式的映射。
接口映射模型
JAX-WS 的基本接口映射模型与JAX-RPC 的区别并不大,不过二者之间存在以下差异:
JAX-WS 的模型使用新的 Java5.0 功能。
JAX-WS 的模型引入了异步功能。
动态编程模型
JAX-WS 的动态客户机模型与JAX-RPC 的对应模型差别很大。很多更改都是为了认可行业需求:
引入了面向消息的功能。
引入了动态异步功能。
JAX-WS 还添加了动态服务器模型,而JAX-RPC 则没有此模型。
消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)
JAX-WS 通过 JAXB 添加了对新附件规范 MTOM的支持。Microsoft 从来没有给 SOAP 添加附件规范;但似乎大家都支持 MTOM,因此应该能够实现附件互操作性。
处理程序模型
从 JAX-RPC 到 JAX-WS 的过程中,处理程序模型发生了很大的变化。
JAX-RPC 处理程序依赖于 SAAJ1.2。JAX-WS 处理程序依赖于新的 SAAJ 1.3 规范。
参考:
1. SOA and web services 新手入门http://www.ibm.com/developerworks/cn/webservices/newto/websvc.html
2. Web 服务提示与技巧:JAX-RPC 与 JAX-WS 的比较http://www.ibm.com/developerworks/cn/webservices/ws-tip-jaxwsrpc.html