内容


使用 Rational Software Architect 建模并生成 Web 服务元数据

功能方面-WSDL 和非功能方面-WS-Policy

Comments

本文中的 UML 元数据上下文

统一建模语言(Unified Modeling Language,UML)的引入是期待已久的了,因为它包含了符合服务规范的特定设计要素。在 UML 模型中,定制的 UML 概要文件是包含了令 UML 元模型符合特定领域的原型和约束条件的包。定制的概要文件在不变更基本元模型的情况下扩展 UML。

在面向服务的环境中,服务策略对互操作性有根本的影响。对于服务提供者来说,当执行这些 Web 服务策略时,与潜在的请求者进行通信是很重要的。服务策略成为服务描述的关键部分,用非功能的服务行为陈述增加了基本的 WSDL 功能描述。同样,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)。

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

图 1 表示的模型用于获取对面向服务的解决方案的设计和架构来说很普遍的概念集合。

如图所示,这些概念可以分为五类(要了解详细信息,请参见参考资料中 Object Management Group. UML Profile and Metamodel for Services RFP,2006 年的链接):

  • Message(消息):涉及服务间流动的消息的信息模型。
  • Service(服务): 服务的规范,是结构化且行为的约定。
  • Composition(组成):将服务组成聚合的服务,以及服务如何分发的方式。
  • Collaboration(协作): 服务交互的动态方式,这可以看作是编排视图。
  • Policy(策略):策略影响上面所有四个视图,它可以看作是其中包含的要素的一组约束条件和陈述。
图 1. 面向服务的模型的5 个不同视图
图 1. 5 个视图中的面向服务的模型的图

在遵循本文中阐述的步骤的同时,您为 WSDL 的建模定制了一个概要文件。概要文件提供功能的元数据,并将原型应用于 UML 要素,以指定 WS-Policy,典型的是 WS-Security Policy。您使用 UML 建模和 IBM® Rational® Software Modeler 为标准化的 Web 服务元数据建模,其中包括功能的和非功能的方面。虽然 UML-to-XSD 转换是用 Rational Software Modeler 交付的模型到模型和模型到文本的转换之一,但是本文将专注于建模并生成功能的 WSDL 方面和非功能的 WS-Policy 方面。

基于 UML 为 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 服务描述的标准:服务做什么,应该如何使用它们,以及它们在哪里。

WS-Policy 框架包含两个规范:WS-Policy 和 WS-PolicyAttachment。

  • WS-Policy 规范描述了表达策略选择及将它们组合为领域声明集合的语法。WS-Policy 规范还描述了将多个应用于通用主题的策略以及策略的交叉部分合并,确定兼容性的基本机制。
  • WS-PolicyAttachment 规范描述了如何将策略与特定的主题相关联。它给出了如何在 WSDL 和 UDDI 环境中应用的标准的描述(Universal Description、Discovery 和 Integration),并且它提供了通过范围的表达将策略与任意的主题相关联的可扩展的机制。

随着 Web 服务的繁荣,以及模型驱动架构(Model Driven Architecture,MDA)的兴旺,我们必须考虑软件和解决方案的开发中的建模的不断增长的重要性和效用。Object Management Group (OMG) 提出的 MDA,是模型驱动的框架,它是用于计划用独立于平台的模型(Platform-Independent Model,PIM)对业务逻辑建模,随后通过使用不同模型之间的转换指导将这些模型转换为具体平台的模型(Platform-Specific Model,PSM)的软件开发。MDA 的主要优点是能够将一个 PIM 转换为多个 PSM,最终的系统将部署在每个平台和技术中,并且由相应的 PSM 自动生成针对那些平台的系统。

由于 Web 服务是软件组件,Web 服务的开发必须利用 MDA 的优点。要在 Web 服务的开发中应用 MDA 原则,就必须考虑建模过程。根据 MDA 原则,该建模活动应该导致自动的代码生成。如果我们想要从 Web 服务所部署的平台上进行抽象,那么应该生成的代码就是包含标准格式的 Web 服务描述的 WSDL 文档。

WSDL 和 WS-Policy 的 UML 概要文件

