IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  SOA and Web services | WebSphere  >

电信行业案例分析: 基于 WSRR 实现服务生命周期的治理,第 3 部分

深层次探究 WSRR 中的策略分发并以此定义电信业务中的服务策略

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论

样例代码


级别: 高级

王 夕宁 (wangxn@cn.ibm.com), 高级软件工程师, IBM
薛 亮 (xueliang@cn.ibm.com), 资深软件工程师, IBM
刘 昕鹏 (xinpengl@cn.ibm.com), 专职软件工程师, IBM

2009 年 6 月 11 日

本系列基于电信行业中的实例应用,针对业务模型的生命周期治理展开讨论,本篇是该系列中之三,侧重于深层次探究 WSRR 中的策略分发并以此定义电信业务中的服务策略。系列中的第 1 部分讲述了如何定义 WSRR 中支持的基于本体的业务模型,并以此定制自定义用户 Web 界面,从而更好地展示业务数据。第 2 部分则侧重于如何定义生命周期,并重点讨论如何基于策略实现生命周期的治理,并且通过一个示例讲述如何基于定制的用户界面进行生命周期的治理。

电信服务策略上下文: Web 服务元数据、 Parlay X

IBM® WebSphere® Service Registry and Repository (以下简称 WSRR )在 SOA 生命周期的端到端治理基础阶段中担当关键的角色。在服务的整个生命周期中,从开发阶段的服务初次发布、部署直至服务管理,WSRR 都支持对服务元数据的治理。这些服务元数据主要包括了 WSDL、XSD、WS-Policy 文档以及它们的细粒度表示,下面的章节将对这些元数据进行一一讲述。此外,一个基于这些Web服务元数据的电信业务开发接口规范 Parlay X 也会被介绍。

Web 服务元数据

Web 服务元数据是 Web 服务数据难题的一部分,因为它提供了必要的信息,例如 XML schema 、 Web 服务描述语言( Web Services Description Language , WSDL )和 Web 服务策略框架( Web Services Policy Framework , WS-Policy )。 WSDL 定义了基于 XML 的语法,它描述作为接收包含面向文档的或面向过程的信息的消息的一组终端的网络服务。操作和消息是抽象描述的,但它们绑定到具体的网络协议和消息格式上,用来定义终端。相关的具体终端结合到抽象终端(服务)中。 WS-Policy 定义了一组基本概念,这些概念可以由其他 Web 服务的规范使用和扩展,用于描述大量的服务需求、参数选择,和能力。

Web 服务使用元数据来描述其他的端点需要知道什么才能与它们进行交互。具体来说就是, WSDL 描述了 Web 服务使用的抽象消息操作、具体的网络协议和端点地址; XML 模式( XSD )描述 Web 服务接收和发送的基于 XML 的消息的结构和内容; Web 服务策略( WS-Policy )描述 Web 服务的能力、需求和一般特征。

Web 服务描述语言

Web 服务作为应用程序之间的集合和协作的完美框架而出现,而这些应用程序被作为 Web 服务来使用。为了将 Web 服务的使用标准化, World Wide Web Consortium ( W3C )提出了 Web 服务描述语言( Web Service Description Language , WSDL )标准,一种描述 Web 服务功能的基于 XML 的语言。本质上, WSDL 文件是描述 Web 服务提供的操作,以及这些操作接收和返回的参数的 IDL (接口定义语言, Interface Definition Language )文件的独立于语言的基于 XML 的版本。因此, WSDL 已经成为支持 Web 服务描述的标准:服务做什么,应该如何使用它们,以及它们在哪里。

WSDL 为把网络服务描述成一组终结点而定义了一种基于 XML 的语法。这些终结点接受包含面向文档或面向过程信息的消息。这些操作与消息被抽象的描述。它们被绑定到具体的网络协议与消息格式上以定义一个终结点。相关的具体终结点被组合到抽象终结点(服务)中。 WSDL 是可扩展的,它为定义 Web 服务的基本消息处理描述与元数据提供了一种可扩展的机制。不管使用何种消息格式或网络协议进行通讯都允许描述终结点及其消息。

XML 模式

XML 模式是指用来描述 XML 结构、约束等因素的语言,例如 XML Schema 、 XML DTD 、 XDR , SOX 等。它提供了一组对 XML 文档的词汇表和语法进行约束和形式化的功能强大的工具。 XML Schema Part 1:Structures Second Edition 和 XML Schema Part 2: Data types Second Edition [W3C 推荐标准] 定义了另一种 XML 模式语言。第一部分用于控制文档结构,而第二部分允许您限制简单元素和属性的内容。

