Processando chamadas bem-sucedidas Quando uma
chamada é bem-sucedida, a mensagem resultante é propagada para o terminal
Out. Dentro da árvore há um elemento de nível superior denominado InterfaceName.OperationNameResponse.
Sob este tipo há o tipo de retorno da operação (denominado _return)
e cada parâmetro inout ou out. Os parâmetros de entrada não são propagados
porque eles não mudam.
Uma
mistura de parâmetros in, inout e out
A seguir há um exemplo de arquivo IDL:
interface
ExampleOne {
string exampleOneOperation(in string inparam, out string outparam, inout string inoutparam);
}
Você recebe os parâmetros
outparam e
inoutparam no
elemento de nível superior
ExampleOne.exampleOneOperationResponse.
A seguir
há um XML de exemplo:
<ExampleOne.exampleOneOperationResponse>
<_return>The operation return value</_return>
<outparam>value from corba app</outparam>
</inoutparam>your value changed by the corba app<inoutparam>
</ExampleOne.exampleOneOperationResponse>
Parâmetros out
e inout
A seguir há um exemplo de arquivo IDL:
interface
ExampleTwo {
string exampleTwoOperation(out string outparam, inout string inoutparam);
}
A remoção do parâmetro in não faz diferença
na mensagem que é propagada de um nó
CORBARequest porque
os parâmetros in não são propagados.
A seguir há um XML de exemplo:
<ExampleTwo.exampleTwoOperationResponse>
<_return>The operation return value</_return>
<outparam>value from corba app</outparam>
</inoutparam>your value changed by the corba app<inoutparam>
</ExampleTwo.exampleTwoOperationResponse>
Apenas parâmetros in
ou nenhum parâmetro
Se a operação não contiver
nenhum parâmetro, ou apenas parâmetros in, você receberá o valor _return
no elemento de nível superior.
A seguir há um exemplo de arquivo IDL:
interface
ExampleThree {
string exampleThreeOperation(in string inparam);
}
A seguir há um XML de exemplo:
<ExampleThree.exampleThreeOperationResponse>
<_return>The operation return value</_return>
</ExampleThree.exampleThreeOperationResponse>
Nenhum
tipo de retorno (nulo) e nenhum parâmetro inout ou out
Se a
operação que está sendo chamada não tiver tipo de retorno (nulo) e nenhum parâmetro
inout ou out, nenhum valor será retornado do aplicativo CORBA
para colocar na árvore. Neste caso, apenas o elemento de nível superior é criado.
A seguir há um exemplo de arquivo IDL:
interface
ExampleFour {
void exampleFourOperation(in string inparam);
}
A seguir há um XML de exemplo:
<ExampleFour.exampleFourOperationResponse>
</ExampleFour.exampleFourOperationResponse>
Processando exceções definidas pelo usuário e exceções
do sistema CORBA Quando ocorre uma exceção definida pelo usuário CORBA
ou uma exceção do sistema CORBA, uma mensagem é propagada para o
terminal Error. As exceções de sistema CORBA possuem uma forma padrão e
são parecidas com isto:
No arquivo IDL:
exception SystemException { // descritivo de erro
unsigned long; // mais detalhes sobre o erro CompletionStatus; // sim, não, talvez }
Na
árvore:
<SystemException>
<minor>10</minor>
<completed>maybe</completed>
</SystemException>
O elemento de nível superior é o nome
da exceção do sistema CORBA que é emitida. A estrutura de uma exceção
definida pelo usuário é baseada no IDL para a exceção. A seguir há um exemplo:
No arquivo IDL:
exception BadRecord {
string why;
};
Na mensagem:
<BadRecord>
<why>reason text</why>
</BadRecord>
Como você pode ver neste exemplo, a
estrutura da mensagem é baseada na exceção e não é qualificada
pela operação que estava sendo chamada.