The following comment has been added to this issue: Author: Hes Siemelink Created: Wed, 11 Aug 2004 3:52 AM Body: I did some investigations and found a possible bug in Phoenix.
First a recap. James 2.2.0 does not run with the default configuration file if installed in a directory path that contains spaces, like "C:\Program Files". Steve Brewin explained why: > According to RFC 2396 "Uniform Resource Identifiers (URI): Generic > Syntax", section 2.4.3 "Excluded ASCII Characters", "The space character is > excluded". Elsewhere it explains how a relative path, such as > "../conf/james-fetchmail.xml" is resolved by deducing the absolute path, > which will include the excluded space character and therefore constitutes > a Malformed URI and hence a Malformed URL. Thus, the thrown > MalformedURLException is correct. [...] > It is true that a URL can use %20 to escape spaces, thus a fully qualified > URL such as "file:///c:/Program%20Files/whatever%20%you%20want" will > work. So the question remains, why the absolute path of the file 'config.xml' is interpreted as an URI without being properly encoded. I dug into the Phoenix source and found the following. The class org.apache.avalon.phoenix.components.deployer.installer.Installer takes care of loading config.xml. (SVN link: http://svn.apache.org/repos/asf/avalon/tags/Phoenix_4_0_3/avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/installer/Installer.java) To get the URI of the filename, the following call is used: final String config = getURLAsString( new File( directory, FS_CONFIG_XML ) ); Installer.java contains the method getURLAsString(): /** * Utility method to extract URL from file in safe manner. * * @param file the file * @return the URL representation of file */ private String getURLAsString( final File file ) { try { return file.toURL().toExternalForm(); } catch( final MalformedURLException mue ) { return null; //should never occur } } This method uses the File.toURL(). The JDK 1.4 javadoc of this method states: ---- public URL toURL() throws MalformedURLException Converts this abstract pathname into a file: URL. The exact form of the URL is system-dependent. If it can be determined that the file denoted by this abstract pathname is a directory, then the resulting URL will end with a slash. Usage note: This method does not automatically escape characters that are illegal in URLs. It is recommended that new code convert an abstract pathname into a URL by first converting it into a URI, via the toURI method, and then converting the URI into a URL via the URI.toURL method. ---- I think this explains the behavior! I haven't been able to test it properly yet, but it sounds plausible to toURI() should be used and not toURL(). (Note that this method is JDK 1.4 only) --------------------------------------------------------------------- View this comment: http://issues.apache.org/jira/browse/JAMES-307?page=comments#action_37166 --------------------------------------------------------------------- View the issue: http://issues.apache.org/jira/browse/JAMES-307 Here is an overview of the issue: --------------------------------------------------------------------- Key: JAMES-307 Summary: james 2.2.0 run.bat Error building configuration Type: Bug Status: Closed Priority: Major Resolution: WON'T FIX Project: James Versions: 2.2.0 Assignee: Reporter: Michael Cook Created: Sat, 17 Jul 2004 10:50 PM Updated: Wed, 11 Aug 2004 3:52 AM Environment: Windows XP Home SP1 with JSDK version "1.4.1_02" and James 2.2.0. Description: First time thru and subsequently run.bat results in: ==================================================== Using PHOENIX_HOME: C:\Program Files\james-2.2.0 Using PHOENIX_TMPDIR: 'C:\Program Files\james-2.2.0\bin\Files\james-2.2.0\temp' Using JAVA_HOME: c:\Program Files\j2sdk1.4.1_01 Phoenix 4.0.1 There was an uncaught exception: --------------------------------------------------------- --- Message --- Error building configuration from file:/C:/Program Files/james-2.2.0/apps/james/ SAR-INF/config.xml. --- Stack Trace --- org.apache.avalon.phoenix.interfaces.DeploymentException: Error building configu ration from file:/C:/Program Files/james-2.2.0/apps/james/SAR-INF/config.xml. at org.apache.avalon.phoenix.components.deployer.DefaultDeployer.getConf igurationFor(DefaultDeployer.java:499) at org.apache.avalon.phoenix.components.deployer.DefaultDeployer.deploy( DefaultDeployer.java:325) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployF ile(DefaultEmbeddor.java:498) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployF ile(DefaultEmbeddor.java:491) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployF iles(DefaultEmbeddor.java:476) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployD efaultApplications(DefaultEmbeddor.java:466) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.execute (DefaultEmbeddor.java:224) at org.apache.avalon.phoenix.frontends.CLIMain.run(CLIMain.java:158) at org.apache.avalon.phoenix.frontends.CLIMain.execute(CLIMain.java:144) at org.apache.avalon.phoenix.frontends.CLIMain.main(CLIMain.java:102) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.avalon.phoenix.launcher.Main.startup(Main.java:94) at org.apache.avalon.phoenix.launcher.Main.main(Main.java:46) Caused by: java.net.MalformedURLException: no protocol: ../conf/james-fetchmail. xml at java.net.URL.<init>(URL.java:579) at java.net.URL.<init>(URL.java:476) at java.net.URL.<init>(URL.java:425) at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager. java:796) at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager. java:725) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEntityRefer ence(XMLDocumentFragmentScannerImpl.java:1073) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent Dispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1489) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XM LDocumentFragmentScannerImpl.java:333) at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.jav a:524) at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.jav a:580) at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152) at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.j ava:1169) at org.apache.avalon.phoenix.tools.configuration.ConfigurationBuilder.bu ild(ConfigurationBuilder.java:129) at org.apache.avalon.phoenix.tools.configuration.ConfigurationBuilder.bu ild(ConfigurationBuilder.java:116) at org.apache.avalon.phoenix.tools.configuration.ConfigurationBuilder.bu ild(ConfigurationBuilder.java:97) at org.apache.avalon.phoenix.components.deployer.DefaultDeployer.getConf igurationFor(DefaultDeployer.java:493) ... 15 more rethrown from java.net.MalformedURLException: no protocol: ../conf/james-fetchmail.xml at java.net.URL.<init>(URL.java:579) at java.net.URL.<init>(URL.java:476) at java.net.URL.<init>(URL.java:425) at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager. java:796) at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager. java:725) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEntityRefer ence(XMLDocumentFragmentScannerImpl.java:1073) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent Dispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1489) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XM LDocumentFragmentScannerImpl.java:333) at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.jav a:524) at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.jav a:580) at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152) at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.j ava:1169) at org.apache.avalon.phoenix.tools.configuration.ConfigurationBuilder.bu ild(ConfigurationBuilder.java:129) at org.apache.avalon.phoenix.tools.configuration.ConfigurationBuilder.bu ild(ConfigurationBuilder.java:116) at org.apache.avalon.phoenix.tools.configuration.ConfigurationBuilder.bu ild(ConfigurationBuilder.java:97) at org.apache.avalon.phoenix.components.deployer.DefaultDeployer.getConf igurationFor(DefaultDeployer.java:493) at org.apache.avalon.phoenix.components.deployer.DefaultDeployer.deploy( DefaultDeployer.java:325) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployF ile(DefaultEmbeddor.java:498) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployF ile(DefaultEmbeddor.java:491) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployF iles(DefaultEmbeddor.java:476) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployD efaultApplications(DefaultEmbeddor.java:466) at org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.execute (DefaultEmbeddor.java:224) at org.apache.avalon.phoenix.frontends.CLIMain.run(CLIMain.java:158) at org.apache.avalon.phoenix.frontends.CLIMain.execute(CLIMain.java:144) at org.apache.avalon.phoenix.frontends.CLIMain.main(CLIMain.java:102) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.avalon.phoenix.launcher.Main.startup(Main.java:94) at org.apache.avalon.phoenix.launcher.Main.main(Main.java:46) --------------------------------------------------------- The log file may contain further details of error. Please check the configuration files and restart Phoenix. If the problem persists, contact the Avalon project. See http://jakarta.apache.org/avalon for more information. Shutting down Phoenix. Press any key to continue . . . Phoenix.log contains: ===================== INFO 2004-07-18 00:30:09.859 [Phoenix ] (): Logger started WARN 2004-07-18 00:30:09.937 [Phoenix ] (): Phoenix was not started by the daemon thus it will not be possible to restart the JVM via the Management interface. INFO 2004-07-18 00:30:10.078 [Phoenix.] (): Work directory does not exist, attempting to create directory C:\Program Files\james-2.2.0\work. INFO 2004-07-18 00:30:10.140 [Phoenix.] (): Installing Sar located at file:/C:/Program Files/james-2.2.0/apps/james.sar. ERROR 2004-07-18 00:30:10.812 [Phoenix.] (): Error building configuration from file:/C:/Program Files/james-2.2.0/apps/james/SAR-INF/config.xml. java.net.MalformedURLException: no protocol: ../conf/james-fetchmail.xml at java.net.URL.<init>(URL.java:579) at java.net.URL.<init>(URL.java:476) at java.net.URL.<init>(URL.java:425) at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:796) at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:725) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1073) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1489) --------------------------------------------------------------------- JIRA INFORMATION: This message is automatically generated by JIRA. If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa If you want more information on JIRA, or have a bug to report see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]