级别: 高级 Sefa Sevtekin, 资深信息工程师, IBM
2009 年 9 月 11 日 本文带您浏览了,通过定制汇集来将 IBM Rational Software Architect UML 扩展至 WSDL 转换的技巧。
UML 到 WSDL 转换产生的产品的结构,取决于 UML 源模型的结构。IBM® Rational® Software Architect UML 到 WSDL 转换,使用汇集来产生网络服务描述语言(WSDL)文件。在这里描述了特定的步骤。
前提条件
为了遵循这些步骤,您需要理解 Java™编程模型, Eclipse 插件结构和开发,以及 IBM Rational Software Architect 转换管理概念。本文中描述的步骤使用 IBM Rational Software Architect Version 7 来得到执行。
Rational Software Architect UML 到 WSDL 的转换使用汇集,来产生网络服务描述语言(WSDL)文件。定制汇集有一些主要的步骤:
- 使用项目交换功能,来导入带有预定义 UML 元素的已存在 UML 项目。运行 UML 到 WSDL 转换,以生成 WSDL 文件。通过使用项目交换机理来保存和导出项目。稍后您将会使用项目来测试转换和比较生成的 WSDL 文件。
- 创建一个插件项目以创建转换扩展。
- 添加一系列需要的插件附件。这些插件定义了您正在使用的扩展点,并提供您需要以激发扩展的 APIs。
- 在插件描述器中定义扩展点,它识别了您想要扩展并在此中做出贡献的转换。
- 每一次转换遇到您注册的元素类型时,就会提供 Java 执行的规则。
- 通过激发一次运行时工作台并执行转换以测试转换。您将需要导入您早期导出的 UML 项目,并运行 UML 到 WSDL 转换,以观察您所创建的转换扩展的行为和效果。
在您运行转换时,还会执行您在转换扩展中定义的规则。结果,它会更改 WSDL 汇集到 SOAP 汇集。
导入项目交换
在这项任务中,您将会导入 UML 项目并运行 UML 到 WSDL 转换。那么您就保存并导出 UML 项目。
- 启动 Rational Software Architect。
- 切换至 Modeling 视角。
- 选择 File > Import。
- 在 Import 对话框中,将“
type filter text” 替换为 project。然后选择 Other 下面的 Project
Interchange。
图 1. 选择项目交换作为导入类型
- 点击 Next。
- 点击 Browse,然后导航至
TestUML1.zip文件(查看本产品的下载段落)。点击 Open。
- 点击 Select All。
- 点击 Finish。
- 花一些时间浏览导入项目中的 UML Model。
图 2. 导入的项目
- 双击预配置的WSDLconfig1.tc转换配置。花一些时间以浏览 Transformation Configuration;浏览 Source and Target 和 Common 项。注意 Visual Merge 选项为 Merge Options 而选择。
- 右击 WSDLconfig1.tc 转换配置和 Transform > UML to WSDL
.
- 点击 OK 以合并转换输出(见于图 3)。
图 3. 合并配置的显示
- 点击 OK 以保存(见于图 4)。
图 4. 保存您选择替换的目标资源
- 打开
TestUML 项目下 TestUML 文件夹中的 Component1.wsdl 文件。检查 WSDL 汇集段落,这会在列表 1 中以粗体字显示。
列表 1. WSDL 绑定部分
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://test.sample/Component1/"
xmlns:wsdl_1="http://test.sample/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
name="Component1"
targetNamespace="http://test.sample/Component1/">
<wsdl:import location="test.sample.wsdl" namespace="http://test.sample/"/>
<wsdl:binding name="Interface1Binding" type="wsdl_1:Interface1">
<wsdl:operation name="Operation1">
<wsdl:input/>
<wsdl:output/>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="interface1">
<wsdl:port binding="tns:Interface1Binding" name="Interface1Port"/>
</wsdl:service>
</wsdl:definitions>
|
- 您可以使用这个项目,以在下一个任务中测试您的插件项目。通过选择 File > Export 导出您的项目。
- 在 Import 对话框中,将“
type filter text”替换为 project。
- 然后选择 Other 下面的 Project Interchange,如图 5 所示。
图 5. 选择项目交换作为输出的类型
- 点击 Next。
- 点击 Browse 然后切换至您选择的文件夹,并输入
TestUML2.zip 文件的名字。
- 点击 Save 后点击 Finish。
- 右击项目上的
TestUML 并选择 Close Project。
创建一个插件项目
现在您可以创建一个插件项目,以扩展包含 UML 到 WSDL 转换,这样它就能生成 WSDL 文件。
- 选择 File > New > Project。
- 在 New 对话框中,将“
type filter text”替换为 plug-in,然后选择 Plug-in Project,如图 6 所示。
图 6. 创建一个插件项目
ALT:Plug-in Project 向导视图
- 点击 Next
- 命名项目为
com.ibm.uml2.wsdl.binding.extension, 并让剩下的设置保持默认值(见于图 7)。
图 7. 创建一个插件项目
- 将默认的 Plug-in Name 区域更改为
UML-to-WSDL Transformation Extension,并将剩下的默认设置保持不变(见于图 8)。
图 8. 创建一个插件项目
- 点击 Next。
- 在下一个视图中(图 9),取消 Create a plug-in using one of the templates 选项的选择,并点击 Finish。
图 9. 创建一个插件项目
- 在 Open Associated Perspective? 对话框中(如图 10 所示),点击 Yes 以切换至 Plug-in Development 视角。
图 10. 切换至 Plug-in Development 视图
添加所需的插件
- 如果它还没有打开,那么就打开
plugin.xml 文件,切换至 Dependencies 项,并点击 Add。
- 输入
com.ibm.xtools.transform.core, 在列表中选择第一个选项,然后点击 OK。
图 11. 添加附件
- 重复前面的步骤,以添加以下的附近(如图 12 所示):
- com.ibm.xtools.transform.uml2.wsdl
- org.eclipse.xsd
- org.eclipse.wst.wsdl
- org.wsdl4j
图 12. 添加附件
- 切换至 Extensions
项然后点击添加 com.ibm.xtools.transform.core.transformationExtensions。
图 13. 添加附件
- 保存
plugin.xml 文件。
定义扩展点
尽管您可以通过使用相对项来完成剩下的更高,在 plugin.xml 文件的原始代码中完成这一步会更快。
- 切换至
plugin.xml 项。
- 在扩展点,添加包含列表 2 中所示信息的以下元素(同样见于图 14)。
列表 2. 向扩展点添加一个元素
<TransformationExtension
version="7.0.0"
name="TEST-BINDING binding extension"
enabled="true"
targetTransformation="com.ibm.xtools.transform.uml2.wsdl.internal.Uml2WsdlTransform.RS"
id="com.ibm.xtools.transform.uml2.wsdl.extension.TEST-BINDING">
</TransformationExtension>
|
图 14. 添加至扩展点的元素
- 在
TransformationExtension元素中,创建一个包含了列表 3 和图 15 中所示信息的属性。
列表 3. 添加的属性
<Property
id="com.ibm.xtools.transform.uml2.wsdl.bindings.TEST-BINDING"
metatype="string"
name="com.ibm.xtools.transform.uml2.wsdl.bindings"
readonly="true"
value="TEST-BINDING"/>
|
图 15. 添加的属性
- 在您于前面步骤中创建的属性里,定义以下的规则为列表 4 和图 16 中所示的那样。
列表 4. 定义规则
<RuleDefinition
class="com.ibm.uml2.wsdl.binding.extension.TestBindingAddressExtensionRule"
id="TestBindingAddressExtensionRule"
name="TestBindingAddressExtensionRule"/>
<RuleDefinition
class="com.ibm.uml2.wsdl.binding.extension.TestBindingBindingExtensionRule"
id="TestBindingBindingExtensionRule"
name="TestBindingBindingExtensionRule"/>
<RuleDefinition
class="com.ibm.uml2.wsdl.binding.extension.TestBindingBindingOperationExtensionRule"
id="TestBindingBindingOperationExtensionRule"
name="TestBindingBindingOperationExtensionRule"/>
|
图 16. 定义的规则
- 在
TransformationExtension元素中,创建如列表 5 和图 17 所示的 ExtendTransform 元素。
列表 5. ExtendTransform 元素
<ExtendTransform targetTransform="AddressExtensionTransform">
<AddRule id="TestBindingAddressExtensionRule"/>
</ExtendTransform>
<ExtendTransform targetTransform="BindingExtensionTransform">
<AddRule id="TestBindingBindingExtensionRule"/>
</ExtendTransform>
<ExtendTransform targetTransform="BindingOperationExtensionTransform">
<AddRule id="TestBindingBindingOperationExtensionRule"/>
</ExtendTransform>
|
图 17. 配置 plugin.xml文件代码
- 点击 File > Save。
为转换规则提供 Java 执行
- 对于您每一个您在
plugin.xml 中定义的规则,创建您在前面任务中创建插件中相对应的 Java 类。您创建的 Java 类必须扩展相对应的抽象类,并执行相对应的抽象方法:
-
com.ibm.uml2.wsdl.binding.extension.TestBindingAddressExtensionRule 类必须扩展com.ibm.xtools.transform.uml2.wsdl.util.AbstractAddressExtensionRule
-
com.ibm.uml2.wsdl.binding.extension.TestBindingBindingExtensionRule 类必须扩展com.ibm.xtools.transform.uml2.wsdl.util.AbstractBindingExtensionRule
-
com.ibm.uml2.wsdl.binding.extension.TestBindingBindingOperationExtensionRule 类必须扩展com.ibm.xtools.transform.uml2.wsdl.util.AbstractBindingOperationExtensionRule
- 右击
src\com.ibm.uml2.wsdl.binding.extension 文件夹并选择 Import
- 在 Import 对话框中,将
type filter text 替换为 file。然后选择 General 之下的 File System under,如图 18 所示。
图 18. 选择 File System 作为导入类型
- 点击 Next
- 浏览 Java™ 文件的位置(见于 Java 文件的下载区),并只选择图 19 所示的 Java 文件。
图 19. 导入规则执行
- 点击 Finish 并花一些时间来检查导入的 Java 文件(见于图 20)。
图 20. 导入规则执行
测试转换扩展
在这一项任务中,您将会学到在一个单独的 Eclipse 工作台中测试转换插件。您将会导入您用于 UML 到 WSDL 转换的测试 UML 模型。然后您就能够比较转换结果了。
- 选择
com.ibm.uml2.wsdl.binding.extension 插件项目,并从工具栏中选择 Run > Debug。
- 双击 Run Configuration 对话框中的 Eclipse Application,然后将配置的名字更改为
Transformation Extension Launch。将剩下的设置保持默认值。
- 点击 Debug(如图 21 所示)。这会启动一个新的 Eclipse 工作台。
图 21. 设置启动配置
- 在 Welcome 界面上,点击带有黄色标记的箭头图标
以回到工作台。
- 切换至 Modeling 视角。
- 选择 File > Import。
- 在 Import 对话框中,将“
type filter text”替换为 project。然后选择 Other 下的 Project
Interchange,如图 22 所示。
图 22. 选择 Project Interchange 作为导入类型
- 点击 Next。
- 点击 Browse 然后导航至 TestUML2.zip 文件的位置,然后选择您在前面任务中导出的
TestUML2.zip 文件(如果您在任务 1 中还没有导出文件的话,那么您可以从下载区下载它)。点击 Open。
- 点击 Select All。
- 点击 Finish。
- 双击
WSDLconfig1.tc 转化配置以打开它。
- 在 Project Explorer 中右击
WSDLconfig1.tc 并选择 Transform > UML to WSDL。
- 在 Transformation Merge 对话框中,花一些时间来浏览规范转化结果与扩展转化结果之间的更改。注意汇集会更改为
SOAP-Document-Literal,而且 SOAP 地址也会被添加(见于图 23)。
图 23. 比较转换结果
- 点击对话框中间第一个箭头图标:Copy All from Left to Right。
图 24. 接受变更
- 点击 OK 两次以保存更改。
图 25. 保存更改
现在,您的 WSDL 地址已经生成并可以编辑了。
致谢
特别感谢 Dmitry Gorelik, Lee Ackerman,Aaron Allsbrook,和 Jim Conallen 对本文所做的支持和贡献 。
下载 | 描述 | 名字 | 大小 | 下载方法 |
|---|
| 示例项目 | extend_uml_wsdl_inputs.zip | 9 KB | HTTP |
|---|
参考资料 学习
获得产品和技术
讨论
关于作者  | 
|  | Sefa Sevtekin 是 IBM Rational 软件服务部的一名高级解决方案架构师。他一直与客户一起使用 IBM Rational 工具实施模型驱动架构(MDA)。他已经交付过各种各样的国际研讨会、讨论会、技术文章、客户培训和咨询服务。 |
对本文的评价
|