[jboss-jira] [JBoss JIRA] Commented: (JBCOMMON-29) Unable to read in jarfile if application installed to location with spaces in directory name

klaasjan elzinga (JIRA) jira-events at lists.jboss.org
Tue Jul 17 02:47:47 EDT 2007


    [ http://jira.jboss.com/jira/browse/JBCOMMON-29?page=comments#action_12369149 ] 
            
klaasjan elzinga commented on JBCOMMON-29:
------------------------------------------

I downloaded the source and found the following: In FileProtocolArchiveBrowserFactory a File object is created from an URL by doing a       File f = new File(url.getPath());

If this is changed to File f = new File(url.getURI().getPath()) the url escaping is done. The url delivered is the url of a jar file which can be anything on a file system. I used the following pgm to investigate this:

        // get URL from classpath...
        ClassLoader loader = Main.class.getClassLoader();
        Enumeration<URL> urls = loader.getSystemResources("");
        URL theURL = null;
        while (urls.hasMoreElements()) {
            URL url = urls.nextElement();
            System.out.println("avail uri: " + url);
            theURL = url;
        }
        if (theURL == null) {
            System.out.println("the URL is null.");
            return;
        }
        
        System.out.println("URL: " + theURL);
        System.out.println("url.getPath(): " + theURL.getPath());
        System.out.println("url.getFile(): " + theURL.getFile());
        System.out.println("url.toURI().getPath(): " + theURL.toURI().getPath());


        File f = new File(theURL.getPath());
        System.out.println("f(url.getPath()): " + f);
        System.out.println("f(url.getPath()): " + f.getPath());
        System.out.println("f(url.getPath()): " + f.getName());
        System.out.println("f(url.getPath() exists): " + f.exists());
        System.out.println("f(url.getPath() readble): " + f.canRead());
        
        File f2 = new File(theURL.toURI().getPath());
        System.out.println("f(url.touri().getPath(): " + f2);
        System.out.println("f(url.touri().getPath(): " + f2.getPath());
        System.out.println("f(url.touri().getPath()): " + f2.getName());
        System.out.println("f(url.touri().getPath() exists): " + f2.exists());
        System.out.println("f(url.tourigetPath() readble): " + f2.canRead());

This outputs (if run on directory c:/TIS FIIBLoadTool as java -cp test.jar;. org.kje.Main):
avail uri: file:/C:/TIS%20FIIBLoadTool-3.0.2.SNAPSHOT/
URL: file:/C:/TIS%20FIIBLoadTool-3.0.2.SNAPSHOT/
url.getPath(): /C:/TIS%20FIIBLoadTool-3.0.2.SNAPSHOT/
url.getFile(): /C:/TIS%20FIIBLoadTool-3.0.2.SNAPSHOT/
url.toURI().getPath(): /C:/TIS FIIBLoadTool-3.0.2.SNAPSHOT/
f(url.getPath()): C:\TIS%20FIIBLoadTool-3.0.2.SNAPSHOT
f(url.getPath()): C:\TIS%20FIIBLoadTool-3.0.2.SNAPSHOT
f(url.getPath()): TIS%20FIIBLoadTool-3.0.2.SNAPSHOT
f(url.getPath() exists): false
f(url.getPath() readble): false
f(url.touri().getPath(): C:\TIS FIIBLoadTool-3.0.2.SNAPSHOT
f(url.touri().getPath(): C:\TIS FIIBLoadTool-3.0.2.SNAPSHOT
f(url.touri().getPath()): TIS FIIBLoadTool-3.0.2.SNAPSHOT

So the url.toURI.getPath() works as the url.getPath() does not.

> Unable to read in jarfile if application installed to location with spaces in directory name
> --------------------------------------------------------------------------------------------
>
>                 Key: JBCOMMON-29
>                 URL: http://jira.jboss.com/jira/browse/JBCOMMON-29
>             Project: JBoss Common
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: core
>    Affects Versions: 2.0.4.GA
>         Environment: windows XP sun-jre, happens also in core-2.2.0.GA
>            Reporter: klaasjan elzinga
>         Assigned To: Dimitris Andreadis
>
> I get an exception if the application is installed to a directory containing a space. I I rename the directory to a name without a space, the application runs perfectly.
> Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [loadtool/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: error trying to scan <jar-file>: file:/C:/TIS%20FIIBLoadTool-3.0.2.SN
> APSHOT/TISFIIBLoadTool-3.0.2.SNAPSHOT-jar-with-dependencies.jar
> Caused by: java.lang.RuntimeException: error trying to scan <jar-file>: file:/C:/TIS%20FIIBLoadTool-3.0.2.SNAPSHOT/TISFIIBLoadTool-3.0.2.SNAPSHOT-jar-with-dependencies.jar
>         at org.hibernate.ejb.Ejb3Configuration.scanForClasses(Ejb3Configuration.java:635)
>         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:350)
>         at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:126)
>         at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:218)
>         at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:251)
>         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1201)
>         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1171)
>         at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:425)
>         at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
>         at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
>         at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
> ...
>         at loadtool.Main.main(Main.java:40)
> Caused by: java.lang.RuntimeException: java.io.FileNotFoundException: C:\TIS%20FIIBLoadTool-3.0.2.SNAPSHOT\TISFIIBLoadTool-3.0.2.SNAPSHOT-jar-with-dependencies.jar (The system cannot find th
> e path specified)
>         at org.jboss.util.file.JarArchiveBrowser.<init>(JarArchiveBrowser.java:74)
>         at org.jboss.util.file.FileProtocolArchiveBrowserFactory.create(FileProtocolArchiveBrowserFactory.java:48)
>         at org.jboss.util.file.ArchiveBrowser.getBrowser(ArchiveBrowser.java:57)
>         at org.hibernate.ejb.Ejb3Configuration.scanForClasses(Ejb3Configuration.java:626)
>         ... 29 more
> Caused by: java.io.FileNotFoundException: C:\TIS%20FIIBLoadTool-3.0.2.SNAPSHOT\TISFIIBLoadTool-3.0.2.SNAPSHOT-jar-with-dependencies.jar (The system cannot find the path specified)
>         at java.util.zip.ZipFile.open(Native Method)
>         at java.util.zip.ZipFile.<init>(ZipFile.java:114)
>         at java.util.jar.JarFile.<init>(JarFile.java:133)
>         at java.util.jar.JarFile.<init>(JarFile.java:97)
>         at org.jboss.util.file.JarArchiveBrowser.<init>(JarArchiveBrowser.java:69)
>         ... 32 more

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list