Web 服务策略

Web 服务策略文档( WS-Policy 、 WS-PolicyAttachment 和 WS-PolicyAssertions )的第一部分是 2002 年发布的。随后,2004 年 9 月发布了两个文档, WS-Policy 和 WS-PolicyAttachment 的更新部分。到 2006 年, Web 服务策略文档( Web Services Policy 1.5 - Framework and Web Services Policy 1.5 - Attachment )已经提交到 World Wide Web Consortium (W3C)。从此 Web Services Policy Working Group 生成了工作草案( Working Draft )。 WS-Policy 框架包含两个规范: WS-Policy 和 WS-PolicyAttachment 。

  • WS-Policy
    WS-Policy 定义了一组基本构造,其他 Web 服务规范能够使用并扩展这些构造以描述广泛的服务需要、首选项和功能。 WS-Policy 规范描述了表达策略选择及将它们组合为领域声明集合的语法。 WS-Policy 规范还描述了将多个应用于通用主题的策略以及策略的交叉部分合并,确定兼容性的基本机制。
  • WS-PolicyAttachment
    WS-PolicyAttachment 规范描述了如何将策略与特定的主题相关联。它给出了如何在 WSDL 和 UDDI 环境中应用的标准的描述( Universal Description 、 Discovery 和 Integration ),并且它提供了通过范围的表达将策略与任意的主题相关联的可扩展的机制。 WS-PolicyAttachment 为通过现有的 XML Web 服务技术使用策略表达式指定了三个特定的附件机制。尤其是定义如何把策略表达式与 WSDL 类型定义和 UDDI 实体关联起来。当特定于实现的策略从特定的实现中公开时,还定义了如何把这个策略与全部或部分 WSDL portType 关联起来。

Parlay X 协议

Parlay X 协议在原有 Parlay API 协议的基础上,对 API 进行了进一步的抽象,并使用基于 Web 业务的 WSDL 语言对 API 进行描述, 从而提供了 IT 开发人员一个更为清晰、简洁、抽象、易于理解的电信业务开发接口。 IBM WebSphere Telecom Web Services Server (简称 TWSS )就是基于标准的 ParlayX 规范规定的接口方式, 组装到企业信息系统中或者供第三方使用,从而能够构建灵活的符合 SOA 体系架构标准的电信业 IT 架构。其中,电信 Web 服务访问网关组件提供策略驱动的服务授权、 SLA 管理和流量管理功能,它们根据请求者、目标服务和调用的操作针对每次 Web 服务请求执行。 访问网关构建于 IBM WebSphere Enterprise Service Bus (ESB) 之上,后者提供灵活性,根据电信服务提供者的网络策略量身定制 Web 服务消息处理。





回页首


WSRR 中的策略管理及策略分发机制

WSRR 对 SOA 策略的管理功能

WSRR 提供对策略生命周期的管理,覆盖了各种领域的策略。特别的, WSRR 能够让用户跟踪和监控运行时策略及其相关联的服务之间的关系和状态。使用 WSRR 提供的策略管理,可以有效地确保 SOA 中的服务符合规定的契约,因此使服务更能符合客户的满意度,提高服务的质量。

WSRR 从以下几个方面提供了对 SOA 策略的管理功能:

  • 管制 SOA 策略的生命周期
    通过管制 SOA 策略的生命周期,可以有效地验证、审核、记录策略的各种变化;还可以确保 SOA 服务符合规定的标准,例如为保证 Web 服务的交互互操作性,应当确保 Web 服务符合 Web services interoperability (WS-I)规范。
  • 使用策略编写工具轻松创建策略
    通过策略编写工具可以快速地创建各种领域的策略,并将创建的策略存储到 WSRR 中。同时还可以允许将策略关联到指定的服务上。
  • 基于策略库机制
    通过策略库机制,可以预定义策略的最佳实践或总结过的策略资产,以此达到复用策略的目的。
  • 分发 SOA 策略到运行时环境
    WSRR 可以存储用于各种运行时环境的 SOA 策略,这种运行时环境包括 WebSphere Enterprise Server Bus (简称 WESB )、 WebSphere Message Broker (简称 WMB )、 WebSphere Data Power 等产品。 如图 1所示,作为 Web 服务元数据 WSDL 和 WS-Policy 的存储库, WSRR 为这些运行时环境提供了获取策略文档内容以及包含策略的 WSDL 文档内容的功能 API 。运行时环境通过这些 API 获取到这些元数据之后,根据实际的业务情形进行不同的执行。

    图 1. 分发 SOA 策略到运行时环境
    分发 SOA 策略到运行时环境