WSDL 建模起源于 MDA 方法,它可以分为两个阶段:

  • 一个视图表示 WSDL 的抽象部分,包括:
    • Definitions
    • Service
    • PortTypes
    • Messages
    • Parts
    • PartTypes
  • 另一个视图完成了 WSDL 的绑定部分,包括这些已建模的要素:
    • Service
    • Ports
    • Bindings

这些是 Web 服务元数据建模中的重要概念。UML 和可扩展的 UML 概要文件可以用于为 Web 服务建模。举例来说,Web 服务操作(WSDL 操作)可以描述为 UML 操作,Web 服务结构请求组(WSDL 端口类型)可以描述为 UML 接口和类,用 UML 类图描述为 XML schema,并且用 UML 类图描述为 Web 服务数据结构。

WS-PolicyAttachment 定义了各种策略的附着点。本文用 WS-Security Policy 的实例来示范如何为 Web 服务的非功能元数据建模。图 2 是 WSDL 和部分 WS-SecurityPolicy 建模的 UML 概要文件图。它示范了概要文件的实际细节,并且利用扩展符号展示了带有元类的原型。

图 2. 应用于 WSDL 和 WS-SecurityPolicy 建模的 UML 概要文件
图 2. 应用于 WSDL 和 WS-SecurityPolicy 建模的 UML 概要文件
图 2. 应用于 WSDL 和 WS-SecurityPolicy 建模的 UML 概要文件

图 2 中的 UML 图还展示了用于安全绑定的类,用于操作策略主题的支持标记声明,和用于消息策略主题的保护声明。TransportBindingSymmetricBinding,和 AsymmetricBinding 类反应了 WS-SecurityPolicy 规范中描述的安全绑定。这三个具体的绑定都与抽象的 TokenAssertion 类有一个和多个关联。WS-SecurityPolicy 规范中描述了标记声明类的完整集合。

操作策略主题的支持标记声明定义了与支持标记需求相关的四个属性。这些可能是由安全绑定引用的:

[Supporting Tokens][Signed Supporting Tokens][Endorsing Supporting Tokens] [Signed Endorsing Supporting Tokens]

消息策略主题的保护声明用于确定正在保护什么,以及所提供的保护级别。这些包含以下声明:

[SignedParts Assertion][SignedElements Assertion][EncryptedParts Assertion][EncryptedElements Assertion][RequiredElements Assertion]。

基于 Rational Software Architect 的插件开发

本部分向您展示了如何基于 Rational Software Architect 开发新的插件特性。它扩展了 com.ibm.xtools.presentation.paletteProviders 扩展点,通过从选项板中拖拽来进行功能建模,如图 3 所示。它还扩展了 com.ibm.xtools.presentation.semanticProviders 扩展点来提供建模的语义。举例来说,当您从选项板中拖拽 Service 要素时,将会生成新的 UML2 Package 要素,并且应用于 WSDL 文件的 Service 原型。如果您需要创建描述消息的要素,那么您将从选项板上拖拽 Entity 要素,然后将生成 UML2 类要素,并应用于 Entity 原型。

图 3. 建模环境
图 3. 建模环境的屏幕显示
图 3. 建模环境的屏幕显示

图 4 显示了从附着于 WS-Security Policy 的 WSDL 文档转变为 UML 模型。图的左边显示了 WSDL 文档的 UML 模型的相应视图。为了看起来清晰,将 WSDL 文档进行了简化,留下一些要素和属性,并且去掉了所有 XML 命名空间信息。右边显示了一些为具体的 WSDL 文档要素建模的 UML 要素。箭头将这些要素与 WSDL 模型结构中的相应表示链接起来。

图 4. 从 WSDL 和 WS-SecurityPolicy 到 UML 模型的转换
图 4. 从 WS-SecurityPolicy 到 UML 模型的转换
图 4. 从 WS-SecurityPolicy 到 UML 模型的转换

生成 WSDL 和 WS-Policy 工件

