快捷搜索:

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

本文中的 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 个不合视图

在遵照本文中阐述的步骤的同时,您为 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 中的 UML 图还展示了用于安然绑定的类,用于操作策略主题的支持标记声明,和用于消息策略主题的保护声明。TransportBinding、SymmetricBinding,和 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. 建模情况

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

图 4. 从 WSDL 和 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()

self.namenameSpaceBase + pNamenameSpaceBase + pNametype_namespacenameSpaceBase + pName

type_namespace

%>

}

/奸淫奸淫奸淫*

* wsdl Types

奸淫奸淫奸淫*/

uml.Package::wsdlTypes () {

property pName = self.name.toLower()

nameSpaceBase + pName

type_namespace http://www.w3.org/2000/10/XMLSchema">%>

self.ownedMember->forEach(c:uml.Class | c.getStereotype()=

"Entity") {

class.wsdlTypeMapping()

}

%>

}

/奸淫奸淫奸淫*

* wsdl footer

奸淫奸淫奸淫*/

uml.Package::wsdlFooter () {

%>

}

/*

* Wsdl PortType

*/

uml.Interface::wsdlPortType () {

property portTypeName = self.name + "_PortType"

<%

/*

* Wsdl Bindings

*/

uml.Interface::wsdlBindings() {

self.name + "_Binding"self.name

+ "_PortType"

http://schemas.xmlsoap.org/soap/http"/>%>

self.ownedOperation->forEach(o:uml.Operation) {

o.bindingOperation()

}

%>

}

/*

* portTypeOperation

*/

uml.Operation::portTypeOperation () {

……

}

/*

* Binding Operation

*/

uml.Operation::bindingOperation () {

……

}

/奸淫*

** wsdlService

奸淫*/

uml.Interface::wsdlService () {

self.name

self.name + "_Port"self.name

+ "_Binding"

hostname + self.name

%>

}

/奸淫**

** wsdlMessages

奸淫奸淫/

uml.Interface::wsdlMessages () {

self.ownedOperation->forEach(o:uml.Operation) {

o.wsdlMessage()

}

}

/奸淫奸淫*

* wsdl Message

奸淫奸淫**/

uml.Operation::wsdlMessage () {

if (self.ownedParameter.size() > 0) {

self.name %>

self.ownedParameter->forEach(p:uml.Parameter) {

p.name%>

}

%>

}

您可能还会对下面的文章感兴趣: