diff --git a/build.xml b/build.xml
index 2bcf82e24..cfd7f3b56 100644
--- a/build.xml
+++ b/build.xml
@@ -278,8 +278,14 @@
+ unless="xalan2.present" />
+
+
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java
index 9a1970d7f..02482eb5f 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java
@@ -63,31 +63,14 @@ import java.io.InputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
-import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileOutputStream;
-import java.lang.reflect.Field;
import java.net.URL;
-import org.apache.xalan.xslt.XSLTProcessorFactory;
-import org.apache.xalan.xslt.XSLTProcessor;
-import org.apache.xalan.xslt.XSLTInputSource;
-import org.apache.xalan.xslt.XSLTResultTarget;
-
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.Source;
-import javax.xml.transform.Result;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.stream.StreamResult;
-
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -242,108 +225,3 @@ public class AggregateTransformer {
}
}
-
-/**
- * Command class that encapsulate specific behavior for each
- * Xalan version. The right executor will be instantiated at
- * runtime via class lookup. For instance, it will check first
- * for Xalan2, then for Xalan1.
- */
-abstract class XalanExecutor {
- /** the transformer caller */
- protected AggregateTransformer caller;
-
- /** set the caller for this object. */
- private final void setCaller(AggregateTransformer caller){
- this.caller = caller;
- }
-
- /** get the appropriate stream based on the format (frames/noframes) */
- protected OutputStream getOutputStream() throws IOException {
- if (caller.FRAMES.equals(caller.format)){
- // dummy output for the framed report
- // it's all done by extension...
- return new ByteArrayOutputStream();
- } else {
- return new FileOutputStream(new File(caller.toDir, "junit-noframes.html"));
- }
- }
-
- /** override to perform transformation */
- abstract void execute() throws Exception;
-
- /**
- * Create a valid Xalan executor. It checks first if Xalan2 is
- * present, if not it checks for xalan1. If none is available, it
- * fails.
- * @param caller object containing the transformation information.
- * @throws BuildException thrown if it could not find a valid xalan
- * executor.
- */
- static XalanExecutor newInstance(AggregateTransformer caller) throws BuildException {
- Class procVersion = null;
- XalanExecutor executor = null;
- try {
- procVersion = Class.forName("org.apache.xalan.processor.XSLProcessorVersion");
- executor = new Xalan2Executor();
- } catch (Exception xalan2missing){
- try {
- procVersion = Class.forName("org.apache.xalan.xslt.XSLProcessorVersion");
- executor = new Xalan1Executor();
- } catch (Exception xalan1missing){
- throw new BuildException("Could not find xalan2 nor xalan1 in the classpath. Check http://xml.apache.org/xalan-j");
- }
- }
- String version = getXalanVersion(procVersion);
- caller.task.log("Using Xalan version: " + version);
- executor.setCaller(caller);
- return executor;
- }
-
- /** pretty useful data (Xalan version information) to display. */
- private static String getXalanVersion(Class procVersion) {
- try {
- Field f = procVersion.getField("S_VERSION");
- return f.get(null).toString();
- } catch (Exception e){
- return "?";
- }
- }
-}
-
-/**
- * Xalan executor via JAXP. Nothing special must exists in the classpath
- * besides of course, a parser, jaxp and xalan.
- */
-class Xalan2Executor extends XalanExecutor {
- void execute() throws Exception {
- TransformerFactory tfactory = TransformerFactory.newInstance();
- String system_id = caller.getStylesheetSystemId();
- Source xsl_src = new StreamSource(system_id);
- Transformer tformer = tfactory.newTransformer(xsl_src);
- Source xml_src = new DOMSource(caller.document);
- OutputStream os = getOutputStream();
- tformer.setParameter("output.dir", caller.toDir.getAbsolutePath());
- Result result = new StreamResult(os);
- tformer.transform(xml_src, result);
- }
-}
-
-/**
- * Xalan 1 executor. It will need a lot of things in the classpath:
- * xerces for the serialization, xalan and bsf for the extension.
- * @todo do everything via reflection to avoid compile problems ?
- */
-class Xalan1Executor extends XalanExecutor {
- void execute() throws Exception {
- XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
- // need to quote otherwise it breaks because of "extra illegal tokens"
- processor.setStylesheetParam("output.dir", "'" + caller.toDir.getAbsolutePath() + "'");
- XSLTInputSource xml_src = new XSLTInputSource(caller.document);
- String system_id = caller.getStylesheetSystemId();
- XSLTInputSource xsl_src = new XSLTInputSource(system_id);
- OutputStream os = getOutputStream();
- XSLTResultTarget target = new XSLTResultTarget(os);
- processor.process( xml_src, xsl_src, target);
- }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan1Executor.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan1Executor.java
new file mode 100644
index 000000000..77f8f07cf
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan1Executor.java
@@ -0,0 +1,80 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Ant", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+package org.apache.tools.ant.taskdefs.optional.junit;
+
+import java.io.OutputStream;
+
+import org.apache.xalan.xslt.XSLTProcessorFactory;
+import org.apache.xalan.xslt.XSLTProcessor;
+import org.apache.xalan.xslt.XSLTInputSource;
+import org.apache.xalan.xslt.XSLTResultTarget;
+
+/**
+ * Xalan 1 executor. It will need a lot of things in the classpath:
+ * xerces for the serialization, xalan and bsf for the extension.
+ * @todo do everything via reflection to avoid compile problems ?
+ */
+public class Xalan1Executor extends XalanExecutor {
+ void execute() throws Exception {
+ XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
+ // need to quote otherwise it breaks because of "extra illegal tokens"
+ processor.setStylesheetParam("output.dir", "'" + caller.toDir.getAbsolutePath() + "'");
+ XSLTInputSource xml_src = new XSLTInputSource(caller.document);
+ String system_id = caller.getStylesheetSystemId();
+ XSLTInputSource xsl_src = new XSLTInputSource(system_id);
+ OutputStream os = getOutputStream();
+ XSLTResultTarget target = new XSLTResultTarget(os);
+ processor.process( xml_src, xsl_src, target);
+ }
+}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan2Executor.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan2Executor.java
new file mode 100644
index 000000000..040e46f68
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan2Executor.java
@@ -0,0 +1,82 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Ant", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+package org.apache.tools.ant.taskdefs.optional.junit;
+
+import java.io.OutputStream;
+
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.Source;
+import javax.xml.transform.Result;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.transform.stream.StreamResult;
+
+/**
+ * Xalan executor via JAXP. Nothing special must exists in the classpath
+ * besides of course, a parser, jaxp and xalan.
+ */
+public class Xalan2Executor extends XalanExecutor {
+ void execute() throws Exception {
+ TransformerFactory tfactory = TransformerFactory.newInstance();
+ String system_id = caller.getStylesheetSystemId();
+ Source xsl_src = new StreamSource(system_id);
+ Transformer tformer = tfactory.newTransformer(xsl_src);
+ Source xml_src = new DOMSource(caller.document);
+ OutputStream os = getOutputStream();
+ tformer.setParameter("output.dir", caller.toDir.getAbsolutePath());
+ Result result = new StreamResult(os);
+ tformer.transform(xml_src, result);
+ }
+}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java
new file mode 100644
index 000000000..da45ba2c1
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java
@@ -0,0 +1,133 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Ant", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * .
+ */
+package org.apache.tools.ant.taskdefs.optional.junit;
+
+import org.apache.tools.ant.BuildException;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
+
+import java.lang.reflect.Field;
+
+/**
+ * Command class that encapsulate specific behavior for each
+ * Xalan version. The right executor will be instantiated at
+ * runtime via class lookup. For instance, it will check first
+ * for Xalan2, then for Xalan1.
+ */
+abstract class XalanExecutor {
+ /** the transformer caller */
+ protected AggregateTransformer caller;
+
+ /** set the caller for this object. */
+ private final void setCaller(AggregateTransformer caller){
+ this.caller = caller;
+ }
+
+ /** get the appropriate stream based on the format (frames/noframes) */
+ protected OutputStream getOutputStream() throws IOException {
+ if (caller.FRAMES.equals(caller.format)){
+ // dummy output for the framed report
+ // it's all done by extension...
+ return new ByteArrayOutputStream();
+ } else {
+ return new FileOutputStream(new File(caller.toDir, "junit-noframes.html"));
+ }
+ }
+
+ /** override to perform transformation */
+ abstract void execute() throws Exception;
+
+ /**
+ * Create a valid Xalan executor. It checks first if Xalan2 is
+ * present, if not it checks for xalan1. If none is available, it
+ * fails.
+ * @param caller object containing the transformation information.
+ * @throws BuildException thrown if it could not find a valid xalan
+ * executor.
+ */
+ static XalanExecutor newInstance(AggregateTransformer caller) throws BuildException {
+ Class procVersion = null;
+ XalanExecutor executor = null;
+ try {
+ procVersion = Class.forName("org.apache.xalan.processor.XSLProcessorVersion");
+ executor = new Xalan2Executor();
+ } catch (Exception xalan2missing){
+ try {
+ procVersion = Class.forName("org.apache.xalan.xslt.XSLProcessorVersion");
+ executor = (XalanExecutor) Class.forName(
+ "org.apache.tools.ant.taskdefs.optional.junit.Xalan1Executor()").newInstance();
+ } catch (Exception xalan1missing){
+ throw new BuildException("Could not find xalan2 nor xalan1 in the classpath. Check http://xml.apache.org/xalan-j");
+ }
+ }
+ String version = getXalanVersion(procVersion);
+ caller.task.log("Using Xalan version: " + version);
+ executor.setCaller(caller);
+ return executor;
+ }
+
+ /** pretty useful data (Xalan version information) to display. */
+ private static String getXalanVersion(Class procVersion) {
+ try {
+ Field f = procVersion.getField("S_VERSION");
+ return f.get(null).toString();
+ } catch (Exception e){
+ return "?";
+ }
+ }
+}