diff --git a/src/main/com/mcartoixa/ant/sfdx/ErrorOutputStream.java b/src/main/com/mcartoixa/ant/sfdx/ErrorOutputStream.java index d54c3e1..f922306 100644 --- a/src/main/com/mcartoixa/ant/sfdx/ErrorOutputStream.java +++ b/src/main/com/mcartoixa/ant/sfdx/ErrorOutputStream.java @@ -15,6 +15,7 @@ */ package com.mcartoixa.ant.sfdx; +import java.io.IOException; import org.apache.tools.ant.Project; import org.apache.tools.ant.util.LineOrientedOutputStream; @@ -32,16 +33,25 @@ public class ErrorOutputStream extends LineOrientedOutputStream { public ErrorOutputStream(final ISfdxOutputHandler handler) { super(); this.handler = handler; + this.errorMessage = ""; } @Override protected void processLine(final String string) { if (string != null && !string.isEmpty()) { - // Proper messages will be generated from the JSON response (if there is one!) handler.log(string, Project.MSG_VERBOSE); + this.errorMessage = this.errorMessage.concat(string + "\n"); } } - private final transient ISfdxOutputHandler handler; + @Override + public void close() throws IOException { + if (!this.errorMessage.isEmpty()) { + handler.setErrorMessage(this.errorMessage); + } + super.close(); + } + private final transient ISfdxOutputHandler handler; + private transient String errorMessage; } diff --git a/src/main/com/mcartoixa/ant/sfdx/ISfdxOutputHandler.java b/src/main/com/mcartoixa/ant/sfdx/ISfdxOutputHandler.java index 4549adf..f6fde1d 100644 --- a/src/main/com/mcartoixa/ant/sfdx/ISfdxOutputHandler.java +++ b/src/main/com/mcartoixa/ant/sfdx/ISfdxOutputHandler.java @@ -22,5 +22,6 @@ public interface ISfdxOutputHandler { void log(String message, int level); - + + void setErrorMessage(String message); } diff --git a/src/main/com/mcartoixa/ant/sfdx/SfdxTask.java b/src/main/com/mcartoixa/ant/sfdx/SfdxTask.java index 5f496b3..139dfc4 100644 --- a/src/main/com/mcartoixa/ant/sfdx/SfdxTask.java +++ b/src/main/com/mcartoixa/ant/sfdx/SfdxTask.java @@ -63,6 +63,13 @@ public void parse(final JSONObject json) { } } + @Override + public void setErrorMessage(final String message) { + if (SfdxTask.this.getFailOnError() && !SfdxTask.this.hasErrorMessage()) { + SfdxTask.this.setErrorMessage(message.trim()); + } + } + @SuppressWarnings({"PMD.DataflowAnomalyAnalysis", "PMD.NPathComplexity"}) protected void doParse(final JSONObject json) { final int status = json.optInt("status");