2013-10-02 9 views
0

사용자에게 알리기 위해 UniCommand이 UniObjects for Java를 사용하여 완료하지 못한 정확한 이유를 확인할 수 있기를 원합니다. 이상적인 조건에서 예상대로 작동하는 다음 코드가 있지만 command이 유효한 명령이 아니면 uniCommand.response()은 빈 String을 반환합니다. 명령을 실행할 수없는 이유를 정확히 알고 싶습니다. uniCommand.getSystemReturnCode()을 사용하려고했지만 명령이 성공적으로 완료되지 않았고 정보가 충분하지 않은 경우 항상 -1을 반환합니다. 무엇이 잘못되었는지 정확히 어떻게 알 수 있습니까?UniObjects for Java : UniCommand.exec()에서 오류가 발생했을 때의 응답 문자열

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

예 :

Verb "BLAH" is not in your VOC. 

을 내가 LIST BLAH을 실행할 때 내가 얻을 : 나는 우주 서버 자체에 텔넷을 통해 BLAH을 실행하면 내가 얻을

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

내가 좋아하는 것 UniObjects for Java를 사용하여 프로그램에서 정확한 오류 메시지를 얻으려면. 그게 가능하니?

+0

코드가 오류 메시지 응답을 반환해야하는 것 같습니다. 명령이 성공하면 응답이 검색됩니다 (EX : LIST <데이터베이스의 실제 파일 이름>)? 또는 빈 문자열을 반환하는 것입니까? – webthaumaturge

+0

동의합니다. 오류 메시지가 반환되어야하는 것 같습니다. 명령이 성공하면 예상대로 DB 응답을 리턴합니다. – Guy

답변

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); 
} 
관련 문제