Java

NAVIGATION
CATEGORIES
REFERRENCE
LINKS
  • bug ?

    16 answers - 959 bytes - related search similar search Add To My Delicious Add To My Stumble Upon Add To My Google Mark Add To My Facebook Add To My Digg Add To My Reddit

    hi Mario,
    there is a bug in VFS RC3 :
    StandardFileSystemManager fsm = null;
    fsm = (StandardFileSystemManager) VFS.getManager();
    fsm.setBaseFile( new File( System.getProperty( "user.dir" ) ) );
    fsm.setDefaultProvider( new UrlFileProvider() );
    F fo = fsm.resolveFile( "file:///path/to/file" );
    System.out.println( fsm.resolveFile( fo, "file:///chemin/vers/fichier" ) );
    System.out.println( fsm.resolveFile( fo, "/chemin/vers/fichier" ) );
    System.out.println( fsm.resolveFile( fo, "chemin/vers/fichier" ) );
    output is :
    file:///chemin/vers/fichier
    file:///chemin/vers/fichier
    the last must be :
    the same with java.net.URI gives the right result :
    URI uri = new URI( "file:///path/to/file" );
    System.out.println( uri.resolve( "file:///chemin/vers/fichier" ) );
    System.out.println( uri.resolve( "/chemin/vers/fichier" ) );
    System.out.println( uri.resolve( "chemin/vers/fichier" ) );
  • No.1 | | 1311 bytes | |

    19.08.2005, at 10:07, Philippe Poulard wrote:

    hi Mario,

    there is a bug in VFS RC3 :

    StandardFileSystemManager fsm = null;
    fsm = (StandardFileSystemManager) VFS.getManager();
    fsm.setBaseFile( new File( System.getProperty( "user.dir" ) ) );
    fsm.setDefaultProvider( new UrlFileProvider() );
    F fo = fsm.resolveFile( "file:///path/to/file" );
    System.out.println( fsm.resolveFile( fo, "file:///chemin/vers/
    fichier" ) );
    System.out.println( fsm.resolveFile( fo, "/chemin/vers/fichier" ) );
    System.out.println( fsm.resolveFile( fo, "chemin/vers/fichier" ) );

    output is :

    file:///chemin/vers/fichier
    file:///chemin/vers/fichier

    the last must be :

    the same with java.net.URI gives the right result :

    URI uri = new URI( "file:///path/to/file" );
    System.out.println( uri.resolve( "file:///chemin/vers/fichier" ) );
    System.out.println( uri.resolve( "/chemin/vers/fichier" ) );
    System.out.println( uri.resolve( "chemin/vers/fichier" ) );

    Maybe the URI class is a bit smarter
    but why would you use a *file* as a
    base anyway?

    VFS should probably check whether it's
    a dir and if not use the parent.

    But IMH the above example looks more
    like a wrong use of the API.

    my 2 cents

    cheers
  • No.2 | | 634 bytes | |

    Hi!

    I wont say its a bug from very old code I come to the conclusion
    its just not supported that way.

    Now this isnt that easy to solve (if we would like to solve it) as maybe
    other VFS installations expect it that way.

    What we can do is to add a new NameScope - say NameScope.SIBLING.
    resolveFile with that scope might behave like URI.

    Using FFile(String name, NameScope scope) you could set
    it then.

    Mario

    To unsubscribe, e-mail: commons-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: commons-user-help (AT) jakarta (DOT) apache.org
  • No.3 | | 2355 bytes | |

    Torsten Curdt wrote:

    19.08.2005, at 10:07, Philippe Poulard wrote:

    >hi Mario,
    >>

    >there is a bug in VFS RC3 :
    >>

    >StandardFileSystemManager fsm = null;
    >fsm = (StandardFileSystemManager) VFS.getManager();
    >fsm.setBaseFile( new File( System.getProperty( "user.dir" ) ) );
    >fsm.setDefaultProvider( new UrlFileProvider() );
    >F fo = fsm.resolveFile( "file:///path/to/file" );
    >System.out.println( fsm.resolveFile( fo, "file:///chemin/vers/
    >fichier" ) );
    >System.out.println( fsm.resolveFile( fo, "/chemin/vers/fichier" ) );
    >System.out.println( fsm.resolveFile( fo, "chemin/vers/fichier" ) );
    >>

    >output is :
    >>

    >file:///chemin/vers/fichier
    >file:///chemin/vers/fichier
    >
    >>

    >the last must be :
    >>

    >
    >>

    >the same with java.net.URI gives the right result :
    >>

    >URI uri = new URI( "file:///path/to/file" );
    >System.out.println( uri.resolve( "file:///chemin/vers/fichier" ) );
    >System.out.println( uri.resolve( "/chemin/vers/fichier" ) );
    >System.out.println( uri.resolve( "chemin/vers/fichier" ) );


    Maybe the URI class is a bit smarter
    but why would you use a *file* as a
    base anyway?

    well, it's somewhat obvious :

    when you load an HTML document from a web server, you have :

    if the document contain :
    <img src="picture.jpg"/>
    <link rel="stylesheet" href="style.css">
    both will be resolved according to the document location :

    i think there are many other examples where FILES are referencing
    resources they are using

    VFS should probably check whether it's
    a dir and if not use the parent.

    this is not a question of "is it a dir or a file"

    if it doesn't end with "/", it must be resolved regarding the parent
    if it ends with "/", just append the relative path

    But IMH the above example looks more
    like a wrong use of the API.

    see RFCxxx about URIs

    my 2 cents

    cheers
  • No.4 | | 1629 bytes | |

    Mario Ivankovits wrote:
    Hi!

    I wont say its a bug from very old code I come to the conclusion
    its just not supported that way.

    Now this isnt that easy to solve (if we would like to solve it) as maybe
    other VFS installations expect it that way.

    What we can do is to add a new NameScope - say NameScope.SIBLING.
    resolveFile with that scope might behave like URI.

    Using FFile(String name, NameScope scope) you could set
    it then.

    mmmh, consider this :

    i hope that a file that ends with "/" is automatically understand by VFS
    as a DIRECTRY

    so, to resolve "fichier" upon :
    file:///path/to/file
    that may be an IMAGINARY type
    it should be resolved to
    file:///path/to/fichier
    even if file:///path/to/file is really a directory or a file

    to resolve it upon :
    file:///path/to/
    that must be a DIRECTRY type
    it should be resolved to
    file:///path/to/fichier

    in fact, i'm not sure that an additional scope should be designed ; as
    one have all the information for the resolution, i thing the correct
    behaviour is the one described above

    my previous post show a real example of such a behaviour :

    when you load an HTML document from a web server, you have :

    if the document contains :
    <img src="picture.jpg"/>
    <link rel="stylesheet" href="style.css">
    both will be resolved according to the document location :

    i think there are many other examples where FILES are referencing
    resources they are using

    the current behaviour of VFS can't process healthily such cases
  • No.5 | | 369 bytes | |


    the current behaviour of VFS can't process healthily such cases

    i think that VFS users didn't already have to deal with relative files
    resolution regarding something else than a directory ; that's why they
    didn't yet complain about this behaviour that is suitable to directories

    please have a look again on my HTML example :)
  • No.6 | | 1769 bytes | |

    Hello!

    I've read your previous post and all what you outline makes *very* sense.

    For sure - its possible to solve it without additional NameScope (even
    if hard).
    BUT - and I hope other VFS users read this thread too - the behaviour in
    this situation isnt well documenten (fault 1), no testcase cover it
    (fault 2) and the way it currently works (maybe fault 3) might already
    be an assumption for other users and their applications. The only thing
    I can say is, that VFS core could couldnt handle it.

    Solving it in "a clean" way might break their application. I think this
    is not acceptable for a RC->1.0 release transition.

    i think that VFS users didn't already have to deal with relative files
    resolution regarding something else than a directory ; that's why they
    didn't yet complain about this behaviour that is suitable to directories
    Might be true, but only if their directory-names ends with an "/" and
    vfs didnt support this semantic (yet).
    So beside fix the filename-resolving stuff we have to add this "flag" to
    show we would like to talk about directories even if the file is
    "virtual" (non existent)

    K - I suggest to start a poll on the user list and with this result a
    vote on the dev list to ask if this "bug" should be solved the clean way
    - I do not know every single use of the VFS api (e.g. currently I dont
    use this resolve-relative stuff) so I need your input.
    This would delay the release for at least another month. - nothing
    bad with that.

    Mario

    To unsubscribe, e-mail: commons-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: commons-user-help (AT) jakarta (DOT) apache.org
  • No.7 | | 771 bytes | |

    fsm.setBaseFile( new File( System.getProperty( "user.dir" ) ) );

    well, it's somewhat obvious :

    yepp - but to me the other way around ;)

    when you load an HTML document from a web server, you have :

    if the document contain :
    <img src="picture.jpg"/>
    <link rel="stylesheet" href="style.css">
    both will be resolved according to the document location :

    i think there are many other examples where FILES are referencing
    resources they are using

    IMH this would only apply if you were
    setting a base URI on the fsm.
    Matter of fact you are setting a File
    object.

    But anyway would probably nice to
    add a directory check on setBaseFile.
    using the parent if it's a file.

    cheers
  • No.8 | | 1110 bytes | |

    Solving it in "a clean" way might break their application. I think
    this is not acceptable for a RC->1.0 release transition.

    As long it's not released - it's not released yet ;)

    >i think that VFS users didn't already have to deal with relative
    >files resolution regarding something else than a directory ;
    >that's why they didn't yet complain about this behaviour that is
    >suitable to directories
    >>

    Might be true, but only if their directory-names ends with an "/"
    and vfs didnt support this semantic (yet).
    So beside fix the filename-resolving stuff we have to add this
    "flag" to show we would like to talk about directories even if the
    file is "virtual" (non existent)

    Adding the "/" semantics right before the release
    is not a good idea IM The fix that I proposed
    is very simple shoulnd't that do it? It will
    much less likely break anything.

    In general adding a "special" mode doesn't sound
    like a good plan to me.

    cheers
  • No.9 | | 2548 bytes | |

    Mario Ivankovits wrote:
    Hello!

    I've read your previous post and all what you outline makes *very* sense.

    For sure - its possible to solve it without additional NameScope (even
    if hard).
    BUT - and I hope other VFS users read this thread too - the behaviour in
    this situation isnt well documenten (fault 1), no testcase cover it
    (fault 2) and the way it currently works (maybe fault 3) might already
    be an assumption for other users and their applications. The only thing
    I can say is, that VFS core could couldnt handle it.

    Solving it in "a clean" way might break their application. I think this
    is not acceptable for a RC->1.0 release transition.

    >i think that VFS users didn't already have to deal with relative files
    >resolution regarding something else than a directory ; that's why they
    >didn't yet complain about this behaviour that is suitable to directories


    Might be true, but only if their directory-names ends with an "/" and
    vfs didnt support this semantic (yet).
    So beside fix the filename-resolving stuff we have to add this "flag" to
    show we would like to talk about directories even if the file is
    "virtual" (non existent)

    K - I suggest to start a poll on the user list and with this result a
    vote on the dev list to ask if this "bug" should be solved the clean way
    - I do not know every single use of the VFS api (e.g. currently I dont
    use this resolve-relative stuff) so I need your input.
    This would delay the release for at least another month. - nothing
    bad with that.

    I vote for fixing this behaviour :)

    motivation :

    VFS is somewhat a young tool ; people that are developping on RC release
    are certainly not as numerous as we think, or didn't yet used the tool
    very deeply I guess that the impact is very limited, and in the case
    of the few impacted applications, I don't think that adding a terminal
    "/" where needed is really difficult

    I did myself start to develop with a non-stable version of VFS (january
    2005), and it was a pain to upgrade to RC3, because of the unstable API
    ! however, I'm still ready to accept any drastic changes if they are
    justified and contribute to the tool
    i'm just considering that things are not as stable as everyone would wish

    I'm sure people would prefer a clean-well designed-smart-efficient tool
    than a hacked-not fair-unpredictable-dirty one :)
  • No.10 | | 1583 bytes | |

    Hi!
    >Solving it in "a clean" way might break their application. I think
    >this is not acceptable for a RC->1.0 release transition.

    As long it's not released - it's not released yet ;)
    Hmmm. Maybe I "overcomplicate" things

    i think that VFS users didn't already have to deal with relative
    files resolution regarding something else than a directory ; that's
    why they didn't yet complain about this behaviour that is suitable
    to directories
    >Might be true, but only if their directory-names ends with an "/"
    >and vfs didnt support this semantic (yet).
    >So beside fix the filename-resolving stuff we have to add this
    >"flag" to show we would like to talk about directories even if the
    >file is "virtual" (non existent)

    Adding the "/" semantics right before the release
    is not a good idea IM
    but its not release yet ;-)
    The fix that I proposed
    is very simple shoulnd't that do it?
    Yes and no. Yes it might work, but - no - only if the file already
    exists. And why should the filename parsing stuff take the existence of
    a file/directory into account? In fact at that point in VFS I do only
    have a FileName and no F

    Philippe wrote:
    I vote for fixing this behaviour :)
    I need some time to think about it.

    Mario

    To unsubscribe, e-mail: commons-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: commons-user-help (AT) jakarta (DOT) apache.org
  • No.11 | | 2029 bytes | |

    Hi!

    Without to spread the feeling a decision has been made ;-) I would like
    to discuss another aspect of uri-style resolving names.

    First of all, VFS's behaviour on this topic should be consistent, it
    should not matter if the directory/file exists or not, the filename is
    the only "reality".

    Consider the following chaing of operations:

    01: F fo = VFS.getManager().resolveFile("/any/new/dir/name/")
    02: fo.createFile();
    03: fo.delete();
    04: fo.createDirectory();

    Now my questions:
    a) Should it be allowed to call createFile on a "directory"? Notice: The
    "fo" is nonexistent. Currently the decision if it is a directory or file
    will be made when calling one of the create* methods and can be changed
    (sure unlikley, but posssible - and if not it is a bug ;-) )
    b) If we allow to change the type of the file/directory is it logical
    that its filename changes too? e.g. after 02: it will be
    /any/new/dir/name and after 04 it will be /any/new/dir/name/ again
    c) And thus is it logical that after 02/04 a resolveFile() will behave
    differently?
    d) Filename changes are a real problem, not only for the cache (which
    could be solved for sure) but also for the application. What if the
    application put the fileName object in a map? You might argue after
    createFile/createDirectory such application should recreate the
    map-entry, but is this really logical?

    e) We can ignore b-d if we NT allow to change the type of a file (case
    a). In that case the statement on line 02: will fail with an
    FileSystemException then.

    With way e:

    01: F fo = VFS.getManager().resolveFile("/any/EXISTING/dir")

    f) should this resolve fail as it exists as directory but the filename
    points to a file?

    K, thats all for now ;-)

    Mario

    To unsubscribe, e-mail: commons-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: commons-user-help (AT) jakarta (DOT) apache.org
  • No.12 | | 219 bytes | |

    No answers to this topic?
    Mario
    To unsubscribe, e-mail: commons-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: commons-user-help (AT) jakarta (DOT) apache.org
  • No.13 | | 5221 bytes | |

    hi,

    Mario Ivankovits wrote:
    Hi!

    Without to spread the feeling a decision has been made ;-) I would like
    to discuss another aspect of uri-style resolving names.

    First of all, VFS's behaviour on this topic should be consistent, it
    should not matter if the directory/file exists or not, the filename is
    the only "reality".

    this is a sane approach

    my proposition is that the resolution algorithm should simply rely on
    the type of the base file ; 3 cases :
    -the type is explicitely a directory (/path/to/name/)
    -the type is implicitely a directory (.createDirectory() or
    setType(DIRECTRY))
    in both cases, we have a DIRECTRY, we know how to resolve from a base
    DIRECTRY
    -otherwise the base file is a FILE or IMAGINARY and behaves like a FILE,
    we know how to resolve from a base FILE

    /path/to/name/
    IS a directory
    if it doesn't yet exist, .createFile() should call .createDirectory()

    /path/to/name
    MAY BE a directory
    if it doesn't yet exist, .createFile() and .createDirectory() won't do
    the same

    about names consistency :
    /path/to/name/ is a DIRECTRY which name is /path/to/name
    /path/to/name is IMAGINARY which name is /path/to/name
    createDirectory() switch the file type to DIRECTRY
    createDirectory() switch the file type to FILE

    now, resolving a file on a base that is implicitely or explicitely a
    DIRECTRY can be done

    on a web server, when a file have to be resolved, it usually check if
    the name is a directory or not ; in the first case, it appends a "/" to
    the name ; as you said, VFS must not check it, it must decide only from
    the name or from previous operations (such as .createDirectory())

    concretely, users that are dealing with names that are considered as
    directory must end the name with "/"

    warnings :
    -additionally, when VFS build a child list, it should mark each item as
    FILE or DIRECTRY (i hope it is already the case, as this operation
    involves the underlying FS)
    -the type of the file (FILE or DIRECTRY) may be fixed when we attempt
    to attach it

    Consider the following chaing of operations:

    01: F fo = VFS.getManager().resolveFile("/any/new/dir/name/")
    02: fo.createFile();
    03: fo.delete();
    04: fo.createDirectory();

    Now my questions:
    a) Should it be allowed to call createFile on a "directory"? Notice: The
    "fo" is nonexistent. Currently the decision if it is a directory or file
    will be made when calling one of the create* methods and can be changed
    (sure unlikley, but posssible - and if not it is a bug ;-) )

    02: fo.createFile() must create a directory, because it's type is
    DIRECTRY because its name ends with "/" ($)

    b) If we allow to change the type of the file/directory is it logical
    that its filename changes too? e.g. after 02: it will be
    /any/new/dir/name and after 04 it will be /any/new/dir/name/ again

    is it a shortcut on real FS operations, or just a modification on names ?
    switching file to dir :
    -deleteFile()
    -createDirectory()
    switching dir to file :
    -deleteFile() [and its content]
    -setType( FILE ) [otherwise it will create a dir again, see ($)]
    -createFile()

    c) And thus is it logical that after 02/04 a resolveFile() will behave
    differently?

    the type rules the behaviour

    d) Filename changes are a real problem, not only for the cache (which
    could be solved for sure) but also for the application. What if the
    application put the fileName object in a map? You might argue after
    createFile/createDirectory such application should recreate the
    map-entry, but is this really logical?

    that's why i propose to delete the trailing "/" from the name ; the
    object is the same in the cache and in maps

    e) We can ignore b-d if we NT allow to change the type of a file (case
    a). In that case the statement on line 02: will fail with an
    FileSystemException then.

    With way e:

    01: F fo = VFS.getManager().resolveFile("/any/EXISTING/dir")

    f) should this resolve fail as it exists as directory but the filename
    points to a file?

    the resolution algorithm doesn't (mustn't) involve the underlying FS, it
    just resolves relative names from a base name

    K, thats all for now ;-)

    Mario

    To unsubscribe, e-mail: commons-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: commons-user-help (AT) jakarta (DOT) apache.org

    about consistency between names and FS :
    when /path/to/name/ (which is now a DIRECTRY) appears to be a real FILE
    on the underlying FS, i think an exception should be thrown when
    attch()ing it, because the user do really think he handles a directory

    conclusion, the FileName should also have a FileType ; when attached, it
    would be replaced by those of the F ; in fact, when a FileName
    is bound to a F, they certainly have the same FileType ; what
    is expected in all this stuff is that a standalone FileName (that
    doesn't belong to a F) must have a FileType

    or something like this :)
  • No.14 | | 86 bytes | |

    Mario Ivankovits wrote:
    No answers to this topic?
    not during my hollidays :)
  • No.15 | | 1341 bytes | |

    Hi Philippe!
    >No answers to this topic?

    not during my hollidays :)
    Hope you are full of energy now ;-)

    I read your new post and might comment in detail later - overall we are
    on the same line, except for one thing:

    *Is it really worth it?*

    I am still not convinced in this very basic question. It IS a lot of
    work and introduce some new logic a user might have to deal with.
    Currently we have a "Very Fine and Simple" (VFS ;-) ) wrapper around
    some filesystems and I tried and still try to remove any logic from VFS
    which I found not necessary.

    Everyone is free to add its own VfsUtils.resolveNameURI() class/methods
    which behaves the URI way.
    In difference to VFS which has to deal with filename-types
    (directory/file) to work in all cases, such a method might only work if
    the file/directory already exists, but I think this is the major case.

    Please give me some more arguments other than "your filename looks like
    an URI so you should behave like an URI".
    Its easy to add a comment on the website which state the filename is NT
    a URI.

    Mario

    To unsubscribe, e-mail: commons-user-unsubscribe (AT) jakarta (DOT) apache.org
    For additional commands, e-mail: commons-user-help (AT) jakarta (DOT) apache.org
  • No.16 | | 4331 bytes | |

    Mario Ivankovits wrote:
    Hi Philippe!

    No answers to this topic?
    >>

    >not during my hollidays :)


    Hope you are full of energy now ;-)

    bugs are frightenned of my return ;)

    I read your new post and might comment in detail later - overall we are
    on the same line, except for one thing:

    *Is it really worth it?*

    sure !

    I am still not convinced in this very basic question. It IS a lot of
    work and introduce some new logic a user might have to deal with.
    Currently we have a "Very Fine and Simple" (VFS ;-) ) wrapper around
    some filesystems and I tried and still try to remove any logic from VFS
    which I found not necessary.

    this is the reason for which it is necessary to have a *common*
    resolution mechanism ; resolving names are scheme independant ; but as i
    said in my previous post, a name could contain an information about the
    file type : if it is a real DIRECTRY or not ; we are sure if a name
    ends with "/", but we should "normalize" names by removing the trailing "/"

    URI resolution is really a problem to solve on the foundation of VFS

    user side, they just have to append a "/" if they really want to force
    VFS to understand a name like a directory (that's what i did in my XML
    catalogs)

    Everyone is free to add its own VfsUtils.resolveNameURI() class/methods
    which behaves the URI way.

    too late ! the trailing "/" will be lost after "normalization"
    this normalization must be done, because in any case you still have a
    problem with "/path/to/name" and "/path/to/name/" ; they musn't be
    different, as you noticed it yourself ! the only thing we are sure, is
    that the former is a DIRECTRY, the latter is IMAGINARY, until it is
    attach()ed or createDirectory() is used

    that's why a FileType field is needed in the name ; i noticed that
    AbstractF could be easily moved to FileName.type because
    its constructor needs a FileName

    In difference to VFS which has to deal with filename-types
    (directory/file) to work in all cases, such a method might only work if
    the file/directory already exists, but I think this is the major case.

    well, not really : we are really talking about *name* resolving, which
    is (must be) transparent to the underlying FS : resolving names are
    scheme independant

    example where content is not accessed :
    I work with XML catalogs where URIs are resolved from base URIs : when
    an entry URI is handled, its content is never used (never attach()ed) ;
    the content of the resolved URI on the other side is used
    but in some case, it is not used ! for example, it may be use to build a
    link ; a web application won't do anything server side with a URI ; the
    web browser client side will

    Please give me some more arguments other than "your filename looks like
    an URI so you should behave like an URI".
    Its easy to add a comment on the website which state the filename is NT
    a URI.

    what would be the consistency of VFS in this case ?
    how to resolve *names* with VFS if relative paths were used in HTML
    files ?

    concessions have already been made regarding URIs by adding semantic to
    "!" to allow scheme embedding ; but it was *necessary* ; now what
    people would think if they use a tool that is *deliberately* not
    compliant to RFCs ?

    i already have to deal with such a problem : a vendor was using "URIs"
    that were not well-formed regarding RFCxxx ; it looks like this :
    "foo://path/to/file" ; but when i parsed the URI, the URI parser tells
    that the path part was "/to/file" and the host was "path" ; they simply
    forgot a "/" ("foo:///path/to/file"), becaming not compliant with RFCs ;
    it doesn't look professional :( ; one solution was to parse twice this
    pseudo-URI : 1 to fix the problem, 1 to use the standard URI parser ;
    that's what people hate to do : a hack so that they can use their
    preferred tools (that are compliant to standards)

    you will regret sooner or later to break this ; VFS would be more used
    if you proclaim that you are RFC compliant except for the usage of "!"

    i'm sure you know i'm right :)

Re: bug ?


max 4000 letters.
Your nickname that display:
In order to stop the spam: 5 + 4 =
QUESTION ON "Java"

EMSDN.COM