本文用基于征召的规范的语言来指定 UML 和 WSDL(带有 WS-Policy)之间的转换规则。“Object Management Group. Request for Proposal: MOF Model to Text Transformation RFP,2004 年”(参考资料中列出)是适应该 RFP 的 Softeam/SINTEF 修订建议。

UML2 WSDL(带有 WS-Policy)转换规则

代码清单 1 展示了 UML2 WSDL(带有 WS-Policy)转换规则的细节。您可以找到 Object Management Group 中建立的具体的语法和表达式。Request for Proposal:MOF Model to Text Transformation RFP,2004 年(参见参考资料)。

// main
uml.Model::main () {
self.ownedMember->forEach(p:uml.Package)
p.interfacePackage()
}
// interfacePackage
uml.Package::interfacePackage () {
self.wsdlHeader()
self.wsdlTypes()
self.ownedMember->forEach(i:uml.Interface) {
i.wsdlMessages()
i.wsdlPortType()
i.wsdlBindings()
i.wsdlService()
}
self.wsdlFooter()
}

/**********
* wsdl Header
**********/
uml.Package::wsdlHeader () {
property pName = self.name.toLower()
<%<?xml version="1.0"?>
<definitions name="%> self.name <%"
targetNamespace=
"%> nameSpaceBase + pName <%.wsdl"
xmlns:tns=
"%> nameSpaceBase + pName <%.wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:%> type_namespace <%=
"%> nameSpaceBase + pName <%/%>
type_namespace <%/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
%>
}

/**********
* wsdl Types
**********/
uml.Package::wsdlTypes () {
property pName = self.name.toLower()
<%
<types>
<xsd:schema targetNamespace=
"%> nameSpaceBase + pName <%/%>
type_namespace <%/"
xmlns:xsd=
"http://www.w3.org/2000/10/XMLSchema">%>
self.ownedMember->forEach(c:uml.Class | c.getStereotype()=
"Entity") {
class.wsdlTypeMapping()
}
<%
</xsd:schema>
</types>
%>
}

/**********
* wsdl footer
**********/
uml.Package::wsdlFooter () {
<%
</definitions>
%>
}

