目录
[2.1 实现一个完整的Web服务包括以下步骤](#2.1 实现一个完整的Web服务包括以下步骤)
[2.2 调用方式](#2.2 调用方式)
[3、Web Service的核心组件](#3、Web Service的核心组件)
[3.1 XML](#3.1 XML)
[3.2 SOAP](#3.2 SOAP)
[3.3 WSDL](#3.3 WSDL)
[3.4 UDDI](#3.4 UDDI)
[4.1 AXIS(已淘汰)](#4.1 AXIS(已淘汰))
[4.2 XFire](#4.2 XFire)
[4.3 CXF](#4.3 CXF)
1、WebService定义
Web Service是一个SOA(面向服务架构)的应用程序 ,它是不依赖于语言,不依赖于平台,可以
实现不同的语言(通过xml 描述)间的相互调用 ,通过Internet进行基于Http协议的网络应用间的
交互。
通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
简单可以理解成:WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
从表面上看 ,WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的
API。
这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。
从深层次上看 ,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应
用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。
解决问题:
-
不同系统、不同平台、不同语言之间的通信访问和调用。
-
应用程序的集成,不同业务的整合。
WebService实质就是实现应用程序之间通信 ,有两种应用程序通信的方法:
-
RPC 远程调用。
在客户端,RPC的通常方式是:实例化一个远程对象,并调用其方法和属性。
-
消息传递。
WebService就是一个应用程序 ,它向外界暴露出一个能够通过Web进行调用的API。这就是说,
你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService 的应用程序叫做
客户。
2、WebService的工作原理
Web服务有两层含义:
1、它是指封装成单个实体并发布到网络上的功能集合体;
2、它是指功能集合体被调用后所提供的服务。
简单地讲,Web服务是一个URL资源,客户端可以通过编程方式请求得到它的服务,而不需要知
道所请求的服务是怎样实现的,这一点与传统的分布式组件对象模型不同。
Web服务的体系结构是基于Web服务提供者 、Web服务请求者 、Web服务中介者 三个角色和发
布 、发现 、绑定三个动作构建的。
简单地说,Web服务提供者就是Web服务的拥有者,它耐心等待为其他服务和用户提供自己已有
的功能。
Web服务请求者就是Web服务功能的使用者,它利用SOAP消息向Web服务提供者发送请求以获得
服务。
Web服务中介者的作用 是把一个Web服务请求者与合适的Web服务提供者联系在一起,它充当管
理者的角色,一般是UDDI。
这三个角色是根据逻辑关系划分的,在实际应用中,角色之间很可能有交叉:一个Web服务既可以
是Web服务提供者,也可以是Web服务请求者,或者二者兼而有之。
显示了Web服务角色之间的关系:其中,"发布"是为了让用户或其他服务知道某个Web服务的存在
和相关信息;"查找(发现)"是为了找到合适的Web服务;"绑定"则是在提供者与请求者之间建立
某种联系。
2.1 实现一个完整的Web服务包括以下步骤
-
Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; (发布)
-
Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务; (发现)
-
Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;(发现)
-
利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;(绑定)
-
Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定)
2.2 调用方式
webservice 的调用有3种方式:
-
httpget
-
httppost
-
httpsoap
soap的优点 是可以传递结构化的数据,而前两种不行。
btw, soap 最终也是使用 HTTP 传送 XML。
3、Web Service的核心组件
3.1 XML
XML:(Extensible Markup Language) :扩展型可标记语言和HTTP
面向短期的临时数据处理、面向万维网络,是Soap的基础。
XML和HTML在形式上是一样的,但本质上确实不同的,XML是用来传输数据的 ,HTML是用来显
示数据的。
HTML的标签是预定义 ,而XML标签是自己定义的。
XML主要的构成是根元素 和子元素。且必须前后对应,属性值必须用双引号或者单引号括起来。
形式如下:
<?xml version="1.0" encoding="UTF-8"?>
?<root>
? ? ?<header>响应头信息</header>
? ? ?<body>响应结果信息</body>
?</root>
XML的特性:
1.具有自我描述性。
2.可以在不中断应用程序的情况下进行扩展。
3.2 SOAP
SOAP(Simple Object Access Protocol) :简单对象访问协议
WebService通过HTTP协议 发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封
装 ,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和
XML内容格式就是SOAP协议。
SOAP协议 = HTTP协议 + XML数据格式
SOAP协议定义了SOAP消息的格式 ,SOAP协议是基于HTTP协议的 ,SOAP也是基于XML和XSD
的,XML是SOAP的数据编码方式。
3.3 WSDL
WSDL(Web Service Description Language) :WebService描述语言。
WSDL 文件是一个 XML 文档 ,用于说明一组 SOAP 消息以及如何交换这些消息,即:说明当前的
服务在哪,有哪些接口可以调用,分别是什么方法,什么参数 等信息。一个web service对应一个
唯一的wsdl文档。
3.4 UDDI
UDDI(UnviversalDescription ,Discovery,andIntegration) :统一描述发现和集成协议。
UDDI是一种目录服务 ,企业可以使用它对WebServices进行注册和搜索。
4、主流框架
4.1 AXIS(已淘汰)
Axis (Apache extensible lnteraction System):阿帕奇可扩展交互系统
它是一款开源的webService运行引擎,本质上就是一个SOAP引擎 ,提供创建服务器端、客户端和
网关SOAP操作的基本框架。
Axis分为1.x系列和2系列,两个系列体系结构和使用上有较大的区别,相对而言,Axis1.x更加稳
定,文档也比较齐全。
官网:Apache Axis
4.2 XFire
XFire是下一代的java SOAP框架 。XFire提供了非常方便的API ,使用这些API可以开发面向服务
(SOA)的程序 。它支持各种标准,性能优良(基于低内存的STAX模型)。
4.3 CXF
Apache CXF = Celtix+ XFire
Apache CXF的前身叫Apache Celtixfire,现在已经正式更名为Apache CXF了,以下简称为CXF。
CXF继承了celtix和XFire两大开源项目的精华,提供了对JAX-WS全面的支持,并且提供了多种
**Binding、DataBinding、Transport以及各种Format的支持,并且可以根据实际项目的需要,**采用
代码优先(CodeFirst)或者WSDL优先(WSDL First)来轻松地实现web Services的发布和使
用。
Apache CXF已经是一个正式的Apache顶级项目。
5、Soap协议详解
1.Soap协议是什么
简单对象访问协议(Simple Object AccessProtocol,SOAP)是一种轻量的、简单的、基于XML的
协议,它被设计成在WEB上交换结构化的和固化的信息。
SOAP是基于XML的简易协议 ,可使应用程序在HTTP之上进行信息交换。
2.认识Soap
一条SOAP消息就是一个普通的XML文档。
所有构成元素均被声明于针对 SOAP 封装的默认命名空间中:
http://www.w3.org/2001/12/soap-envelope
以及针对 SOAP 编码和数据类型的默认命名空间:http://www.w3.org/2001/12/soap-encoding
一条SOAP消息就是一个普通的XML文档,包含下列元素
- 必需的Envelope元素,可把此XML文档标识为一条SOAP消息
必须要有的元素,是SOAP 消息的根元素。包含两个属性:
1 xlmns:soap。命名空间。这个属性值必须是 " http://www.w3.org/2001/12/soap-envelope"。
因为SOAP必须拥有与此命名空间相关联的一个Envelope元素。
2 encodingStyle。用于定义在文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会
被应用到元素的内容及元素的所有子元素上。SOAP 消息没有默认的编码方式。
- 可选的Header元素,包含头部信息
这个元素是可选的,包含一些头部信息。包含有关 SOAP 消息的应用程序专用信息(比如认证、
支付等)。
如果Header元素被提供,则它必须是 Envelope 元素的第一个子元素。
有三个重要的属性:
1、mustUnderstand 。SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接
收者来说是强制的还是可选的。假如您向 Header 元素的某个子元素添加了
"mustUnderstand="1",则它可指示
处理此头部的接收者必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失
效。
2、actor。用于将 Header 元素寻址到一个特定的端点。
3、encodingStyle。
- 必需的Body元素,包含所有的调用和响应信息。
必须要有的元素,包含实际的SOAP消息。
- 可选的Fault元素,提供有关在处理此消息所发生错误的信息
可选的元素,用于存留SOAP消息的错误和状态信息。如果已提供了 Fault 元素,则它必须是 Body
元素的子元素。
在一条 SOAP 消息中,Fault 元素只能出现一次。
?<?xml version="1.0"?>
?<soap:Envelope
?xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
?soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
??
?<soap:Header>
?...
?</soap:Header>
??
?<soap:Body>
?...
? ?<soap:Fault>
? ...
? ?</soap:Fault>
?</soap:Body>
??
?</soap:Envelope>
3.结论
SOAP是用于访问网络服务的协议。
一次WebService的调用 ,不是方法的调用 而是soap消息(xml格式规范的文档片段)之间的输入输出。
4.SOAP小总结
1.客户端到UUDI上寻找Service目录。
2.客户端获得WSDL文件。
3.客户端根据WSDL文件的约束和规范,创建SOAP客户端。
4.客户端根据SOAP访问Service。
SOAP 是一个基于类对象的传输协议。
主要包含以下四个部分:
1.封装 。它定义了一个框架, 该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还
是必须的。
2.编码规则 。它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。
序列化:序列化是指将数据从有结构清晰的语言定义的数据形式转化为二进制字符串,反序列化则
是序列化的逆操作。
3.RPC 表示 。它定义了用于表示远程过程调用和应答的协定。
4.绑定 。定义了一种使用底层传输协议来完成在节点间交换SOAP封装的约定。
6、WSDL详解
网络服务描述语言,基于XML。用于描述WebService以及如何对它们进行访问。
WSDL文档是利用这些主要的元素来描述某个WebService的:
1.types
WebService使用的数据类型 。为了实现平台无关性,使用 XML Schema语法来定义数据类型。
2.message
WebService使用的消息 。类比函数调用的参数。它由一个或者多个 part 组成。
Part:消息参数
?<message name="getTermRequest">
? ? ?<part name="term" type="xs:string"/>
?</message>
3.portType
WebService执行的操作 。类比c++一个函数库。它是WSDL 端口。特定端口类型的具体协议和数
据格式规范。
有四种操作类型。
One-way
此操作可接受消息,但不会返回响应。
Request-response
此操作可接受一个请求并会返回一个响应
Solicit-response
此操作可发送一个请求,并会等待一个响应。
Notification
此操作可发送一条消息,但不会等待响应。
一个 request-response 操作的例子:
?<message name="getTermRequest">
? ? ?<part name="term" type="xs:string"/>
?</message>
??
?<message name="getTermResponse">
? ? ?<part name="value" type="xs:string"/>
?</message>
??
?<portType name="glossaryTerms">
? ? ?<operation name="getTerm">
? ? ? ? ?<input message="getTermRequest"/>
? ? ? ? ?<output message="getTermResponse"/>
? ? ?</operation>
?</portType>
portType中name属性:定义了一个端口。
operation元素定义了每个端口提供的操作符。name属性定义一个操作。
具体意义如下:定义了一个名为"getTerm"的操作。"getTerm" 操作会请求一个名为 "getTermRequest" 的输入消
息,此消息带有一个名为 "term" 的参数,并将返回一个名为 "getTermResponse" 的输出消息,此消息带有一个名为 "value" 的参数。
4.binding
WebService使用的通信协议。
一个实例如下:
?<message name="getTermRequest">
? ? ? ?<part name="term" type="xs:string"/>
?</message>
??
?<message name="getTermResponse">
? ? ? ?<part name="value" type="xs:string"/>
?</message>
??
?<portType name="glossaryTerms">
? ? ? ?<operation name="getTerm">
? ? ? ?<input message="getTermRequest"/>
? ? ? ?<output message="getTermResponse"/>
? ? ? ?</operation>
?</portType>
??
?<binding type="glossaryTerms" name="b1">
? ? ? <soap:binding style="document"
? ? ? transport="http://schemas.xmlsoap.org/soap/http" />
? ? ? <operation>
? ? ? ? <soap:operation soapAction="http://example.com/getTerm"/>
? ? ? ? <input><soap:body use="literal"/></input>
? ? ? ? <output><soap:body use="literal"/></output>
? ? ?</operation>
?</binding>
binding 元素有两个属性
-
type 属性: 指向用于 binding 的端口,在这个例子中是 "glossaryTerms" 端口。
-
name 属性:定义 binding 的名称。
soap:binding 元素有两个属性
-
style 属性:可取值 "rpc" 或 "document"。在这个例子中我们使用 document。
-
transport 属性 :定义了要使用的 SOAP 协议。在这个例子中我们使用 HTTP。
xmlns:xml namespace
7、UDDI详解
UDDI是一种目录服务 ,企业可以使用它对WebService 进行注册和搜索。
UDDI,英文为 "Universal Description, Discovery and Integration",可译为"通用描述、发现与集成服务"。
UDDI是一种目录 ,这个目录用于存储有关WebService信息。
例子:假如行业发布了一个用于航班比率检测和预订的 UDDI 标准,航空公司就可以把它们的服务
注册到一个UDDI 目录中。然后旅行社就能够搜索这个 UDDI 目录以找到航空公司预订界面。当此
界面被找到后,旅行社就能够立即与此服务进行通信。