No IBM® Rational DOORS,
a implementação da versão 2 da especificação OSLC Requirements Management (RM) inclui
um serviço que pode ser usado para executar scripts DXL do
Rational DOORS
usando protocolo HTTP.
O Rational usa tecnologia baseada
em Open Services for Lifecycle Collaboration (OSLC) para fornecer integração com as
ferramentas Rational e não Rational. O
Rational DOORS
complementa os recursos OSLC padrão com um serviço OSLC DXL que pode ser usado para
executar scripts DXL do
Rational DOORS
por HTTP. O serviço é baseado no conceito de uma biblioteca de script DXL. O processo
para usar o serviço é descrito a seguir:
- O usuário consulta o script OSLC DXL necessário.
- O usuário chama o script para criar o pacote dos parâmetros necessários na chamada OSLC. Se você enviar uma solicitação GET para o URI do serviço DXL, a resposta conterá informações da ajuda sobre o script, conforme fornecido pelo autor. Se
você enviar uma solicitação PUT com parâmetros opcionais para o URI do serviço DXL, o
serviço será chamado.
- O script é executado em um Interoperation Server.
- Os resultados são postados.
Os scripts que são controlados e customizados pelo administrador do
Rational DOORS,
que pode decidir quais scripts DXL são expostos em toda a interface de serviço.
O administrador pode bloquear a capacidade de chamar determinadas funções que poderiam
ser consideradas um risco de segurança potencial, como "runDXL".
Determinados DXL, como widgets de interface com o usuário, nunca serão
suportados.
Como a descoberta de serviço é protegida por OAuth, se você usar o
serviço OSLC DXL, deverá autenticar-se digitando seu nome de usuário e senha.
As
etapas típicas para usar o serviço OSLC DXL são descritas a seguir:
- Criar um script DXL.
- Instalar o script DXL como um serviço.
- Localizar o serviço por meio da descoberta de serviço.
- Chamar o serviço.
- Extrair o valor de retorno da resposta.
Exemplo
- Criar um arquivo DXL chamado helloWorld.inc que contenha este
código:
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"
}
- Copie o arquivo helloWorld.inc no diretório /addins/services. O local padrão deste diretório é C:\Program Files
(x86)\IBM\Rational\DOORS\9.version\lib\dxl\addins\services.
- Abra um cliente
Rational DOORS
e efetue login como administrador.
- Para instalar o DXL, abra uma janela DXL e insira o seguinte código DXL. Um serviço
chamado helloWorld é criado.
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"
}
- Chamar o serviço. O URI é como este exemplo:
http://servername:portnumber/dwa/rm/dxl/helloWorld
- Configure os cabeçalhos accept e content-type para esta entrada: application/rdf+xml
- Certifique-se de que o conteúdo da solicitação seja como este código:
<?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>
- Para passar argumentos ao serviço, use o elemento
<doors:arguments>.
Insira uma sequência no texto do elemento
que representa os argumentos necessários.
O serviço DXL transforma essa sequência nos
argumentos requeridos pela função DXL de serviços. O exemplo mais fácil mostra um único
parâmetro, English, que é passado à função
getHelloString. Se uma função DXL esperar dois parâmetros, a
solicitação será semelhante a este exemplo:
<doors:Arguments>
<doors:arguments>English,French</doors:arguments>
</doors:Arguments>
O serviço DXL de recebimento divide a lista separada por vírgula em duas
sequências English e French separadas.
- Se você tiver argumentos que não são do tipo sequência, deverá convertê-los no tipo
apropriado usando DXL. Por exemplo, se um argumento for um número inteiro, será possível
usar a operação intOf para converter a sequência que foi extraída da
lista separada por vírgula em um valor do tipo int. Em seguida, será possível passar o
valor no método.
O conteúdo da resposta é semelhante a este código:
<?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>
O serviço não executa nenhuma serialização. Os argumentos são especificados em um formato de sequência, a partir do qual o script DXL extrai valores e, em seguida, converte-os nos parâmetros individuais esperados.