CXF初识

说到webservice不得不提到WSDL和SOAP两个概念。

首先我们来说说WSDL,它是干嘛用的呢?
WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。

[b]WSDL文档结构[/b]
元素 定义
<portType> web service 执行的操作
<message> web service 使用的消息
<types> web service 使用的数据类型
<binding> web service 使用的通信协议
[table]
|元素 |定义|
|<portType> |web service 执行的操作|
|<message>|web service 使用的消息|
|<types> |web service 使用的数据类型|
|<binding> |web service 使用的通信协议|
[/table]

[b]WSDL端口[/b]
<portType>元素描述了一个webservice、可被执行的操作,以及相关的消息。
可以把它比作传统编程语言中的一个函数库(或一个模块、或一个类)。

[b]WSDL消息[/b]
<message>元素定义了一个操作的数据元素。
每个消息均由一个或者多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。
[b]WSDL types[/b]
<types>元素定义了webservice使用的数据类型。
为了最大程度的平台中立性,WSDL使用XML Schema语法来定义数据类型。

[b]WSDL Bindings[/b]
<binding>元素为每个端口定义消息格式和协议细节。

eg.[b]WSDL实例[/b]
<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>元素把"glossaryTerms"定义为某个[color=red]端口[/color]的名称,把"
getTerm"定义为某个[color=red]操作[/color]的名称。

操作"getTerm"拥有一个名为"getTermRequest"的[color=red]输入消息[/color],以及一个名为"getTermResponse"的[color=red]输出消息[/color]。

<message>元素定义每个消息的部件,以及相关联的数据类型。

这里,glossaryTerms就是一个类(函数库),而"getTerm"是带有输入参数"getTermRequest"和返回参数"getTermResponse"的一个函数。
[b]
SOAP又是什么呢?[/b]

[list]
[*]SOAP 指简易对象访问协议
[*]SOAP 是一种通信协议
[*]SOAP 用于应用程序之间的通信
[*]SOAP 是一种用于发送消息的格式
[*]SOAP 被设计用来通过因特网进行通信
[*]SOAP 独立于平台
[*]SOAP 独立于语言
[*]SOAP 基于 XML
[*]SOAP 很简单并可扩展
[*]SOAP 允许您绕过防火墙
[*]SOAP 将被作为 W3C 标准来发展
[/list]
简单的说,SOAP是简易对象之间相互访问的通讯协议。

SOAP消息的基本结构

<?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>


[b]SOAP Envelope元素[/b]
必须的有的。Envelope元素是SOAP消息的根元素。它可把XML文档定义为SOAP消息。

[b]SOAP Header元素[/b]
可选的,该元素可包含有关SOAP消息的应用程序专用信息(比如认证,支付等)。如果H饿啊der元素被提供,则它必须是Envelope元素的第一个子元素。
[b]
SOAP Body元素[/b]
必须的,该元素可包含打算传送到消息最终端点的实际SOAP消息。

[b]SOAP Fault 元素[/b]
可选的 SOAP Fault 元素用于指示错误消息。
如果已提供了 Fault 元素,则它必须是 Body 元素的子元素。在一条 SOAP 消息中,Fault 元素只能出现一次。

那么WSDL如何和SOAP进行绑定呢?

eg.绑定到SOAP


<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>

[b]
binding[/b]元素有两个属性"name"和"type"属性。

[b]name[/b]属性定义了binding的名称,而type属性指向用于binding的端口(即portType端口)。

[b]soap:binding[/b]元素有两个属性"style"和"transport"。
[b]
style[/b]属性可取值"rpc"或者"document"。transport属性定义了要使用的SOAP协议。

[b]operation[/b]元素定义了每个端口提供的操作符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值