我希望能够确定UniCommand
无法使用UniObjects for Java完成的确切原因,以便告诉用户。我有以下代码在理想条件下的行为符合预期,但如果command
不是有效命令,uniCommand.response()
将返回空String
。我想知道为什么命令无法执行。我尝试使用uniCommand.getSystemReturnCode()
,但如果命令没有成功完成并且信息不足,它总是返回-1
。我如何确切地知道出了什么问题?
UniCommand uniCommand = uniSession.command();
uniCommand.setCommand(command);
uniCommand.exec();
int status = uniCommand.status();
//int sysRet = uniCommand.getSystemReturnCode();
if (status == UniObjectsTokens.UVS_COMPLETE) {
output(uniCommand.response());
}
一个例子:
当我在UniVerse服务器上通过telnet执行BLAH
时,我得到:
Verb "BLAH" is not in your VOC.
当我执行LIST BLAH
时,我得到:
RetrieVe: syntax error. Unexpected sentence without filename. Token was "".
Scanned command was LIST 'BLAH'
我想使用UniObjects for Java在我的程序中获取那些确切的错误消息。这可能吗?
答案 0 :(得分:1)
我遇到了同样的问题,看起来似乎是uniobjects库的限制。处理它的一种方法是将命令包装在子例程中。
SUBROUTINE RUN.COMMAND(COMMAND,RESPONSE)
EXECUTE COMMAND CAPTURING RESPONSE
END
然后使用UniSubroutine对象来调用它。
String command = "LIST BLAH";
UniSubroutine sub = uniSession.subroutine("RUN.COMMAND", 2);
sub.setArg(0, command);
sub.call();
UniDynArray response = new UniDynArray(sub.getArg(1));
for (int i = 0; i < response.dcount(); i++) {
String line = response.extract(i).toString();
System.out.println(line);
}