From 1df82da13fe99eb52681aed90976854fad1bbce8 Mon Sep 17 00:00:00 2001 From: Stephane Bailliez Date: Thu, 7 Feb 2002 22:00:33 +0000 Subject: [PATCH] Fix file protocol prefix so that there is no more and no less than 3 '/' on whatever platform it is running. PR: 6259 Reported by: sl@ragbildung.de (Sascha Luedecke) git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271216 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/tools/ant/taskdefs/XSLTLiaison.java | 2 +- .../org/apache/tools/ant/taskdefs/XSLTProcess.java | 2 +- .../tools/ant/taskdefs/optional/TraXLiaison.java | 12 +++++++++--- .../ant/taskdefs/optional/TraXLiaisonTest.java | 14 ++++++++++++++ 4 files changed, 25 insertions(+), 5 deletions(-) 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:////")); + } + }