From 2ff3cabba21b53eaa726e1387752da378e55fbdc Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Sun, 5 Jun 2011 16:15:43 -0700 Subject: [PATCH] Parsing can happen in the forked Maven process. Support remoting. --- .../java/hudson/tasks/junit/SuiteResult.java | 2 +- .../java/hudson/tasks/junit/TestResult.java | 2 ++ .../hudson/util/io/ParserConfigurator.java | 26 ++++++++++++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/hudson/tasks/junit/SuiteResult.java b/core/src/main/java/hudson/tasks/junit/SuiteResult.java index 067d4e6999..06761acc97 100644 --- a/core/src/main/java/hudson/tasks/junit/SuiteResult.java +++ b/core/src/main/java/hudson/tasks/junit/SuiteResult.java @@ -102,7 +102,7 @@ public final class SuiteResult implements Serializable { * This method returns a collection, as a single XML may have multiple <testsuite> * elements wrapped into the top-level <testsuites>. */ - static List parse(File xmlReport, boolean keepLongStdio) throws DocumentException, IOException { + static List parse(File xmlReport, boolean keepLongStdio) throws DocumentException, IOException, InterruptedException { List r = new ArrayList(); // parse into DOM diff --git a/core/src/main/java/hudson/tasks/junit/TestResult.java b/core/src/main/java/hudson/tasks/junit/TestResult.java index 44e3122294..43f6c98738 100644 --- a/core/src/main/java/hudson/tasks/junit/TestResult.java +++ b/core/src/main/java/hudson/tasks/junit/TestResult.java @@ -199,6 +199,8 @@ public final class TestResult extends MetaTabulatedResult { try { for (SuiteResult suiteResult : SuiteResult.parse(reportFile, keepLongStdio)) add(suiteResult); + } catch (InterruptedException e) { + throw new IOException2("Failed to read "+reportFile,e); } catch (RuntimeException e) { throw new IOException2("Failed to read "+reportFile,e); } catch (DocumentException e) { diff --git a/core/src/main/java/hudson/util/io/ParserConfigurator.java b/core/src/main/java/hudson/util/io/ParserConfigurator.java index c2bae27673..97907a8937 100644 --- a/core/src/main/java/hudson/util/io/ParserConfigurator.java +++ b/core/src/main/java/hudson/util/io/ParserConfigurator.java @@ -26,8 +26,16 @@ package hudson.util.io; import hudson.ExtensionList; import hudson.ExtensionPoint; import hudson.model.Hudson; +import hudson.remoting.Callable; +import hudson.remoting.Channel; import org.dom4j.io.SAXReader; +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + /** * Configures XML parsers to be used for various XML parsing activities inside Jenkins. * @@ -45,7 +53,7 @@ import org.dom4j.io.SAXReader; * @author Kohsuke Kawaguchi * @since 1.416 */ -public abstract class ParserConfigurator implements ExtensionPoint { +public abstract class ParserConfigurator implements ExtensionPoint, Serializable { /** * Configures the given {@link SAXReader} * @@ -62,8 +70,20 @@ public abstract class ParserConfigurator implements ExtensionPoint { return Hudson.getInstance().getExtensionList(ParserConfigurator.class); } - public static void applyConfiguration(SAXReader reader, Object context) { - for (ParserConfigurator pc : all()) + public static void applyConfiguration(SAXReader reader, Object context) throws IOException, InterruptedException { + Collection all = Collections.emptyList(); + + if (Hudson.getInstance()==null) { + Channel ch = Channel.current(); + if (ch!=null) + all = ch.call(new Callable, IOException>() { + public Collection call() throws IOException { + return new ArrayList(all()); + } + }); + } else + all = all(); + for (ParserConfigurator pc : all) pc.configure(reader,context); } } -- GitLab