策略分发使用之一:获取策略文档内容

WSRR 提供的策略分发服务 API ,不仅可以能够获取策略文档内容,而且能够获取 WSDL 文档及其相关联的策略的全部内容。当 WSDL 文档中的某些元素存在相关联的策略,那么在获取该 WSDL 文档内容时,这些相关联的策略将以内嵌的方式存于 WSDL 文档中。策略存放的位置取决于它所附加的元素位置,即策略元素将以它所附加元素的子元素方式被添加。

获取策略文档内容的方式有两种:

  • 第一种:通过 bsrURI 的值获取策略文档的内容
    这个 bsrURI 既可以是策略文档的 bsrURI ,又可以是策略文档包含的策略表达逻辑对象的 bsrURI 。
    这种通过 bsrURI 的方式对应的访问 URL 是:
    http://hostname:port/WSRR/6.2/PolicyService/Policy?bsrURI=bsrURI
    例如: http://localhost:9080/WSRR/6.2/PolicyService/Policy?bsrURI=4442da44-976b-4b61.aaa8.2dcea72da807
  • 第二种:通过 policyURI 的值获取策略文档的内容
    我们知道每一个策略表达逻辑对象都有一个特别的标识属性 policyURI ,因此 WSRR 策略分发服务 API 还提供了这种通过 policyURI 的值获取策略文档内容的方式。
    这种通过 policyURI 的方式对应的访问 URL 是:
    http://hostname:port/WSRR/6.2/PolicyService /Policy?uri=PolicyURI
    例如: http://localhost:9080/WSRR/6.2/PolicyService/Policy?uri= http://tonawanda.sr.ibm.com/EmbeddedPolicyStockQuoteService%23ReliableMessagingPolicy

值得注意的一点是,根据 URL 语法规则,原本在 policyURI 值内的“#”符号应编码为%23。

另外,在 WSRR 存储的策略表达逻辑中, policyURI 并不能唯一定位一个策略表达,那么通过第二种方式获取策略文档内容时,获得的结果就可能并不是你期望的那个文档的内容。 WSRR API 本身也并不能保证每次返回的结果总是一致的。因此,当需要唯一精确获取某一策略文档内容时,应先获取该策略文档的 bsrURI ,然后再根据第一种方式通过 bsrURI 获取策略文档内容。

策略分发使用之二:获取包含策略的 WSDL 文档内容

与获取策略文档不同,在获取 WSDL 文档内容时,不但会获取到 WSDL 自身包含的 WSDL 及其其他所有元素的全部内容,同时还会将附加到该 WSDL 文档包含的所有 WSDL 元素的策略一并获取。 附加策略的方式既可以是在 WSDL 内容通过 policyURI 引用策略表达逻辑对象,又可以通过外部文件的方式将策略与 WSDL 元素相关联。

