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);
}