В IBM® Rational DOORS
реализация спецификации OSLC
Requirements
Management (RM) версии 2 содержит службу, которую можно
использовать для запуска сценариев DXL
Rational DOORS
с помощью протокола HTTP.
Rational использует
технологию на основе Open Services for Lifecycle Collaboration (OSLC)
для интеграции с инструментами
Rational и других
компаний.
Rational DOORS
дополняет стандартные возможности OSLC за счет поддержки службы DXL
OSLC, позволяющей запускать сценарии DXL
Rational DOORS
по протоколу HTTP. Служба построена по принципу библиотеки сценариев DXL. Процесс применения службы выглядит следующим образом:
- Пользователь выполняет поиск необходимого сценария OSLC DXL.
- Пользователь вызывает сценарий, чтобы упаковать
обязательные параметры, в вызове OSLC. Если вы отправляете запрос GET на получение URI службы DXL,
то ответ содержит справочную информацию о сценарии, которую предоставил
автор. Если передается запрос PUT с необязательными параметрами на
получение URI службы DXL, то вызывается служба.
- Сценарий выполняется на сервере взаимодействия.
- Результаты возвращаются.
Сценарии управляются и настраиваются администратором
Rational DOORS,
который определяет, какие
сценарии DXL будут предоставляться через интерфейс служб.
Администратор может запретить вызов определенных функций,
которые могут представлять риск для безопасности, например "runDXL".
Отдельные DXL, например виджеты
пользовательского интерфейса, вообще не поддерживаются.
Поскольку обнаружение служб защищено протоколом OAuth, для
работы со службой DXL OSLC необходимо пройти идентификацию,
указав имя пользователя и пароль.
Обычная процедура применения службы DXL OSLC выглядит следующим
образом:
- Создайте сценарий DXL.
- Установите сценарий DXL как службу.
- Найдите службу в каталоге служб.
- Вызовите службу.
- Получите из ответа возвращаемое значение.
Пример
- Создайте файл DXL helloWorld.inc,
содержащий следующий код:
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"
}
- Скопируйте файл helloWorld.inc
в каталог /addins/services.
По умолчанию
этот каталог имеет такое расположение: C:\Program Files (x86)\IBM\Rational\DOORS\9.5\lib\dxl\addins\services.
- Откройте клиент
Rational DOORS
и войдите в систему от имени администратора.
- Для того чтобы установить 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"
}
- Вызовите службу. URI аналогичен следующему примеру:
http://servername:portnumber/dwa/rm/dxl/helloWorld
- В заголовках accept и content-type укажите
следующую запись: application/rdf+xml
- Содержимое запроса должно выглядеть следующим образом:
<?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>
- Для передачи аргументов службе применяется элемент
<doors:arguments>.
Введите строку, описывающую обязательные аргументы, в
тексте
элемента.
Служба DXL преобразует строку в аргументы, необходимые
для работы служб DXL. В предыдущем примере показан один параметр
English, который передается функции
getHelloString. Если функция DXL ожидает два параметра, то запрос выглядит
следующим образом:
<doors:Arguments>
<doors:arguments>English,French</doors:arguments>
</doors:Arguments>
Принимающая служба DXL разбивает разделенный запятыми
список в отдельные строки: English и
French.
- Нестроковые аргументы необходимо преобразовать в
соответствующие типы с помощью DXL. Например, если аргумент является целым числом, то с помощью
операции intOf можно преобразовать строку,
извлеченную из разделенного запятыми списка в целое число. Затем значение можно передать методу.
Содержимое ответа:
<?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 извлекает значения и преобразует их в отдельные
параметры.