diff --git a/src/etc/testcases/taskdefs/optional/xml/books.xml b/src/etc/testcases/taskdefs/optional/xml/books.xml
new file mode 100644
index 000000000..1bfac41ea
--- /dev/null
+++ b/src/etc/testcases/taskdefs/optional/xml/books.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/optional/xml/stylesheet_include.xsl b/src/etc/testcases/taskdefs/optional/xml/stylesheet_include.xsl
new file mode 100644
index 000000000..2f1871d1c
--- /dev/null
+++ b/src/etc/testcases/taskdefs/optional/xml/stylesheet_include.xsl
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/etc/testcases/taskdefs/optional/xml/stylesheet_with_include.xsl b/src/etc/testcases/taskdefs/optional/xml/stylesheet_with_include.xsl
new file mode 100644
index 000000000..435994e79
--- /dev/null
+++ b/src/etc/testcases/taskdefs/optional/xml/stylesheet_with_include.xsl
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/etc/testcases/taskdefs/optional/xslt.xml b/src/etc/testcases/taskdefs/optional/xslt.xml
index fd1531b96..34d3ce46f 100644
--- a/src/etc/testcases/taskdefs/optional/xslt.xml
+++ b/src/etc/testcases/taskdefs/optional/xslt.xml
@@ -79,4 +79,10 @@
style="xml/apache.xsl">
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
index b1b7dc45b..e5a1df852 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
@@ -27,6 +27,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;
import java.util.Enumeration;
+import java.net.URL;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.ErrorListener;
@@ -50,6 +51,7 @@ import org.apache.tools.ant.taskdefs.XSLTProcess;
import org.apache.tools.ant.types.XMLCatalog;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.resources.FileResource;
+import org.apache.tools.ant.types.resources.URLResource;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.JAXPUtils;
import org.xml.sax.EntityResolver;
@@ -64,6 +66,13 @@ import org.xml.sax.XMLReader;
*/
public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware {
+ /**
+ * Helper for transforming filenames to URIs.
+ *
+ * @since Ant 1.7
+ */
+ private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
+
/**
* The current Project
*/
@@ -126,6 +135,7 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware
FileResource fr = new FileResource();
fr.setProject(project);
fr.setFile(stylesheet);
+ setStylesheet(fr);
}
/**
@@ -249,10 +259,23 @@ public class TraXLiaison implements XSLTLiaison3, ErrorListener, XSLTLoggerAware
// The line below is a hack: the system id must an URI, but it is not
// cleat to get the URI of an resource, so just set the name of the
// resource as a system id
- src.setSystemId(resource.getName());
+ src.setSystemId(resourceToURI(resource));
return src;
}
+ private String resourceToURI(Resource resource) {
+ if (resource instanceof FileResource) {
+ File f = ((FileResource) resource).getFile();
+ return FILE_UTILS.toURI(f.getAbsolutePath());
+ }
+ if (resource instanceof URLResource) {
+ URL u = ((URLResource) resource).getURL();
+ return String.valueOf(u);
+ } else {
+ return resource.getName();
+ }
+ }
+
/**
* Read in templates from the stylesheet
*/
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/XsltTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/XsltTest.java
index 8ce7fd540..dea0a9620 100644
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/XsltTest.java
+++ b/src/testcases/org/apache/tools/ant/taskdefs/optional/XsltTest.java
@@ -88,5 +88,16 @@ public class XsltTest extends BuildFileTest {
public void testXMLWithEntitiesInNonAsciiPath() throws Exception {
executeTarget("testXMLWithEntitiesInNonAsciiPath");
}
+
+ /**
+ * check that the system id gets set properly on stylesheets.
+ * @throws Exception if something goes wrong.
+ */
+ public void testStyleSheetWithInclude() throws Exception {
+ executeTarget("testStyleSheetWithInclude");
+ if (getLog().indexOf("java.io.FileNotFoundException") != -1) {
+ fail("xsl:include was not found");
+ }
+ }
}