<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!--
This file is also used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the
release process easy :-).

2.  Do a JIRA search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
SVN commits. Set the project.properties' maven.changelog.range
property to the number of days since the last release.

To generate the release notes from this file:

mvn -N changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

then tweak the formatting if necessary
and commit

The <action> type attribute can be add,update,fix,remove.
-->

<document xmlns="http://maven.apache.org/changes/1.0.0">
  <properties>
    <title>Apache Commons VFS Changes</title>
    <author email="dev@commons.apache.org">Apache Commons Developers</author>
  </properties>

  <body>
    <release version="2.1" date="TBD" description="New features and bug fix release.



Please note that the Clirr report shows several errors.

These may affect source compatibility.

However they should not affect binary compatibility, as explained below.



FileContent, FileName, FileObject, FileSystemManager, RandomAccessContent:

The above interfaces have been updated to add new methods.

This does not affect binary compatibility; for details please see:

https://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.5.3-100

The above changes may affect source compatibility.


Changes to method parameters and return types in TarFileObject and TarFileSystem

The original parameter/return types were the following:

org.apache.commons.vfs2.provider.tar.TarEntry

org.apache.commons.vfs2.provider.tar.TarInputStream

The above were package protected, so any methods using them did not form part of the public API.

Therefore source and binary compatibility is not affected.">
<!--       <action issue="VFS-443" dev="ggregory" type="update" due-to="nickallen"> -->
<!--        [Local] Need an easy way to convert from a FileObject to a File. -->
<!--       </action> -->
<!-- START Might need to be moved to the next version -->
     <action issue="VFS-607" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.10 to 1.11.
     </action>
     <action issue="VFS-608" dev="ggregory" type="update">
        Update Apache Commons Net from 3.4 to 3.5.
     </action>
