Rational DOORS 的 OSLC DXL 服务

IBM® Rational® DOORS® 中,OSLC 需求管理 (RM) 规范 V2 的实施包括可用于通过 HTTP 协议运行 Rational DOORS DXL 脚本的服务。
Rational 使用基于生命周期协作开放服务 (OSLC) 的技术来提供与 Rational 和非 Rational 工具的集成。Rational DOORS 通过可用于跨 HTTP 运行 Rational DOORS DXL 脚本的 OSLC DXL 服务对标准 OSLC功能进行了补充。该服务基于 DXL 脚本库的概念。使用服务的过程如下所示:
  1. 用户查找所需的 OSLC DXL 脚本。
  2. 用户调用脚本在 OSLC 调用中封装所需参数。如果为 DXL 服务 URI 提交 GET 请求,那么响应将包含有关脚本的帮助信息(由作者提供)。如果为 DXL 服务 URI 提交包含可选参数的 PUT 请求,那么将调用服务。
  3. 脚本在互操作服务器上运行。
  4. 结果将发布。

Rational DOORS 管理员控制和定制的脚本,而管理员可决定将在服务接口中提供哪些 DXL 脚本。 管理员可锁定调用某些可能被认为是潜在的安全风险(例如“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 (x86)\IBM\Rational\DOORS\9.5\lib\dxl\addins\services
  3. 打开 Rational DOORS 客户机并以管理员身份登录。
  4. 要安装 DXL,请打开 DXL 窗口并输入以下 DXL 代码。将创建名为 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" 
    }
  5. 调用服务。URI 如该示例所示:http://servername:portnumber/dwa/rm/dxl/helloWorld
  6. acceptcontent-type 头设置为以下条目:application/rdf+xml
  7. 确保请求内容如以下代码所示:
    <?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>
  8. 要将参数传递给服务,请使用 <doors:arguments> 元素。在代表所需参数的元素文本中输入字符串。 DXL 服务会将该字符串转换为服务 DXL 函数需要的参数。较早的示例显示了单个参数 English,该参数被传递到 getHelloString 函数。如果 DXL 函数需要两个参数,那么请求将如以下示例所示:
    <doors:Arguments>
    <doors:arguments>English,French</doors:arguments>
    </doors:Arguments>
    接收 DXL 服务会将逗号分隔列表划分为单独的 EnglishFrench 字符串。
  9. 如果您具有不属于字符串类型的参数,必须使用 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 脚本从字符串中抽取值,然后将这些值转换为期望的各个参数。


反馈