UniObjects для Java: как получить строку ответа при возникновении ошибки в UniCommand.exec()

Я хотел бы иметь возможность определить точную причину UniCommand не удалось завершить использование UniObjects для 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());
}

Пример: когда я выполняю BLAH через telnet на самом сервере UniVerse я получаю:

Verb "BLAH" is not in your VOC.

и когда я выполню LIST BLAH Я получил:

RetrieVe: syntax error.  Unexpected sentence without filename.  Token was "".
          Scanned command was LIST 'BLAH'

Я хотел бы получить эти точные сообщения об ошибках в моей программе, используя UniObjects для Java. Это возможно?

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);
}
Другие вопросы по тегам