与获取策略文档内容的方式相类似,获取包含策略的 WSDL 文档内容的方式也有两种:

  • 第一种:通过 bsrURI 的值获取包含策略的 WSDL 文档的内容
    这个 bsrURI 既可以是 WSDL 文档的 bsrURI ,又可以是 WSDL 文档包含的任一逻辑对象的 bsrURI ,例如服务、端口、绑定或端口类型等。
    这种通过 bsrURI 的方式对应的访问 URL 是:
    http://hostname:port/WSRR/6.2/PolicyService/ WSDL?bsrURI=bsrURI
    例如:例如: http://localhost:9080/WSRR/6.2/ PolicyService/WSDL?bsrURI=b1cef9b1-6777-474b.a074.fec7cbfe7454
  • 第二种:通过 WSDL identifier 的值获取包含策略的 WSDL 文档的内容
    WSDL 1.1 Element Identifiers 规范( http://www.w3.org/TR/wsdl11elementidentifiers )定义了一种语法用于识别 WSDL 1.1文档中的多种 WSDL 元素。详细的语法可以参阅该链接对应的规范。
    表 1列出了常用的定位 WSDL 元素的 identifier 表达式,以便于更好地理解下面的示例。
    既然可以通过 WSDL identifier 表达式可以定位 WSDL 元素,因此 WSRR 策略分发服务 API 还提供了这种通过 WSDL identifier 的值获取包含策略的 WSDL 文档的内容的方式。
    这种通过 WSDL identifier 的方式对应的访问 URL 是:
    http://hostname:port/ WSRR /6.2/ PolicyService / WSDL? id =WSDL identifier
    例如: http://localhost:9080/WSRR/6.2/PolicyService/ WSDL?id =http://tonawanda.sr.ibm.com/StockQuoteServiceSample%23wsdl11.service

表 1. 常用的定位 WSDL 元素的 identifier 表达式
WSDL 元素 identifier 表达式(省略了目标命名空间 targetNamespace ) 说明
Definitionswsdl11.definitions()WSDL 根元素
Messagewsdl11.message(message) 括号内的 message 为实际的消息名称,例如 wsdl11.message(GetLastTradePriceInput)
Message/ partwsdl11.messagePart(message/part) 括号内的 messag 与 part 为实际的消息与 part 名称,例如 wsdl11.message(GetLastTradePriceInput/ body)
portTypewsdl11.portType(portType) 括号内的 portType 为实际的端口类型名称,例如 wsdl11. portType (EmbeddedStockQuotePortType)
portType/ operation wsdl11.portTypeOperation(portType/operation) 括号内的 portType 与 operation 为实际的端口类型与操作名称,例如 wsdl11. portTypeOperation (EmbeddedStockQuotePortType/ GetLastTradePrice)
portType/ operation/input wsdl11.portTypeOperation.input(portType/operation) 括号内的 portType 与 operation 为实际的端口类型与操作名称,例如 wsdl11. portTypeOperation.input (EmbeddedStockQuotePortType/ GetLastTradePrice)
portType/ operation/output wsdl11.portTypeOperation.output(portType/operation) 括号内的 portType 与 operation 为实际的端口类型与操作名称,例如 wsdl11. portTypeOperation. output (EmbeddedStockQuotePortType/ GetLastTradePrice)
portType/ operation/fault wsdl11.portTypeOperation.fault(portType/operation/fault) 括号内的 portType 、 operation 及 fault 为实际的端口类型、操作及错误的名称,例如 wsdl11. portTypeOperation. fault (EmbeddedStockQuotePortType/ GetLastTradePrice/PriceFault)
Bindingwsdl11.binding(binding) 括号内的 binding 为实际的绑定名称,例如 wsdl11. binding (EmbeddedStockQuoteSoapBinding)
Binding / operation wsdl11.bindingOperation(binding/operation) 括号内的 binding 为实际的绑定名称,例如 wsdl11. binding (EmbeddedStockQuoteSoapBinding)
Binding / operation/input wsdl11.bindingOperation.input(binding/operation) 括号内的 binding 与 operation 为实际的端口类型与操作名称,例如 wsdl11. bindingOperation.input (EmbeddedStockQuoteSoapBinding/ GetLastTradePrice)
Binding / operation/output wsdl11.bindingOperation.output(binding/operation) 括号内的 binding 与 operation 为实际的端口类型与操作名称,例如 wsdl11. bindingOperation.output (EmbeddedStockQuoteSoapBinding/ GetLastTradePrice)
Binding / operation/fault wsdl11.bindingOperation.fault(binding/operation/fault) 括号内的 binding 、 operation 及 fault 为实际的端口类型、操作及错误的名称,例如 wsdl11. bindingOperation.fault (EmbeddedStockQuoteSoapBinding/ GetLastTradePrice/ PriceFault)
Servicewsdl11.service(service) 括号内的 service 为实际的服务名称,例如 wsdl11. service (StockQuoteServiceSample)
port wsdl11.port(service/port) 括号内的 service 与 port 为实际的服务与端口名称,例如 wsdl11. service (StockQuoteServiceSample/ RMStockQuotePort)

值得注意的一点是,根据 URL 语法规则,原本在 WSDL identifier 值内的“#”符号也同样应编码为%23。

另外,在 WSRR 存储的 WSDL 逻辑对象中, WSDL identifier 并不能唯一定位某一个 WSDL 元素,那么通过 WSDL identifier 方式获取 WSDL 文档内容时,获得的结果就可能并不是你期望的那个文档的内容。





回页首


定义电信业务中的服务策略示例

电信领域里存在着大量的服务策略,其中包括了路由策略、互通策略、具体服务应用策略等等。 Parlay 规范中也对其作出了一些定义,如定义了从网关抽取消息的优先等级。 下面的示例则是描述了运营商和客户之间的一种服务约束,并简化了涉及责任及补偿的内容。基于前面 Web 服务元数据上下文部分的讲述,我们知道 Web 服务策略 WS-Policy 定义了一组基本构造,其他 Web 服务规范能够使用并扩展这些构造以描述广泛的服务需要、首选项和功能。 如下清单 1中定义的服务策略就是基于 WS-Policy 并作出了面向业务的断言扩展。如该服务策略描述所示, PIM 业务定义了密码修改的策略断言。即每天只能最多有3次机会修改密码,并且密码的长度为6位,类型为整数型。


清单 1. 服务策略的定义
				
<?xml version="1.0" encoding="UTF-8"?>
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:pim="http://ibm.com/PIMPasswordChangePolicy" 
wsu:Id="PIMPasswordChangePolicy" 
Name="http://ibm.com/PIMPasswordChangePolicy" 
targetNamespace="http://ibm.com/PIMPasswordChangePolicy"
......>
  <pim:PIMPasswordChangeAssertion>
  <!-- 每天只能最多有3次机会修改密码 -->
    <pim:description>You have only 3 chances to change the password
     for each day.</pim:description>
  <!-- 密码的长度为6位,类型为整数型 -->
    <pim:password length="6" datatype="integer" />
  </pim:PIMPasswordChangeAssertion>
</wsp:Policy>

我们知道, WSRR 产品可以很好地管理 Web 服务元数据,其中包括 Web 服务策略。首先,打开 WSRR 的 Web 界面,将附件的 TelcoPolicy.xml 策略文档(可以从下载清单中得到)上传到 WSRR 中。然后打开该策略文档的内容页面,就可以看到以树状结构的方式列出的策略文档的主要内容。

然后,查看该策略文档的 bsrURI 。每次发布文档都会新产生一个 bsrURI ,这儿假设是657d9e65-561f-4f31.a5b2.a0a404a0b20d 。打开浏览器,在地址栏内输入 http://mypc:9080/WSRR/6.2/PolicyService/Policy?bsrURI=657d9e65-561f-4f31.a5b2.a0a404a0b20d 。 IP 地址和端口号取决于你的机器 IP 和 WSRR 运行时环境。如图 2所示,列出了策略文档的全部内容。


图 2. 获取策略文档全部内容
策略文档的全部内容

最后,你可以通过 policyURI 的方式查看策略文档的内容。因为该策略文档包含了一个策略表达逻辑对象,它的 policyURI 是:

  • http://ibm.com/PIMPasswordChangePolicy

打卡浏览器,在地址栏内输入以下地址:

http://mypc:9080/WSRR/6.2/PolicyService/Policy?uri=http://ibm.com/PIMPasswordChangePolicy 。(记住: IP 地址和端口号取决于你的机器 IP 和 WSRR 运行时环境。),也将会列出与通过 bsrURI 方式获取策略文档全部内容的一样效果。

除了上面已经讲述了的如何获取策略文档内容的方法之外,当然还可以通过程序调用访问 http 资源的方式获取内容。





回页首


策略分发 API 的使用

从前面的上下文我们可以知道, Parlay X 采用 WSDL 的方式对 Parlay API 进行定义。每一个 Parlay X Web 业务都是来自 Parlay API 对电信网络业务能力集的一个抽象,并且将相关的电信网络能力通过 Parlay X 协议的方式提供给开发人员。 因此,接下来我们则通过一个示例详细讲述获取包含策略的 WSDL 文档内容的 API 使用过程。

首先,打开 WSRR 的 Web 界面,将附件的 WSDL 文档 TelcoValueAddedService_StockQuoteSample.wsdl (可以从下载清单中得到)上传到 WSRR 中。然后打开该 WSDL 文档的内容页面,如图 3所示 web 界面以树状结构的方式列出了 WSDL 文档的内容,但没有相关联的策略元素。


图 3. WSDL 文档的内容(不含策略)
WSDL 文档的内容(不含策略)

然后,以外部策略附加方式将附件 SamplePolicy.xml 策略文档包含的策略关联到 WSDL 元素上。如清单 2下代码所示描述了策略表达逻辑对象与附加的主题之间的关系为:

  • 将 policyURI 为 http://tonawanda.sr.ibm.com/ EmbeddedPolicyStockQuoteService#SecureMessagePolicy 的策略表达逻辑对象关联到 WSDL identifier 为 http://tonawanda.sr.ibm.com/StockQuoteServiceSample #wsdl11.service(StockQuoteServiceSample)的名为 StockQuoteServiceSample 的 WSDL 服务元素上。
  • 将 policyURI 为 http://tonawanda.sr.ibm.com/ EmbeddedPolicyStockQuoteService# X509EndpointPolicy 的策略表达逻辑对象关联到 WSDL identifier 为 http://tonawanda.sr.ibm.com/StockQuoteServiceSample # wsdl11.port(StockQuoteServiceSample/RMStockQuotePort)的名为 RMStockQuotePort 位于服务 StockQuoteServiceSample 下的 WSDL 端口元素上。
  • 将 policyURI 为 http://tonawanda.sr.ibm.com/ EmbeddedPolicyStockQuoteService# ReliableMessagingPolicy 的策略表达逻辑对象关联到 WSDL identifier 为 http://tonawanda.sr.ibm.com/StockQuoteServiceSample # wsdl11.port(StockQuoteServiceSample/X509StockQuotePort)的名为 X509StockQuotePort 位于服务 StockQuoteServiceSample 下的 WSDL 端口元素上。

清单 2. 策略表达逻辑对象与附加的主题之间的关系的定义
				
<?xml version="1.0"?>
<wsp:Policy 
  xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
  ......>
  <wsp:PolicyAttachment>
    <wsp:AppliesTo>
      <wsp15:URI>http://tonawanda.sr.ibm.com/StockQuoteServiceSample
      #wsdl11.service(StockQuoteServiceSample)</wsp15:URI>
    </wsp:AppliesTo>
    <wsp:PolicyReference URI="http://tonawanda.sr.ibm.com/
    EmbeddedPolicyStockQuoteService#SecureMessagePolicy" />
  </wsp:PolicyAttachment>
  <wsp:PolicyAttachment>
    <wsp:AppliesTo>
      <wsp15:URI>http://tonawanda.sr.ibm.com/StockQuoteServiceSample
      #wsdl11.port(StockQuoteServiceSample/RMStockQuotePort)</wsp15:URI>
    </wsp:AppliesTo>
    <wsp:PolicyReference URI="http://tonawanda.sr.ibm.com/
    EmbeddedPolicyStockQuoteService#X509EndpointPolicy" />
  </wsp:PolicyAttachment>
  <wsp:PolicyAttachment>
    <wsp:AppliesTo>
      <wsp15:URI>http://tonawanda.sr.ibm.com/StockQuoteServiceSample
      #wsdl11.port(StockQuoteServiceSample/X509StockQuotePort)</wsp15:URI>
    </wsp:AppliesTo>
    <wsp:PolicyReference URI="http://tonawanda.sr.ibm.com/
    EmbeddedPolicyStockQuoteService#ReliableMessagingPolicy" />
  </wsp:PolicyAttachment>
</wsp:Policy>

上述策略文档 AttachmentSample.xml 可以从下载清单中得到,打开 WSRR 的 Web 界面,将其上传到 WSRR 的策略文档库中。

接着,查看该 WSDL 文档的 bsrURI 。每次发布文档都会新产生一个 bsrURI ,这儿假设是76fcb876-cdb9-490e.8246.62bff36246c4。打开浏览器,在地址栏内输入 http://mypc:9080/WSRR/6.2/PolicyService/WSDL?bsrURI= 76fcb876-cdb9-490e.8246.62bff36246c4。(记着 IP 地址和端口号取决于你的机器 IP 和 WSRR 运行时环境。)浏览器中将会列出 WSDL 文档的 WSDL 元素以及附加到该 WSDL 文档包含的所有 WSDL 元素的策略内容。

同获取策略文档内容的方式一样,只要能够支持 Http 请求的程序都可以轻松地获取包含策略的 WSDL 文档内容。下面我们以 Web 2.0 中的异步 Javascript 与 XML ( AJAX )调用程序作为例子讲述如何获取 WSDL 文档内容。

下面的清单 3代码是一个简单的 Ajax Web 客户端的 html 界面程序。其中,函数 createXMLHttpRequest()用于创建 Http 请求实例, 该实例在函数 callServer()中被使用。变量 url 用于存储获取到的 url 地址值,然后打开到 url 的连接,发出请求。函数 updatePage()根据返回的结果值更新 Web 页面。


清单 3. Ajax Web 客户端的 HTML 程序
				
<html>
    <script language="javascript" type="text/javascript">
       var xmlHttp; 
       function createXMLHttpRequest() { 
       /*@cc_on @*/
       /*@if (@_jscript_version >= 5) 
       try { 
           xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
       } catch (e) { 
          try { 
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
          } catch (e2) { 
            xmlHttp = false; 
          } 
       } @end @*/ 
       if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { 
          xmlHttp = new XMLHttpRequest(); 
       } if (!xmlHttp)
          alert("Error initializing XMLHttpRequest!"); 
       } 
      
       function callServer() { 
          createXMLHttpRequest(); 
          var url = document.getElementById("url").value; 
          //打开到 url 的连接
          xmlHttp.open("GET", url, true);
          xmlHttp.onreadystatechange = updatePage;
           //发出请求
           xmlHttp.send(null);         
       }

       function updatePage(){
           if (xmlHttp.readyState == 4)
              if (xmlHttp.status == 200){
                  var response = xmlHttp.responseText;
                   document.getElementById("content").value=xmlHttp.responseText;
              }else if (xmlHttp.status == 404)
                  alert("Request URL does not exist");
              else
                  alert("Error: status code is " + xmlHttp.status);
       }
    </script>
    <form>
       <p>
           URL:
           <input type="text" name="url" id="url" size="100" 
value="http://localhost:9083/WSRR/6.2/PolicyService/WSDL
?bsrURI=481f1348-4fe0-4043.90df.a244c9a2dfda"
              onChange="callServer();" />
       </p>
       <p>
           包含策略的 WSDL 文档内容:
           <textarea rows="20" cols="100" name="content" id="content"></textarea>
       </p>
    </form>
</html>
			

该程序描述了在如图 4所示的 Web 界面中, URL 输入框的值一旦发生改变,包含策略的 WSDL 文档内容将随之改变。


图 4. 运行的 Web 界面
运行的 Web 界面




回页首


结束语

本系列基于电信行业中的实例应用,针对业务模型的生命周期治理展开讨论,本篇是该系列中之三,侧重于深层次探究 WSRR 中的策略分发并以此定义电信业务中的服务策略。系列中的第 1 部分讲述了如何定义 WSRR 中支持的基于本体的业务模型,并以此定制自定义用户 Web 界面,从而更好地展示业务数据。第 2 部分则侧重于如何定义生命周期,并重点讨论如何基于策略实现生命周期的治理,并且通过一个示例讲述如何基于定制的用户界面进行生命周期的治理。

声明:本文仅代表作者个人的观点,与 IBM 公司的立场无关。






回页首


下载

描述名字大小下载方法
电信服务策略文档 TelcoPolicy.xmlTelcoPolicy.xml3 KBHTTP
策略文档 SamplePolicy.xmlSamplePolicy.xml3 KBHTTP
WSDL 文档TelcoValueAddedService_StockQuoteSample.wsdl3 KBHTTP
策略附加文档 AttachmentSample.xmlAttachmentSample.xml2 KBHTTP
关于下载方法的信息


参考资料



作者简介

王夕宁:IBM 中国软件开发实验室 SOA (中国)设计中心的高级软件工程师,目前从事于 SOA Policy 及 SOA Governance 相关的工作,并参与了 WSRR 产品开发及其相关客户项目。他的主要技能和专长包括 SOA、Web 服务、J2EE、业务流程、模型驱动技术以及 Eclipse 开发等领域。可以通过 wangxn@cn.ibm.com 联系他。


薛 亮:IBM 资深软件工程师,工作在 IBM 中国软件开发实验室 - SOA Design Center,从事 SOA Policy 及 SOA Governance 相关的工作,对 J2EE、SOA、WSRR 等相关技术有浓厚兴趣。作者目前主要从事 SOA Policy Toolkit 项目的设计与开发工作。 联系方式:xueliang@cn.ibm.com。


刘昕鹏: IBM专职软件工程师,工作在IBM中国软件开发实验室 - SOA Design Center,从事 SOA Policy 及 SOA Governance 相关的工作,对 J2EE、SOA、MDA/MDD、AOP、语义网等相关技术有浓厚兴趣。作者目前主要负责 SOA Policy Toolkits项目的设计与开发工作,并参与了WSRR V6.2的产品开发。 联系方式:xinpengl@cn.ibm.com。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款