diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java b/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java index 1e5f82029..3cf264c04 100644 --- a/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java +++ b/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java @@ -76,7 +76,7 @@ public interface XSLTLiaison { * case since most parsers for now incorrectly makes no difference * between it.. and users also have problem with that :) */ - String FILE_PROTOCOL_PREFIX = "file:///"; + String FILE_PROTOCOL_PREFIX = "file://"; /** * set the stylesheet to use for the transformation. diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java index e23d2cd2d..aec7208fa 100644 --- a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java +++ b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java @@ -217,7 +217,7 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { /** * Set the destination directory into which the XSL result * files should be copied to - * @param dirName the name of the destination directory + * @param dir the name of the destination directory **/ public void setDestdir(File dir) { destDir = dir; 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 bcda89454..769f8a232 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java @@ -162,9 +162,15 @@ public class TraXLiaison implements XSLTLiaison, ErrorListener, XSLTLoggerAware // because it grabs the base uri via lastIndexOf('/') without // making sure it is really a /'ed path protected String getSystemId(File file){ - String path = file.getAbsolutePath(); - path = path.replace('\\','/'); - return FILE_PROTOCOL_PREFIX + path; + String path = file.getAbsolutePath(); + path = path.replace('\\','/'); + + // on Windows, use 'file:///' + if (File.separatorChar == '\\') { + return FILE_PROTOCOL_PREFIX + "/" + path; + } + // Unix, use 'file://' + return FILE_PROTOCOL_PREFIX + path; } public void addParam(String name, String value){ diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java index 720e83b3f..3db5d7f15 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java @@ -1,6 +1,7 @@ package org.apache.tools.ant.taskdefs.optional; import org.apache.tools.ant.taskdefs.XSLTLiaison; +import org.apache.tools.ant.taskdefs.condition.Os; import org.apache.tools.ant.BuildException; import java.io.File; @@ -110,4 +111,17 @@ public class TraXLiaisonTest extends AbstractXSLTLiaisonTest { } } } + + public void testSystemId(){ + File file = null; + if ( File.separatorChar == '\\' ){ + file = new File("d:\\jdk"); + } else { + file = new File("/user/local/bin"); + } + String systemid = ((TraXLiaison)liaison).getSystemId(file); + assert("SystemIDs should start by file:///", systemid.startsWith("file:///")); + assert("SystemIDs should not start with file:////", !systemid.startsWith("file:////")); + } + }