Problem with spaces in directory paths 2003-03-03 - By Daniel Rabe
We're running into a problem using Xerces/Xalan when our XSL files reside in a directory that contains a space in the name (like "Program Files"). The problem seems to happen when the following conditions are met:
- The XSL file uses the document() function to load a secondary XML file (in this case, localization strings). The secondary XML file gets loaded okay.
- The secondary XML file contains entities to load other XML files, for example: <!ENTITY english SYSTEM "test_msg_en.xml"> ... later referenced as... &english;
If the XML and XSL files are all in directories that don't have spaces, everything works fine... but when you ship a product like ours, it's typically installed into "Program Files".
The error is javax.xml.transform.TransformerException: java.net.MalformedURLException: no protocol: test_msg_en.xml
I've been able to duplicate a very similar problem using the org.apache.xalan.xslt.Process class from the command line. The command line I'm using is: %JAVA_HOME%\bin\java -showversion org.apache.xalan.xslt.Process -in test.xml -xsl "sub dir\test.xsl"
In this scenario, "test.xml" is in the current working directory (which contains no spaces in its path), and "test.xsl" and its associated files are in the subdirectory "sub dir". If I use "subdir" (no spaces), everything works fine. I've tried using "sub+dir" and "sub%20dir", but none of those work.
This sample scenario is a little different from our original code because it's not trying to resolve the entity (the &english from above), so I'm not sure it's going through the same code path... however, any insight into how to work around this problem would be appreciated.
The specific error in this case is: (Location of error unknown)XSLT Error (javax.xml.transform.TransformerConfigurationException): javax.xml.transform.TransformerException: java.net.MalformedURLException: no protocol: sub dir\test.xsl
Config info: Xerces-J 2.2.1 and Xalan 2.4.1 on Windows 2000 or Windows XP.
Thanks! Daniel Rabe
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII"> <META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12"> <TITLE>Problem with spaces in directory paths</TITLE> </HEAD> <BODY>
<P><FONT SIZE=2>We're running into a problem using Xerces/Xalan when our XSL files reside in a directory that contains a space in the name (like " ;Program Files"). The problem seems to happen when the following conditions are met:</FONT></P>
<P><FONT SIZE=2>- The XSL file uses the document() function to load a secondary XML file (in this case, localization strings). The secondary XML file gets loaded okay.</FONT></P>
<P><FONT SIZE=2>- The secondary XML file contains entities to load other XML files, for example:</FONT> <BR><FONT SIZE=2><!ENTITY english SYSTEM "test_msg_en.xml">< /FONT> <BR><FONT SIZE=2>... later referenced as...</FONT> <BR><FONT SIZE=2>&english;</FONT> </P>
<P><FONT SIZE=2>If the XML and XSL files are all in directories that don't have spaces, everything works fine... but when you ship a product like ours, it's typically installed into "Program Files". </FONT></P>
<P><FONT SIZE=2>The error is</FONT> <BR><FONT SIZE=2>javax.xml.transform.TransformerException: java.net .MalformedURLException: no protocol: test_msg_en.xml</FONT> </P>
<P><FONT SIZE=2>I've been able to duplicate a very similar problem using the org.apache.xalan.xslt.Process class from the command line.</FONT> <BR><FONT SIZE=2>The command line I'm using is:</FONT> <BR><FONT SIZE=2>%JAVA_HOME%\bin\java -showversion org.apache.xalan.xslt .Process -in test.xml -xsl "sub dir\test.xsl"</FONT> </P>
<P><FONT SIZE=2>In this scenario, "test.xml" is in the current working directory (which contains no spaces in its path), and "test.xsl " and its associated files are in the subdirectory "sub dir". If I use "subdir" (no spaces), everything works fine. I've tried using "sub+dir" and "sub%20dir", but none of those work.</FONT></P >
<P><FONT SIZE=2>This sample scenario is a little different from our original code because it's not trying to resolve the entity (the &english from above ), so I'm not sure it's going through the same code path... however, any insight into how to work around this problem would be appreciated.</FONT></P>
<P><FONT SIZE=2>The specific error in this case is:</FONT> <BR><FONT SIZE=2>(Location of error unknown)XSLT Error (javax.xml.transform .TransformerConfigurationException): javax.xml.transform.TransformerException: java.net.MalformedURLException: no protocol: sub dir\test.xsl</FONT></P>
<P><FONT SIZE=2>Config info:</FONT> <BR><FONT SIZE=2>Xerces-J 2.2.1 and Xalan 2.4.1 on Windows 2000 or Windows XP.< /FONT> </P>
<P><FONT SIZE=2>Thanks!</FONT> <BR><FONT SIZE=2>Daniel Rabe</FONT> </P>
</BODY> </HTML>
|
|