diff --git a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/SshCommandClient.java b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/SshCommandClient.java index 78c54aee6951bc7ed666003d1033988e68cf4963..b4a097ef177fff3d668f87cfceffc33d952fafad 100644 --- a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/SshCommandClient.java +++ b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/SshCommandClient.java @@ -49,11 +49,17 @@ public class SshCommandClient extends AbstractBaseSshClient { channelExec.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + BufferedReader errReader = new BufferedReader(new InputStreamReader( + channelExec.getErrStream())); String line; while ((line = reader.readLine()) != null) { result.add(line); } + List<String> errors = new LinkedList<>(); + while ((line = errReader.readLine()) != null) { + errors.add(line); + } int exitStatus = channelExec.getExitStatus(); channelExec.disconnect(); @@ -62,7 +68,8 @@ public class SshCommandClient extends AbstractBaseSshClient { log.debug("Done, but exit status not set!"); } else if (exitStatus > 0) { - log.debug("Done, but with error!"); + log.debug("Done, but with error! "); + throw new SshExecuteCommandException(exitStatus, result, errors); } else { log.debug("Done!"); diff --git a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/SshExecuteCommandException.java b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/SshExecuteCommandException.java new file mode 100644 index 0000000000000000000000000000000000000000..052ec9d956919268f8ccbd8f8a020ae666063848 --- /dev/null +++ b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/SshExecuteCommandException.java @@ -0,0 +1,36 @@ + +package cz.it4i.fiji.scpclient; + +import com.jcraft.jsch.JSchException; + +import java.util.List; + +public class SshExecuteCommandException extends JSchException { + + private int exitStatus; + private List<String> stdout; + private List<String> stderr; + + public SshExecuteCommandException(int exitStatus, List<String> stdout, + List<String> stderr) + { + super("exitStatus: " + exitStatus + ", error output: " + String.join("\n", + stderr)); + this.exitStatus = exitStatus; + this.stdout = stdout; + this.stderr = stderr; + } + + public int getExitStatus() { + return exitStatus; + } + + public List<String> getStdout() { + return stdout; + } + + public List<String> getStderr() { + return stderr; + } + +}