<!-- END Might need to be moved to the next version -->
     <action issue="VFS-424" dev="ecki" type="fix">
        Fix StandardFileSystemManager class loading so it works in a OSGi environment.
     </action>
      <action issue="VFS-490" dev="ecki" type="fix">
        [vfsclassloader] Do not open folders with .jar extension. Adds tests.
     </action>
      <action issue="VFS-582" dev="ecki" type="fix">
        [tests] revert rename of getTestDirectoryFile to make test classes more compatible for external providers.
     </action>
      <action issue="VFS-480" dev="ecki" type="fix">
        Make startup of SoftRefsFileCache cleaner thread work and less racy to avoid leaks.
     </action>
      <action issue="VFS-549" dev="ecki" type="fix">
        Use File.seperator instead of getProperty("file.separator").
     </action>
      <action issue="VFS-567" dev="ecki" type="fix" due-to="Antonio Petrelli">
        [ftp] Ignore exceptions while QUIT/disconnect.
     </action>
      <action issue="VFS-572" dev="ecki" type="fix" due-to="Sandra Parsick">
        [sftp] better documentation for knownhosts file option.
     </action>
      <action issue="VFS-574" dev="ecki" type="fix">
        Ensure FileOpertionProviders are closed. Adds some testcases.
        The error code for missing operations exceptions corrected: vfs.operation/operation-not-supported.error
     </action>
      <action issue="VFS-279" dev="ecki" type="fix" due-to="Didier Earith, Simon Legner">
        [local] Avoid ClassCastException when replicating local files while OnCall caching is active.
      </action>
      <action issue="VFS-297" dev="joehni" type="fix" due-to="Kirill Safonov, Jimmy Praet">
        [sftp] VSF fails to reuse FileSystem instances if FileSystemOptions contain
        an array as value. Reported for SFTP using identities.
      </action>
      <action issue="VFS-198" dev="ecki" type="add" due-to="Andrew Franklin, Simon Legner">
        [http] Make user agent configurable.
      </action>
      <action issue="VFS-202" dev="ecki" type="fix" due-to="Sergey Vladimirov, Simon Legner">
        [http] Allow URLs responding with 405 to HEAD requests.
      </action>
      <action issue="VFS-490" dev="ecki" type="fix">
        [hdfs] Make OSGi package imports for hdfs resolution=optional.
        Removed all scopes from dependency management.
      </action>
      <action issue="VFS-560" dev="ecki" type="fix">
        [http] avoid initial HEAD request to root of HttpFileSystem as it might be wrong context.
      </action>
      <action issue="VFS-236" dev="ecki" type="fix" due-to="Matt Casters">
        [smb] Allow SMB to be used with no authentication.
      </action>
      <action issue="VFS-564" dev="ecki" type="fix" due-to="Dmitry Konstantinov">
        Make some loggers static.
      </action>
      <action issue="VFS-555" dev="rwhitcomb" type="add">
        [hdfs] Add the ability to specify an HDFS configuration file with HdfsFileSystemConfigBuilder.
      </action>
      <action issue="VFS-557" dev="ecki" type="fix">
       [webdav][test] Create WebDav test directory in target/test. Avoid creating core/jackrabbit/tmp.
       Logfiles of Jackrabbit are preserved when -DWebdavProviderTestCase.Debug=true is specified.
      </action>
      <action issue="VFS-558" dev="ecki" type="fix">
       Make moveTo() and getParent() work with CacheStrategy.ON_CALL.
       In case of FTP Provider it would lead otherwise to an UnsupportedOperationException.
      </action>
      <action dev="ecki" type="fix">
       [sandbox] RACRandomAccessFile is now in org.apache.commons.vfs2.util package (so sandbox has only one overlapping package).
      </action>
      <action issue="VFS-530" dev="ecki" type="update" due-to="Dave Marion">
       [hdfs] Use stable Apache Hadoop 2.6 dependencies.
      </action>
      <action dev="ecki" type="add">
       [example] make VFS Shell print version and implement new 'info' command.
      </action>
      <action issue="VFS-552" dev="ecki" type="fix">
       [sandbox] include vfs-providers.xml in JAR for dynamic registration of mime and smb providers.
      </action>
      <action issue="VFS-551" dev="ecki" type="fix" due-to="David Camilo Espitia Manrique">
       Javadoc: make it clear that DefaultCryptor is only an obfuscation function.
      </action>
      <action issue="VFS-309" dev="ecki" type="fix">
       DefaultFileContent will remove thread data whenever possible to avoid leaks.
      </action>
      <action issue="VFS-487" dev="ecki" type="fix" due-to="Dave Marion">
       DefaultFileMonitor detects recreated files.
      </action>
      <action issue="VFS-523" dev="ecki" type="fix" due-to="Roger Whitcomb">
       [HDFS] Make HdfsFileObject.equal use system hashcode/equals instead of
       wrongly comparing file path only.
      </action>
      <action issue="VFS-544" dev="ecki" type="fix">
       [Virtual] Allow virtual file systems and virtual file system provider
       to be closed, to avoid memory leak.
      </action>
      <action issue="VFS-142" dev="ecki" type="fix" due-to="Ryan Boettcher">
       Use ThreadLocal.remove() to clean out FileContentThreadData objects.
      </action>
      <action issue="VFS-545" dev="ecki" type="fix">
       Make DefaultFilesCache remove reference to filesystem when it is cleared (closed).
      </action>
      <action issue="VFS-521" dev="ecki" type="fix">
       [Ram][Tests] Make RAM provider test pass on Java 8
       (JDK-8042377, self-suppression not permitted, MonitorOutputStream#close()).
      </action>
      <action issue="VFS-601" dev="ggregory" type="update">
       Update Apache Commons Net from 3.3 to 3.4.
      </action>
      <action issue="VFS-602" dev="ggregory" type="update">
       Update Apache Commons IO from 2.4 to 2.5.
      </action>
      <action issue="VFS-579" dev="ggregory" type="update">
       Update Jsch from 0.1.51 to 0.1.53.
      </action>
      <action issue="VFS-542" dev="ggregory" type="update">
       Update Jsch from 0.1.50 to 0.1.51.
      </action>
      <action issue="VFS-578" dev="ggregory" type="update">
       Update Apache Commons Compress from 1.9 to 1.10.
      </action>
      <action issue="VFS-541" dev="ggregory" type="update">
       Update Apache Commons Compress from 1.6 to 1.9.
      </action>
      <action issue="VFS-540" dev="ggregory" type="update">
       Update Apache Commons Logging from 1.1.3 to 1.2.
      </action>
      <action issue="VFS-539" dev="ggregory" type="update">
       Update Apache Commons Lang from 3.1 to 3.3.2.
      </action>
      <action issue="VFS-532" dev="ggregory" type="add" due-to="Gareth Daniel Smith">
       [FTP] Allow configuring remoteVerificationEnabled on FTPClient instances.
      </action>
      <action issue="VFS-338" dev="ecki" type="fix" due-to="Daniel R.">
       [Local][Tests] Avoid IndexOutOfBoundsException when validating local file URIs.
      </action>
      <action issue="VFS-526" dev="ecki" type="update">
       [HDFS][Tests] Support HDFS testing on Windows (but keep profile "no-hdfs" enabled on Windows VFS-529).
      </action>
      <action issue="VFS-453" dev="ecki" type="update" due-to="Jiri Syrovy">
       [HTTP][WEBDAV] Add file system options for connect and socket timeout.
      </action>
      <action issue="VFS-167" dev="ecki" type="update" due-to="Jimmy Praet">
       [FTP] Allow Proxy support to file system options.
      </action>
      <action issue="VFS-520" dev="ecki" type="update">
       Make JavaDoc compatible with Java 8 tool.
      </action>
      <action issue="VFS-518" dev="ggregory" type="update" due-to="Roland Illig">
        Documentation of FileSystemOptions should be more helpful.
      </action>
      <action issue="VFS-500" dev="ggregory" type="update" due-to="Bernd Eckenfels">
        VFSClassLoader.findResources missing.
      </action>
      <action issue="VFS-514" dev="ggregory" type="update" due-to="Bernd Eckenfels">
        [tests] PermissionsTests leaves unclean test directory.
      </action>
      <action issue="VFS-501" dev="ggregory" type="update" due-to="Yves Schumann">
        Hide passwords from log/console output.
      </action>
      <action issue="VFS-496" dev="ggregory" type="update" due-to="Bernd Eckenfels">
        Resource translation issues.
      </action>
      <action issue="VFS-494" dev="ggregory" type="update" due-to="Allen Xudong Cheng">
        [SFTP] No support for SFTP servers with non Latin-1 file name encoding.
      </action>
      <action issue="VFS-368" dev="ggregory" type="update" due-to="Brendan Long">
        [SFTP] Documentation implies that "userDirIsRoot" defaults to true.
      </action>
      <action issue="VFS-265" dev="ggregory" type="update" due-to="Scott Bjerstedt">
        [FTP] Set user dir as root dir by default.
      </action>
      <action issue="VFS-489" dev="ggregory" type="fix" due-to="Bernd Eckenfels">
        [tests] ProviderWriteTests#testListener does not fail cleanly.
      </action>
      <action issue="VFS-486" dev="ggregory" type="fix" due-to="Sam Haldane">
        DefaultFileMonitor sleeps for twice the specified delay when checkPerRun > 0.
      </action>
      <action issue="VFS-484" dev="ggregory" type="update">
        [SFTP] Update Jsch to 0.1.50 from 0.1.49.
      </action>
      <action issue="VFS-482" dev="ggregory" type="fix">
        Wrong assertion messages in RAM provider test case.
      </action>
      <action issue="VFS-507" dev="ggregory" type="update">
        Update to Apache Commons Collection 4.1 from 3.2.1 and use generics.
      </action>
      <action issue="VFS-476" dev="ggregory" type="update">
        Update Apache Commons Logging to 1.1.3 from 1.1.2.
      </action>
      <action issue="VFS-475" dev="ggregory" type="update">
        Update Apache Commons Net to 3.3 from 3.2.
      </action>
      <action issue="VFS-506" dev="ggregory" type="update">
        [Tar][Bzip2] Update Apache Commons Compress to 1.6 from 1.5.
      </action>
      <action issue="VFS-471" dev="ggregory" type="update">
        Update to Apache Commons Compress 1.5.
      </action>
      <action issue="VFS-469" dev="joehni" type="remove">
        Remove unused dependency to javax.jcr:jcr.
      </action>
      <action issue="VFS-283" dev="joehni" type="update">
        [SFTP] SFTP provider did not support passphrase-protected keys nor the exchange of a public key with
        a requesting SFTP server. To support such triples (private key/passphrase/public key) instead of private
        keys only, a new structure EntityInfo has been created. SftpFileSystemConfigBuilder has now the new
        getter and setter methods getIdentityInfo and setIdentity info which replace the now deprecated methods
        getIdentities and setIdentities.
      </action>
      <action issue="VFS-460" dev="joehni" type="fix">
        Dependency to commons-compress set as optional.
      </action>
      <action issue="VFS-468" dev="joehni" type="add">
        [FTPS] Add option for KeyManager (and TrustManager) to support FTPS servers that ask for the client certificate for authentication.
      </action>
      <action issue="VFS-464" dev="joehni" type="fix">
        StaticUserAuthenticator should return only requested authentication data.
      </action>
      <action issue="VFS-463" dev="joehni" type="update">
        FileSytemConfigBuilder supports system properties for the value of enum-based configuration entries.
      </action>
      <action issue="VFS-462" dev="joehni" type="update">
        [FTPS] Deprecate FtpsFileSystemConfigBuilder.setFtpsType and FtpsFileSystemConfigBuilder.getFtpsType
        in favor of FtpsFileSystemConfigBuilder.setFtpsMode and FtpsFileSystemConfigBuilder.getFtpsMode which
        use new enum FtpsMode instead.
      </action>
      <action issue="VFS-461" dev="joehni" type="fix">
        [FTP/FTPS] ConfigBuilder does not consider system properties for the value of SoTimeout and Encoding.
      </action>
      <action issue="VFS-412" dev="joehni" type="add" due-to="Jose Juan Montiel">
        [FTPS] Add support for command to set the DataChannelProtectionLevel.
      </action>
      <action issue="VFS-459" dev="joehni" type="update">
        [FTP/FTPS] Sent commands and the received answer is logged at debug level.
      </action>
      <action issue="VFS-458" dev="joehni" type="fix">
        [FTPS] Provider missed functionality and bug fixes already available for the FTP provider.
      </action>
      <action issue="VFS-452" dev="ggregory" type="fix" due-to="Jean-Marc Borer">
        [HTTP] HttpFileObject read/write attributes should reflect underlying FileSystem capabilities.
      </action>
      <action issue="VFS-285" dev="tn" type="fix" due-to="Kirill Safonov">
        AbstractFileObject.getChildren() may corrupt its internal state if a filename
        can not be resolved.
      </action>
      <action issue="VFS-450" dev="ggregory" type="fix" due-to="Dave Marion">
        [HDFS] HDFSFileSystem.resolveFile() does not honor CacheStrategy.ON_RESOLVE.
      </action>
      <action issue="VFS-442" dev="ggregory" type="add" due-to="Dave Marion">
        [HDFS] Add an HDFS FileSystem Provider.
      </action>
      <action issue="VFS-448" dev="ggregory" type="fix">
        commons-vfs 2.0 JAR has flawed OSGi MANIFEST.MF.
      </action>
      <action issue="VFS-447" dev="ggregory" type="add">
        [FTP/FTPS] Update Apache Commons Net to 3.2 from 3.1.
      </action>
      <action issue="VFS-445" dev="ggregory" type="add">
        Add FileSystemManager.resolveFile(URI) and resolveFile(URL).
      </action>
      <action issue="VFS-440" dev="ggregory" type="add" due-to="bpiwowar">
        [SFTP] Stream (e.g. netcat) proxy for Sftp file system (aka ProxyCommand).
      </action>
      <action issue="VFS-439" dev="ggregory" type="fix" due-to="pensecit">
        StaticUserAuthenticator usage example wrong.
      </action>
      <action issue="VFS-437" dev="ggregory" type="fix" due-to="denniszhu, danttran, jpowang">
        [FTP] StackOverFlowError getting the type of a directory with a symbolic link to a parent directory with the same name.
      </action>
      <action issue="VFS-435" dev="ggregory" type="fix" due-to="george scott">
        FileSystemConfigBuilder does not use prefix for some system property lookups.
      </action>
      <action issue="VFS-434" dev="ggregory" type="fix">
        FileSystemException should reuse IOException's chained exception.
      </action>
      <action issue="VFS-433" dev="ggregory" type="fix">
        [WebDAV] Message "vfs.provider.webdav/propfind.error" is not defined.
      </action>
      <action issue="VFS-430" dev="ggregory" type="fix" due-to="antonin.stefanutti">
        The SoftRefFilesCache class logs clear text password.
      </action>
      <action issue="VFS-432" dev="ggregory" type="add">
        [HTTP][WebDAV] Allow HTTP follow redirect.
      </action>
      <action issue="VFS-431" dev="ggregory" type="add">
        FileSystemOption does not implement toString().
      </action>
      <action issue="VFS-429" dev="ggregory" type="fix">
        Remove extra FileSystem ivar in AbstractFileObject subclasses with generics.
      </action>
      <action issue="VFS-427" dev="ggregory" type="fix" due-to="awelynant">
        [HTTP] NPE on HttpFileObject.getContent().getContentInfo().
      </action>
      <action issue="VFS-405" dev="ggregory" type="add" due-to="dwaszak">
        Get/set the file permissions.
      </action>
      <action issue="VFS-457" dev="joehni" type="update">
        Update test dependencies: sshd-core version 0.7.0 to 0.8.0; mina-core 2.0.4 to 2.0.7; junit 4.11 to 4.12; slf4j-* 1.5.5 to 1.5.11
      </action>
      <action issue="VFS-456" dev="joehni" type="update">
        Use org.bouncycastel:bcprov-jdk16 instead of org.bouncycastle:bcprof-jdk15on since Java 1.6 is required.
      </action>
      <action issue="VFS-415" dev="ggregory" type="update">
        Update VFS requirement to Java 1.6.
      </action>
      <action issue="VFS-426" dev="ggregory" type="add" due-to="daniel.bergholm">
        HTTP URL query string not part of cache key.
      </action>
      <action issue="VFS-425" dev="ggregory" type="add">
        Add API FileObject.isExecutable().
      </action>
      <action issue="VFS-421" dev="ggregory" type="add" due-to="bpiwowar">
        [SFTP] Configure a custom Identity Repository.
      </action>
      <action issue="VFS-418" dev="ggregory" type="update">
        Update to Apache Commons Compress 1.4.1.
      </action>
      <action issue="VFS-417" dev="ggregory" type="add">
        [RAM][Local] Add and implement new API: RandomAccessContent.setLength(long).
      </action>
      <action issue="VFS-406" dev="ggregory" type="fix" due-to="mp1">
        [RAM] resize throws ArrayOOBE when shrinking in size.
      </action>
      <action issue="VFS-321" dev="ggregory" type="update" due-to="sebb">
        AbstractFileObject sometimes uses getFileSystem() and sometimes references "fs" field directly.
      </action>
      <action issue="VFS-327" dev="ggregory" type="update" due-to="sebb">
        UriParser.canonicalizePath possible NPE for filenameParser.
      </action>
      <action issue="VFS-353" dev="ggregory" type="fix" due-to="bergander">
        [FTP] Client should call logout before disconnecting.
      </action>
      <action issue="VFS-408" dev="ggregory" type="fix" due-to="anilm2@yahoo.com">
        CompressedFileFileObject Exception thrown when container file has no extension.
      </action>
      <action issue="VFS-400" dev="ggregory" type="add">
        Add a FileSelector based on regular expressions.
      </action>
      <action issue="VFS-258" dev="ggregory" type="fix" due-to="mzawirski">
        [SFTP][RAM] Unsafe casting to AbstractFileObject subclasses in doRename().
      </action>
      <action issue="VFS-254" dev="ggregory" type="add" due-to="mzawirski">
        Let FileObject and FileContent extend java.io.Closeable.
      </action>
      <action issue="VFS-413" dev="ggregory" type="fix" due-to="polivenok">
        [FTP] No support for FTP servers with non Latin-1 control encoding.
      </action>
      <action issue="VFS-252" dev="ggregory" type="add">
        [SMB] SmbFileObject does not support setLastModifiedTime while jcifs supports it.
      </action>
      <action issue="VFS-200" dev="ggregory" type="fix">
        [SFTP] Failure when files are very large.
      </action>
      <action issue="VFS-416" dev="joehni" type="update">
        [SFTP] Update Jsch to version 0.1.49 from 0.1.47.
      </action>
      <action issue="VFS-296" dev="ggregory" type="fix" due-to="andreasp">
        [FTP] FTP socket timeout setting doesn't work if connect hangs.
      </action>
      <action issue="VFS-313" dev="ggregory" type="add" due-to="bdavis@saintandreas.org">
        [FTP] Configuration does not include option for setting socket timeout.
      </action>
      <action issue="VFS-414" dev="ggregory" type="add">
        [FTP] Add config API to set the file type.
      </action>
      <action issue="VFS-182" dev="ggregory" type="add">
        [FTP] Usage of FTP with heterogeneous FTP server (possibility of using Ascii file type).
      </action>
      <action issue="VFS-395" dev="ggregory" type="update">
        [POM] Remove maven-scm-* dependencies.
      </action>
      <action issue="VFS-411" dev="ggregory" type="update">
        [SFTP] Update Jsch to version 0.1.47 from 0.1.46.
      </action>
      <action issue="VFS-410" dev="ggregory" type="fix" due-to="mstockhammer">
        [SFTP] SftpFileObject getInputStream(long) reads the whole file into memory.
      </action>
      <action issue="VFS-409" dev="ggregory" type="update">
        Update Apache Commons Compress to 1.4 from 1.3.
      </action>
      <action issue="VFS-407" dev="ggregory" type="fix" due-to="mp1">
        [RAM] Reading a RAM FileSystem file fails because it never returns EOF -1.
      </action>
      <action issue="VFS-404" dev="ggregory" type="update">
        [FTP][FTPS] Update Apache Commons Net to 3.1 from 3.0.1.
      </action>
      <action issue="VFS-402" dev="ggregory" type="update">
        [WebDAV] Update Apache Jackrabbit 1.5.2 to 1.6.5.
      </action>
      <action issue="VFS-401" dev="ggregory" type="update">
        Update JSch to 0.1.46 from 0.1.45 for the SFTP provider.
      </action>
      <action issue="VFS-392" dev="ggregory" type="update">
        Build tests WebDAV file system with an embedded WebDAV server (Apache Jackrabbit).
      </action>
      <action issue="VFS-391" dev="ggregory" type="update">
        Build tests URL HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
      </action>
      <action issue="VFS-390" dev="ggregory" type="update">
        Use variable argument list in org.apache.commons.vfs2.util.Messages instead of Object[].
      </action>
      <action issue="VFS-389" dev="ggregory" type="update">
        Use variable argument lists in FileSystemException instead of Object[]s.
      </action>
      <action issue="VFS-388" dev="ggregory" type="update">
        Build tests SFTP file system with an embedded SFTP server (Apache MINA).
      </action>
      <action issue="VFS-387" dev="ggregory" type="update">
        Build tests FTP file system with an embedded FTP server (Apache MINA).
      </action>
      <action issue="VFS-386" dev="ggregory" type="update">
        Build tests HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
      </action>
      <action issue="VFS-385" dev="ggregory" type="update">
        Add HTTP status code to HTTP file provider exception messages when available.
      </action>
      <action issue="VFS-384" dev="ggregory" type="update">
        Update Apache Commons Net to 3.0.1 from 2.2 for FTP and SFTP providers.
      </action>
      <action issue="VFS-383" dev="ggregory" type="update">
        Update JSch to 0.1.45 from 0.1.42 for the SFTP provider.
      </action>
      <action issue="VFS-382" dev="ggregory" type="fix">
        SFTP getChildren() does not fail when called on a file.
      </action>
      <action issue="VFS-381" dev="ggregory" type="add">
        Iterate over a FileObject using the Java "foreach" statement, to provide all descendents of a FileObject.
      </action>
      <action issue="VFS-380" dev="ggregory" type="fix">
        FTP connect.error message used instead of SFTP connect.error message.
      </action>
      <action issue="VFS-379" dev="ggregory" type="update">
        Replace custom BZIP2 code with Apache Commons Compress 1.3.
      </action>
      <action issue="VFS-378" dev="ggregory" type="fix">
        Tar error message are missing from resource file.
      </action>
      <action issue="VFS-377" dev="ggregory" type="update">
        Replace custom TAR code with Apache Commons Compress 1.3.
      </action>
      <action issue="VFS-375" dev="ggregory" type="update">
        Upgrade to Apache Commons Compress 1.3 from 1.2.
      </action>
      <action issue="VFS-374" dev="ggregory" type="fix">
        Incorrect lazy initialization of static field org.apache.commons.vfs2.util.Messages.resources in org.apache.commons.vfs2.util.Messages.findMessage(String)Add FileContent write APIs.
      </action>
      <action issue="VFS-373" dev="ggregory" type="add">
        Add FileContent write APIs.
      </action>
      <action issue="VFS-372" dev="ggregory" type="add">
        Add constructors FileDepthSelector() and FileDepthSelector(int).
      </action>
      <action issue="VFS-371" dev="ggregory" type="add">
        Add FileObject API deleteAll().
      </action>
      <action issue="VFS-370" dev="ggregory" type="add">
        Add a FileExtensionSelector class.
      </action>
      <action issue="VFS-367" dev="ggregory" type="add">
        Add APIs FileObject isFile(), FileObject isFolder(), and FileName isFile().
      </action>
      <action issue="VFS-366" dev="ggregory" type="update">
        Can't sort a List of FileObject's, FileObject to implement Comparable&lt;FileObject&gt;.
      </action>
      <action issue="VFS-341" dev="rgoers" type="update" due-to="Rajika Kumarasiri">
        Enable logging of JSch using the Commons Logging Log object in SftpClientFactory.
      </action>
      <action issue="VFS-355" dev="rgoers" type="fix" due-to="Miroslav Pokorny">
        The read method of RamFileRandomAccessContent's input stream does not return -1 at eof.
      </action>
      <action issue="VFS-356" dev="rgoers" type="fix">
        Throw an IOException if an attempt is made to seek to a position before the start of the file.
      </action>
      <action issue="VFS-359" dev="rgoers" type="fix" due-to="Miroslav Pokorny">
        Don't delete a RamFileObject if it is open.
      </action>
      <action issue="VFS-352" dev="rgoers" type="fix">
        ZipFileSystem now uses an internal Map as a cache for all the files in the zip archive.
      </action>
      <action issue="VFS-351" dev="rgoers" type="fix" due-to="John Backstrand">
        Chain the SftpException in the FileSystemException.
      </action>
      <action issue="VFS-361" dev="rgoers" type="update">
        Upgrade commons collections version to 3.2.1.
      </action>
      <action issue="VFS-325" dev="rgoers" type="fix" due-to="Larry Reeve">
        Allow # character in file names.
      </action>
      <action issue="VFS-335" dev="rgoers" type="fix">
        Use atomic variables in MonitorInputStream.
      </action>
      <action issue="VFS-364" dev="rgoers" type="fix">
        Check the href in the response for just a path in addition to a full uri.
      </action>
    </release>
    <release version="2.0" date="2011-08-24" description="Backwards incompatible update of Commons VFS to Java 5">
      <action issue="VFS-348" dev="rgoers" type="fix" due-to="Stefan Bodewig">
        Update the version of commons-net.
      </action>
      <action issue="VFS-230" dev="rgoers" type="fix">
        Documented FileSystem capabilities on the web site.
      </action>
      <action issue="VFS-337" dev="rgoers" type="fix">
        AbstractFileObject and classes that extend from it use AbstractFileName in the constructor and in
        the createFile method.
      </action>
       <action issue="VFS-245" dev="rgoers" type="fix">
        AbstractFileName is not immutable as it should be. equals(), hashcode() and compareTo() have been modified
        to return the same results regardless of whether the FileType is changed.
      </action>
      <action issue="VFS-334" dev="sebb" type="fix">
        DefaultFileSystemConfigBuilder.getConfigClass() returns DefaultFileSystemConfigBuilder.class which is not a FileSystem
      </action>
      <action dev="rgoers" type="fix" issue="VFS-305" due-to="Tom">
        Add encoding option to FTP provider.
      </action>
       <action dev="rgoers" type="fix" issue="VFS-315" due-to="David Hausladen">
        Fix potential NullPointerException if the DavProperty is null or contains null values.
      </action>
       <action dev="rgoers" type="fix" issue="VFS-316" due-to="David Hausladen">
        Add option for preemptive authentication for HTTP based protocols.
      </action>
       <action dev="rgoers" type="fix" issue="VFS-322" due-to="Curtis Boyden">
        Allow tar files that contain files over 2GB in size.
      </action>
       <action dev="rgoers" type="fix" issue="VFS-324" due-to="sebb">
        Clear the cache in RamFileSystem and the children in RamFileData.
      </action>
      <action dev="sebb" type="fix" issue="VFS-319">
        Typo in FtpsFileSystemConfigBuilder.setFtpsType
      </action>
      <action dev="rgoers" type="fix" issue="VFS-227" due-to="Sergey Vladimirov">
        InputStream and RandomAccessContent memory leak in FileContentThreadData
      </action>
      <action dev="rgoers" type="update" issue="VFS-263" due-to="Ingo Maas">
        WebdavFileObject does not implement doSetAttribute()
      </action>
      <action dev="rgoers" type="fix" issue="VFS-259" due-to="Marek Zawirski">
        Http and Webdav FIleContentInfoFactory: undress to AbstractFileObject before casting
      </action>
      <action dev="rgoers" type="fix" issue="VFS-261" due-to="Simon Olofsson">
        WebDAV upload corrupts binary files
      </action>
      <action dev="rgoers" type="fix" issue="VFS-276" due-to="Vince Bonfanti">
        add ProviderTestConfig.getDefaultFileSystemManager() method
      </action>
      <action dev="rgoers" type="fix" issue="VFS-282" due-to="Alexey">
        SftpFileProvider and SftpFileSystemConfigBuilder can't change ssh authentication methods
      </action>
      <action dev="rgoers" type="fix" issue="VFS-269" due-to="Marek Zawirski">
        HttpFileObject: unsupported content over 2GB length
      </action>
      <action dev="rgoers" type="fix" issue="VFS-287" due-to="Mircea-Eugen Ionica">
        LocalFileName objects are not released from AbstractFileSystem.listenerMap when all listeners are removed.
      </action>
      <action dev="rgoers" type="fix" issue="VFS-216" due-to="Reetu Mutti">
        The FTP Configuration includes an option to set a timeout for the data connection, but not for the socket
        timeout. This is a problem, as idle sockets can cause your download to hang forever and never timeout.
      </action>
      <action dev="rgoers" type="fix" issue="VFS-289" due-to="Kirill Safonov">
        FTP connection is not released If exception is thrown out of FtpFileObject.doGetOutputStream().
      </action>
      <action dev="rgoers" type="fix" issue="VFS-286" due-to="Kirill Safonov">
        SftpFileObject.doListChildrenResolved() changes the working dir before doing ChannelSftp.ls() call.
        If ls() throws an exception, the current directory is not reset. All the subsequent operations that rely on the
        current dir will fail trying to change into nonexistent directory.
      </action>
      <action dev="jcarman" type="add" issue="VFS-264" due-to="Scott Bjerstedt">
        Add FTPS provider.
      </action>
      <action dev="rgoers" type="add" issue="VFS-244">
        Rename HttpRandomAccesContent to HttpRandomAccessContent.
      </action>
    </release>
  </body>
</document>
