Rational DOORS 的 OSLC DXL 服务

可使用 OSLC DXL 服务来通过 HTTP 或 HTTPS 通信协议运行 IBM® Rational® DOORS® DXL 脚本。
注: 示例包含了使用 OSLC DXL 服务实用程序来安装 DXL 文件的步骤。该实用程序在 Rational DOORS V9.6.1.3 和更高版本中提供。要在没有该实用程序的情况下安装 DXL 文件,请参阅先前发行版的文档

Rational 使用基于生命周期协作开放式服务 (OSLC) 的技术来改进与 Rational 应用程序和其他第三方工具的集成。 OSLC 服务发现是可扩展的。因为 Rational 和第三方开发人员可添加已实施标准中当前不可用的服务,或者添加那些被认为因太特殊而不能包含在当前或未来版本中的服务。

OSLC 需求管理 (RM) 规范 V2 的 Rational DOORS 实施包括可用于通过 HTTP 或 HTTPS 协议来运行 Rational DOORS DXL 脚本的 API。该 API 通过使您能安全地访问和控制 Rational DOORS 数据来向集成添加额外值。它基于 DXL 脚本库的概念。管理员可使用“OSLC DXL 服务”用户界面轻松地添加、编辑和除去 DXL 脚本。

这些步骤描述了使用 OSLC DXL 服务的过程:
  1. 查找 OSLC DXL 脚本。
  2. 调用脚本在 OSLC 调用中封装所需参数。如果为 DXL 服务 URI 提交 GET 请求,那么响应将包含有关脚本的帮助信息(由作者提供)。如果为 DXL 服务 URI 提交包含可选参数的 PUT 请求,那么将运行服务。
  3. 脚本在互操作服务器上运行。
  4. 结果将发布。

脚本由 Rational DOORS 管理员控制和定制,而且管理员可以决定哪些脚本在服务接口中可用。管理员可锁定调用某些可能被认为是潜在的安全风险(例如“runDXL”)的函数的能力。不支持某些 DXL(如用户界面窗口小部件)。

因为服务发现受 OAuth 的保护,因此如果您使用 OSLC DXL 服务,必须通过输入用户名和密码进行认证。

这些步骤是使用 OSLC DXL 服务的典型步骤:
  1. 创建 DXL 脚本。
  2. 作为服务来安装 DXL 脚本。
  3. 通过服务发现找到服务。
  4. 调用服务。
  5. 从响应抽取返回值。

示例

  1. 创建名为 helloWorld.inc 的 DXL 文件,其中包含以下代码:
    void getHelloString(string language)
    {
    		string hello = null
    
    		if ("French" == language)
    	{
    				hello = "Bonjour le monde"
    	} 
    		else if ("Finnish" == language)
    	{
    				hello = "Hei maailma"
    	} 
    		else if ("Latin" == language)
    	{
    				hello = "Ave mundi"
    	}
    	else  
    	{
    				hello = "Hello world"
    	}
    
    	setDxlServiceResult hello
        
    		print hello "\n"
    }
  2. helloWorld.inc 文件复制到 /addins/services 目录中。该目录的缺省位置为 C:\Program Files \IBM\Rational\DOORS\9.version\lib\dxl\addins\services
  3. 打开 Rational DOORS 客户机并以管理员身份登录。
  4. 要安装 DXL, 单击文件 > OSLC > DXL 服务
  5. 在“OSLC DXL 服务”窗口中,单击添加
  6. 在“添加 OSLC DXL 服务”窗口中,输入以下值:
    • 名称helloWorld
    • 描述Hello world in several languages
    • DXL#include <addins/services/helloWorld.inc>
    • 函数名getHelloString
    将创建名为 helloWorld 的服务。
    OSLCDXLService os = null
    string err = null
    
    string dxlCode = "#include <addins/services/helloWorld.inc>\n"  
    err = addOrUpdateOSLCDXLService("helloWorld", "Hello world in several languages", dxlCode, "getHelloString")  
    if (!null err) 
    { 
    	print err 
    }  
    else  
    { 
    		print "Installed Service\n" 
    }
  7. 调用服务。URI 如该示例所示:http://servername:portnumber/dwa/rm/dxl/helloWorld
  8. acceptcontent-type 头设置为以下条目:application/rdf+xml
  9. 确保请求内容如以下代码所示:
    <?xml version="1.0" encoding="UTF-8"?>
    <rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:doors="http://jazz.net/doors/xmlns/prod/jazz/doors/2.0/">
      <doors:Arguments>
      <doors:arguments>English</doors:arguments>
      </doors:Arguments>
    </rdf:RDF>
  10. 要将参数传递给服务,请使用 <doors:arguments> 元素。在元素文本中输入表示必需参数的字符串。DXL 服务会将该字符串转换为服务 DXL 函数需要的参数。较早的示例显示了单个参数 English,该参数被传递到 getHelloString 函数。如果 DXL 函数需要两个参数,那么请求将如以下示例所示:
    <doors:Arguments>
    <doors:arguments>English,French</doors:arguments>
    </doors:Arguments>
    接收 DXL 服务会将逗号分隔列表划分为单独的 EnglishFrench 字符串。
  11. 如果您具有不属于字符串类型的参数,必须使用 DXL 将它们转换为相应的类型。例如,如果参数是整数,可使用 intOf 操作将从逗号分隔列表抽取的字符串转换为 int 类型值。然后,可将该值传递给方法。
    响应内容如以下代码所示:
    <?xml version="1.0" encoding="UTF-8"?>
    <rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:doors="http://jazz.net/doors/xmlns/prod/jazz/doors/2.0/">
      <doors:DxlServiceResult rdf:about="http://my-desktop:8080/dwa/rm/dxl/helloWorld>
      <doors:result>Hello world</doors:result>
      </doors:DxlServiceResult>
    </rdf:RDF>

服务不执行任何数据编组。将参数指定为单个字符串。DXL 脚本会首先从字符串解析和抽取值,然后将它们转换为期望的各个参数。

Rational DOORS 客户机安装中包含样本文件。样本文件 hierarchy.dxl 显示如何使用 OSLC DXL 服务来获取有关模块层次结构的信息。

反馈