【问题标题】:UniObjects for Java: How to get response String when error occurred in UniCommand.exec()UniObjects for Java:在 UniCommand.exec() 中发生错误时如何获取响应字符串
【发布时间】:2013-10-02 20:20:34
【问题描述】:

我希望能够确定 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 获得这些确切的错误消息。这可能吗?

【问题讨论】:

  • 您的代码似乎应该返回错误消息响应。命令成功时会检索响应(例如:LIST )?还是这也返回一个空白字符串?
  • 我同意,它似乎应该返回错误消息。当命令成功时,它会按预期返回 DB 响应。

标签: java unidata universe uniobjects


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 2018-12-30
    • 2017-06-25
    • 1970-01-01
    • 2015-10-18
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多