/*
* Wsdl PortType
*/
uml.Interface::wsdlPortType () {
property portTypeName = self.name + "_PortType"
<%
/*
* Wsdl Bindings 
*/
uml.Interface::wsdlBindings() {
<%
<binding name="%> self.name + "_Binding" <%" type=
"tns:%> self.name
+ "_PortType" <%">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>%>
self.ownedOperation->forEach(o:uml.Operation) {
o.bindingOperation()
}
<%
</binding>
%>
}

/*
* portTypeOperation
*/
uml.Operation::portTypeOperation () {
……
}

/*
* Binding Operation
*/
uml.Operation::bindingOperation () {
……
}

/****
** wsdlService
****/
uml.Interface::wsdlService () {
<%
<service name="%> self.name <%">
<port name="%> self.name + "_Port" <%" binding=
"%> self.name
+ "_Binding" <%">
<soap:address location=
"%> hostname + self.name <%"/>
</port>
</service>
%>
}

/*****
** wsdlMessages
******/
uml.Interface::wsdlMessages () {
self.ownedOperation->forEach(o:uml.Operation) {
o.wsdlMessage()
}
}

/*******
* wsdl Message
********/
uml.Operation::wsdlMessage () {
if (self.ownedParameter.size() > 0) {
<%
<message name=
"%> self.name <%_Request">%>
self.ownedParameter->forEach(p:uml.Parameter) {
<%
<part element="%> p.getType() <%" name=
"%> p.name <%"/> %>
}
<%
</message>%>
}

基于 MTF 的插件开发

根据这些转换原则,我们扩展了 Rational Software Architect Xtools 转换扩展来实现 UML to WSDL(带有 WS-Policy)转换特性。Rational Software Architect Model Transformation Framework(MTF)提供了您可以使用的扩展点来扩充 UML 转换的能力。

作为其中一个扩展点,com.ibm.xtools.transform.core.transformationProviders 简化了转换服务(com.ibm.xtools.transform.core.services.TransformationService)提供者的配置。转换服务使 Xtools 客户端注册模型转换。您可以使用这些转换将数据从一个模型转换为另一个。一般,源模型是基于 UML 的,并且应用了具体转换的概要文件。目标模型一般是代码模型,例如 Java 和 XML。您可以选择任一转换来应用于您的源模型。

清单 2 提供了 UML2 WSDL(带有 WS-Policy)转换提供者扩展的源代码,您可以用它来应用 UML to WSDL(带有 WS-Policy)转换:

清单 2. UML2WSDL(带有 WS-Policy)转换提供者扩展
<extension
	point=
	"com.ibm.xtools.transform.core.transformationProviders">
      <TransformationProvider
            class=
            "uml2wsdl.UML2WSDLTransformationProvider">
         <Priority
               name="Highest">
         </Priority>
         <Transformation
               groupPath="UML2WSDLTrans"
               profiles="WSDLProfile"
               targetModelType="Resource"
               transformGUI="uml2wsdl.TransformGUI"
               description="UML to WSDL"
               name="UML to WSDL"
               author="wangxn"
               id="uml2wsdl.transformation.uml2wsdl.root"
               version="1.0.0"
               sourceModelType="UML2">
            <Property
                  name="Overwrite output WSDL files"
                  value="false"
                  id="overwriteOutputFiles">
            </Property>
         </Transformation>
      </TransformationProvider>
   </extension>

创建新的插件项目

创建新的插件项目。

  1. 在 File 菜单中,选择 New > Plug-in Project
  2. 在结果对话框中,指定项目名和基本属性。
  3. 图 5 展示了预定义的模板。从可用的模板中选择 Plug-in with Transformation,然后单击 Finish。这样就生成了标准的插件项目,并带有用于定义新转换的转换提供者。
图 5. 创建新的插件项目
图 5. 创建新的插件项目的屏幕视图
图 5. 创建新的插件项目的屏幕视图
  1. 展开com.ibm.xtools.transform.core.transformationProviders 扩展点,并添加转换提供者:uml2wsdl.UML2WSDLTransforamtionProvider图 6 展示了该扩展及实现类。
图 6. 创建 UML2WSDLTransformationProvider
图 6. 创建 UML2WSDLTransformationProvider 视图
图 6. 创建 UML2WSDLTransformationProvider 视图

提示:
您可以应用水平方向的和垂直方向的布局,单击 X 图标的屏幕抓取Y 图标的屏幕抓取 图标。

  1. 当您创建了转换提供者之后,您就可以添加新的转换了,如图 7 所示。它将 UML2 指定为源模型类型,将 Resource 指定为目标模型类型。对于该扩展要素更详细地情况来说,您还可以指定 UML 概要文件应用于 UML 模型。另外,如果您需要重新设计转换 GUI,您将指定一个新的 TransformGUI 类。
图 7. UML to WSDL 转换细节
图 7. UML to WSDL 转换细节的显示
图 7. UML to WSDL 转换细节的显示
  1. 您需要做的另一个具体的实现包括插件实现类、实用类,和关于 SetupTarget 规则、Package 规则 SaveOutput 规则,和模板类(例如生成 WSDL Port Type 部分的 WSDLPortTypeTemplate)的转换规则。下图 8 显示了全部的实现类及其依赖。
图 8. 类图
图 8. 类图
图 8. 类图

WS-I 场景示例

Web Services Interoperability Organization(WS-I)已经开发了供应链管理业务场景,用以示范 WS-I Basic Profile 1.0 的特性。以下文档中介绍了 WS-I 示例业务场景和技术解决方案概要:

  • WS-I Supply Chain Management Use Cases 1.0
  • WS-I Usage Scenarios 1.0
  • WS-I Supply Chain Management Technical Architecture 1.0

要了解完全的细节,请参见 Web Services Interoperability Organization Web 站点(参考资料中列出了)。我们用该业务场景来示范 UML to WSDL(带有 WS-Policy)Transformation 特性。我们提供的业务场景示例表现出基于 WS-I SCM 示例场景的简化的 SCM 解决方案。在图 9 中,供应链管理应用程序向零售系统请求帮助客户在线购买电子商品。零售商仓库中拿走库存,仓库从厂商那里补充库存。

图 9. 高层次的 WS-I 场景
图 9. 高层次的 WS-I 场景图
图 9. 高层次的 WS-I 场景图

首先,我们使用基于 UML 的建模特性(前面基于 UML 为 Web 服务元数据建模中介绍的)为该场景的 Web 服务的所有功能方面(WSDL)和非功能方面(安全、WS-Security 策略)建模。图 10 展示了由 UML 建模的所有这些服务的元数据结构,其中包含了四个服务。

图 10. 这些 Web 服务的基于 UML 的建模
图 10. 展示了 Web 服务的基于 UML 的建模
图 10. 展示了 Web 服务的基于 UML 的建模

图 11 描述了应用于 Retailer Service Interface 的原型,其中包括 WS-Security Policy 的 TransportBinding 声明。

图 11. 应用于 Retailer Service Interface 的原型
图 11. 应用于 Retailer Service Interface 的原型
图 11. 应用于 Retailer Service Interface 的原型

要运行 UML to WSDL 转换:

  • 在 Model Explorer 中右键单击应用于 Interface Model 原型的模型,单击 Transform > Run Transformation > UML to WSDL (with WS-Policy),如图 12 所示。
  • 当您选择一个转换时,您会看到一个对话框,您可以在此输入附加的转换选项。
  • 第一次运行转换,确保将当前工作区中的一个 Eclipse 项目设置为转换的目标。
图 12. 应用于 Retailer Service Interface 的原型
图 12. 应用于 Retailer Service Interface 的原型
图 12. 应用于 Retailer Service Interface 的原型

此处用到的模型的已生成的 WSDL 工件包括四个相关的 WSDL 文件:

  • SCMService.wsdl
  • RetailerService.wsdl
  • WarehouseService.wsdl
  • ManufacturerService.wsdl

我们选择较复杂的 RetailService WSDL,作为示范 UML to WSDL(带有 WS-Policy)转换能力的实例。所生成的 RetailerService.wsdl 文件如清单 3 的代码所示。

清单 3. 生成的带有 WS-Policy 的 RetailerService WSDL 文件
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="RetailerService"
	targetNamespace="http://www.ibm.com/RetailerService.wsdl" 
	xmlns:tns="http://www.ibm.com/RetailerService.wsdl"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:types="http://www.ibm.com/RetailerService/types/" 
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"
	xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
	<types>
		<xsd:schema targetNamespace=
		"http://www.ibm.com/RetailerService/types/">				
			<xsd:element name="CatalogItem">
				<xsd:complexType>
					<xsd:all>	
						<xsd:element name="name" 
						type="xsd:string"/>	
						<xsd:element name="description" 
						type="xsd:string"/>	
						<xsd:element name="productNumber" 
						type="xsd:integer"/>	
						<xsd:element name="category" 
						type="xsd:string"/>	
						<xsd:element name="brand" 
						type="xsd:string"/>	
						<xsd:element name="price" 
						type="xsd:integer"/>				
					</xsd:all>
				</xsd:complexType>
			</xsd:element>					
			<xsd:element name="Order">
				<xsd:complexType>
					<xsd:all>	
						<xsd:element name="productNumber" 
						type="xsd:integer"/>	
						<xsd:element name="quantity" 
						type="xsd:integer"/>	
						<xsd:element name="price" 
						type="xsd:integer"/>				
					</xsd:all>
				</xsd:complexType>
			</xsd:element>					
			<xsd:element name="Customer">
				<xsd:complexType>
					<xsd:all>	
						<xsd:element name="country" 
						type="xsd:string"/>	
						<xsd:element name="zip" 
						type="xsd:string"/>	
						<xsd:element name="state" 
						type="xsd:string"/>	
						<xsd:element name="city" 
						type="xsd:string"/>	
						<xsd:element name="street2" 
						type="xsd:string"/>	
						<xsd:element name="street1" 
						type="xsd:string"/>	
						<xsd:element name="name" 
						type="xsd:string"/>	
						<xsd:element name="custnbr" 
						type="xsd:string"/>				
					</xsd:all>
				</xsd:complexType>
			</xsd:element>					
			<xsd:element name="OrderResponse">
				<xsd:complexType>
					<xsd:all>	
						<xsd:element name="comment" 
						type="xsd:string"/>	
						<xsd:element name="price" 
						type="xsd:integer"/>	
						<xsd:element name="quantity" 
						type="xsd:integer"/>	
						<xsd:element name="productNumber" 
						type="xsd:integer"/>			
					</xsd:all>
				</xsd:complexType>
			</xsd:element>
		</xsd:schema>
     </types>
	<message name="Retailer_getCatalog_Response">
		<part element="types:CatalogItem" name="response"/>
	</message>
	<message name="Retailer_submitOrder_Request">
		<part element="types:Customer" name="customer"/>
		<part element="types:Order" name="order"/>
	</message>
	<message name="Retailer_submitOrder_Response">
		<part element="types:OrderResponse" name="response"/>
	</message>
	<portType name="Retailer_PortType">		
		<operation name="getCatalog">
			<output message="tns:Retailer_getCatalog_Response"/>	
		</operation>		
		<operation name="submitOrder" 
		parameterOrder="customer order ">
			<input message="tns:Retailer_submitOrder_Request"/>
			<output message="tns:Retailer_submitOrder_Response"/>	
		</operation>	
	</portType>
	<binding name="Retailer_Binding" 
	type="tns:Retailer_PortType">
		<soap:binding style="document" 
		transport="http://schemas.xmlsoap.org/soap/http"/>
			<wsp:Policy xmlns:wsp=
			"http://schemas.xmlsoap.org/ws/2004/09/policy">
				<wsp:PolicyReference URI=
				"#uuid14cb490c-010a-e5e2-b853-f25c1590aec1" />
			</wsp:Policy>		
			<operation name="getCatalog">
			<soap:operation soapAction="http://www.ibm.com/getCatalog" 
			style="document"/>
			<input>	
				<soap:body use="literal"/>
			</input>
			<output>
				<soap:body parts="response" use="literal"/>
			</output>
		</operation>	
		<operation name="submitOrder">
			<soap:operation soapAction="http://www.ibm.com/submitOrder" 
			style="document"/>
			<input>	
				<soap:body  parts="customer order " use="literal"/>
			</input>
			<output>
				<soap:body parts="response" use="literal"/>
			</output>
		</operation>
	</binding>
	<service name="Retailer">
		<port name="Retailer_Port" binding="tns:Retailer_Binding">
			<soap:address location="http://localhostRetailer"/>
		</port>
	</service>
	<wsp:UsingPolicy Required="true" />
	<wsp:Policy Id="#uuid14cb490c-010a-e5e2-b853-f25c1590aec1">
		<wsp:ExactlyOne>
			<wsp:All>
				<!-- The following describes the Syntax of TransportBinding Assertion.  -->
				<!-- Before you use this assertion, you should polish it by yourself. -->
				<!-- Begin -->
				<sp:TransportBinding ... >
					<wsp:Policy>
					<sp:TransportToken ... >
					<wsp:Policy> ... </wsp:Policy>
					...
					</sp:TransportToken>
					<sp:AlgorithmSuite ... > ... </sp:AlgorithmSuite>
					<sp:Layout ... > ... </sp:Layout> ?
					<sp:IncludeTimestamp ... /> ?
					...
					</wsp:Policy>
					...
					</sp:TransportBinding>
				<!-- End -->
			</wsp:All>
		</wsp:ExactlyOne>
	</wsp:Policy>
</definitions>

以后的文章

本文介绍了用 UML 为标准化的 Web 服务元数据建模的方法,其中包含了功能的和非功能的方面。像引言中阐述的,面向服务的模型中有五个不同的视图。本文介绍了三个视图(Message、 Service 和 Policy)。后来的文章将介绍其他两个视图及它们的组合。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational, SOA and web services
ArticleID=256720
ArticleTitle=使用 Rational Software Architect 建模并生成 Web 服务元数据
publish-date=09122007