[ 
https://issues.apache.org/jira/browse/VFS-279?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12774906#action_12774906
 ] 

Didier Earith commented on VFS-279:
-----------------------------------

Here is a simple test to reproduce the issue:

The test consists in calling 'resolveFile' with an uri (to a directory) which 
is contained into a jar file.



public class TestVFS {

    public static void main(String[] args) {
        
        testBugDoReplicateFile();
        
    }

    public static void testBugDoReplicateFile() {

        StandardFileSystemManager standardFileSystemManager = new 
StandardFileSystemManager();
        standardFileSystemManager.setLogger(LogFactory.getLog(VFS.class));
        
standardFileSystemManager.setClassLoader(TestVFS.class.getClassLoader());
        try {
            URL configUrl = new URL("file:/C:/MyVFSProvider.xml");
            standardFileSystemManager.setConfiguration(configUrl);
            standardFileSystemManager.setCacheStrategy(CacheStrategy.ON_CALL);
            standardFileSystemManager.init();

            String uri = "jar:file:/C:/MyJarFile!/schema/iso19139";
            FileSystemOptions opts = new FileSystemOptions();

            FileObject fileObject = standardFileSystemManager.resolveFile(uri, 
opts);

        } catch (FileSystemException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}



The stack is :


LocalFileSystem.doReplicateFile(FileObject, FileSelector) line: 77      
LocalFileSystem(AbstractFileSystem).replicateFile(FileObject, FileSelector) 
line: 395   
JarFileSystem(ZipFileSystem).<init>(FileName, FileObject, FileSystemOptions) 
line: 63   
JarFileSystem.<init>(FileName, FileObject, FileSystemOptions) line: 51  
JarFileProvider.doCreateFileSystem(String, FileObject, FileSystemOptions) line: 
82      
JarFileProvider(AbstractLayeredFileProvider).createFileSystem(String, 
FileObject, FileSystemOptions) line: 79   
JarFileProvider(AbstractLayeredFileProvider).findFile(FileObject, String, 
FileSystemOptions) line: 59   
StandardFileSystemManager(DefaultFileSystemManager).resolveFile(FileObject, 
String, FileSystemOptions) line: 691        
StandardFileSystemManager(DefaultFileSystemManager).resolveFile(String, 
FileSystemOptions) line: 619    
TestVFS.testBugDoReplicateFile() line: 36       
TestVFS.main(String[]) line: 18 



In the doReplicateFile, the fileObject object  is  a OnCallRefreshFileObject 
instance  which inherits from DecoratedFileObject :


fileObject      OnCallRefreshFileObject  (id=49)        
        decoratedFileObject     LocalFile  (id=57)      
                attached        true    
                children        null    
                content null    
                file    File  (id=60)   
                fs      LocalFileSystem  (id=43)        
                name    WindowsFileName  (id=62)        
                objects null    
                operations      null    
                parent  null    
                rootFile        "C:" (id=67)    
                type    FileType  (id=68)       





MyVFSProvider.xml is 

<?xml version="1.0" encoding="ISO-8859-1"?>
<providers>

<!-- 
    <default-provider 
class-name="org.apache.commons.vfs.provider.url.UrlFileProvider"/>
 -->
    <default-provider 
class-name="org.apache.commons.vfs.provider.local.DefaultLocalFileProvider"/>
    
    <provider 
class-name="org.apache.commons.vfs.provider.local.DefaultLocalFileProvider">
        <scheme name="local"/>
    </provider>
    
    <provider 
class-name="org.apache.commons.vfs.provider.local.DefaultLocalFileProvider">
        <scheme name="file"/>
    </provider>

    <provider class-name="org.apache.commons.vfs.provider.ftp.FtpFileProvider">
        <scheme name="ftp"/>
        <if-available class-name="org.apache.commons.net.ftp.FTPFile"/>
    </provider>
    
    <provider 
class-name="org.apache.commons.vfs.provider.sftp.SftpFileProvider">
        <scheme name="sftp"/>
    </provider>

    <provider 
class-name="org.apache.commons.vfs.provider.http.HttpFileProvider">
        <scheme name="http"/>
    </provider>
    
    <provider 
class-name="org.apache.commons.vfs.provider.https.HttpsFileProvider">
        <scheme name="https"/>
    </provider>

    <provider class-name="org.apache.commons.vfs.provider.jar.JarFileProvider">
        <scheme name="jar"/>
    </provider>

</providers>


> ClassCastException in LocalFileSystem when using OnCall caching
> ---------------------------------------------------------------
>
>                 Key: VFS-279
>                 URL: https://issues.apache.org/jira/browse/VFS-279
>             Project: Commons VFS
>          Issue Type: Bug
>    Affects Versions: 1.0, 1.1, 2.0
>            Reporter: Didier Earith
>             Fix For: 1.0, 1.1, 2.0
>
>         Attachments: LocalFileSystem.java
>
>
> When using OnCall caching in the file system, there is a ClassCastException 
> in the LocalFileSystem#doReplicateFile function.
> To fix the issue, I replaced :
>         final LocalFile localFile = (LocalFile) fileObject;
> by 
>         final LocalFile localFile = (LocalFile) 
> FileObjectUtils.getAbstractFileObject(fileObject);

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to