            Apache Commons VFS Project 2.8.0
            RELEASE NOTES
            2021-03-06

The Apache Commons VFS Project team is pleased to announce the release of Apache Commons VFS Project 2.8.0.

Apache Commons VFS is a Virtual File System library.

Feature and maintenance release. Requires Java 8.

Changes in this version include:

New features:
o           Add ability to remove a provider from DefaultFileSystemManager #149. Thanks to Boris Petrov, Gary Gregory.
o           Add and use VFS.close(). Thanks to Gary Gregory.
o           [FTP] Add support for ControlKeepAliveReplyTimeout and ControlKeepAliveTimeout. Thanks to Gary Gregory, xiaqingyun.
o           [FTP] Tests can be configured with a custom FTP server command factory. Thanks to Gary Gregory, Michael Graham.
o VFS-257:  [FTP] Add support for MDTM to get more accurate last modified times. Thanks to Andrew Franklin, Michael Graham, Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.setDataTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.getConnectTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.getDataTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [FTP] Add FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP] Add HttpFileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP] Add HttpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP] Add HttpFileSystemConfigBuilder.getConnectionTimeout(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP] Add HttpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [SFTP] Add SftpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [SFTP] Add SftpFileSystemConfigBuilder.setSessionTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [SFTP] Add SftpFileSystemConfigBuilder.getConnectTimeout(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [SFTP] Add SftpFileSystemConfigBuilder.getSessionTimeout(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP4] Add Http4FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP4] Add Http4FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP4] Add Http4FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP4] Add Http4FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP5] Add Http5FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP5] Add Http5FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP5] Add Http5FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           [HTTP5] Add Http5FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version. Thanks to Gary Gregory.
o           Add AbstractFileSystem.AbstractFileSystem() for Serializable subclasses (PMD). Thanks to PMD, Gary Gregory.

Fixed Bugs:
o VFS-783:  Based on WEBDAV4 vs. WEBDAV4S set back-end http scheme #118. Thanks to satish-csi, Michael Osipov, Woonsan Ko, Gary Gregory.
o VFS-783:  Proper http scheme setting on webdav/webdav2 with unit tests #143. Thanks to satish-csi, Woonsan Ko, Gary Gregory.
o VFS-783:  [SFTP] SftpFileSystem.executeCommand() should use UTF-8 instead of the platform default. Thanks to Gary Gregory.
o           FileContentThreadData: lazy ArrayList initialization to save memory #155. Thanks to Max Kellermann.
o           Fix possible ClassCastException in DefaultFileSystemManager.freeUnusedResources(). Thanks to Gary Gregory.
o VFS-748:  TarProvider Incorrectly marks file IMAGINARY after garbage collection with WeakRefFilesCache, #97. Thanks to PeterAlfredLee, Gary Gregory.
o VFS-794:  Fix file resource leak in CombinedResources (properties file) which keeps the Commons VFS jar file open. Thanks to Gary Gregory.
o           Rework SoftRefFilesCache locking part 1 #158. Thanks to Max Kellermann, Bruno P. Kinoshita, Gary Gregory.
o VFS-785:  [HTTP4][HTTP5] Credentials conflict when root and proxy hosts are same name but different ports, #120. Thanks to satish bhor, Michael Osipov, Gary Gregory.
o           Rework SoftRefFilesCache locking #154. Thanks to Max Kellermann, Gary Gregory, Florent Guillaume, Bruno P. Kinoshita, Bernd.
o VFS-782:  Pass correct proxy authentication credentials #117. Thanks to satish-csi, Gary Gregory.

Changes:
o           Modify some code use for-each loop and stream API #142. Thanks to PeterAlfredLee.
o           Simplify some String tests in method Os#determineOsFamily #147. Thanks to PeterAlfredLee.
o           Update org.mockito:mockito-core 3.5.13 -> 3.8.0. Thanks to Gary Gregory.
o           Update org.apache.jackrabbit:jackrabbit-* 2.21.3 -> 2.21.5. Thanks to Gary Gregory.
o           Bump actions/checkout from v2.3.3 to v2.3.4 #144. Thanks to Dependabot.
o           Update tests from Log4j 2.13.3 to 2.14.0. Thanks to Gary Gregory.
o           Update com.puppycrawl.tools:checkstyle 8.36.2 -> 8.41. Thanks to Gary Gregory.
o           Update maven-checkstyle-plugin 3.1.1 -> 3.1.2. Thanks to Gary Gregory.
o           Update org.apache.httpcomponents:httpcore-nio 4.4.13 -> 4.4.14. Thanks to Gary Gregory.
o           Modify some calls of method Collection.toArray #145. Thanks to PeterAlfredLee, Gary Gregory.
o           Update commons.japicmp.version 0.14.3 -> 0.15.3. Thanks to Gary Gregory.
o           Minor Improvements, #152, #156, #160. Thanks to Arturo Bernal.
o           Update commons.spotbugs.version 4.1.4 -> 4.2.0. Thanks to Gary Gregory.
o           Update commons.spotbugs.impl.version 4.1.3 -> 4.2.0. Thanks to Gary Gregory.
o           Bump actions/cache from v2 to v2.1.4 #159. Thanks to Dependabot.
o           Update commons-net:commons-net 3.7.2-> 3.8.0. Thanks to Gary Gregory.
o           Update junit 4.13.1 -> 4.13.2. Thanks to Gary Gregory.
o           Update maven-pmd-plugin 3.13.0 -> 3.14.0. Thanks to Gary Gregory.
o VFS-795:  Code improvements for SoftRefFilesCache (simplify loop, use isEmpty, ...). Thanks to Max Kellermann.
o           Update commons-lang3 3.11 -> 3.12.0. Thanks to Gary Gregory.


Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS Project, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS Project website:

http://commons.apache.org/proper/commons-vfs/

Download page: http://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS Project 2.7.0
            RELEASE NOTES
            2020-10-19

The Apache Commons VFS Project team is pleased to announce the release of Apache Commons VFS Project 2.7.0.

Apache Commons VFS is a Virtual File System library.

Maintenance release. Requires Java 8.

Changes in this version include:

New features:
o VFS-757:  [SFTP] Configure whether exec detection is enabled #80. Thanks to ddg-igh.
o           Add proxy config for some HTTP/HTTPS test #108. Thanks to PeterAlfredLee.
o           Fix some test error when JVM's default language is not US en #107. Thanks to PeterAlfredLee.
o VFS-787:  Allow users to set proxy schemes like http/https #122. Thanks to satish bhor.
o VFS-786:  Allow users to set custom keystore types like JCEKS, PKCS12 #121. Thanks to satish bhor.
o VFS-570:  Add HDFS write support #114. Thanks to garpinc, Gary Gregory.
o           Add FileObject.getURI(). Thanks to Gary Gregory.
o           Add FileObject.getPath(). Thanks to Gary Gregory.
o VFS-768:  Update Apache httpclient 4.5.11 to 4.5.13 and httpclient5 5.0-beta7 to 5.0.3. Thanks to ddg-igh, Gary Gregory.
o           Add org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.isDisableDetectExecChannel(FileSystemOptions) and setDisableDetectExecChannel(FileSystemOptions, boolean). Thanks to Gary Gregory.
o           Add org.apache.commons.vfs2.FileSystemConfigBuilder.toBooleanObject(boolean). Thanks to Gary Gregory.
o           org.apache.commons.vfs2.provider.VfsComponent now implements java.io.Closeable. Thanks to Gary Gregory.
o           Modify some code use try-with-resources #138. Thanks to PeterAlfredLee.

Fixed Bugs:
o VFS-753:  NumberFormatException in SftpFileSystem::getUId. Thanks to John Webb, Gary Gregory.
o VFS-779:  Possible null pointer dereference in org.apache.commons.vfs2.impl.DefaultFileReplicator.close() due to return value of called method. Thanks to Gary Gregory.
o           Modify some loop using stream API #96. Thanks to PeterAlfredLee.
o VFS-780:  SftpFileSystem returns null channel and produce NPE - fix get… #110. Thanks to Wuchte.
o VFS-788:  [webdav/webdav4] Jackrabbit1 and jackrabbit2 modules getting same OSGi symbolic name. Thanks to satish bhor.
o VFS-624:  Fix for read() in constructors of LocalFileRandomAccessContent and RamFileRandomAccessContent #93. Thanks to PeterAlfredLee.
o VFS-769:  Fix .tgz and .tbz2 createFileSystem fails #94 Thanks to PeterAlfredLee.
o VFS-664:  Fix for file names with exclamation mark can not be read #95. Thanks to PeterAlfredLee.
o VFS-777:  NoSuchMethodError due to multiple versions of commons-codec:commons-codec:jar. Thanks to Bing-ok, Gary Gregory.
o           Remove workaround for JDK BUG: 6192331 which was fixed way back in Java 6: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6192331 Thanks to Gary Gregory.
o           FileObject.getURL() returns an illegal URL when a it should escape a space. Thanks to Gary Gregory.
o           Fix test fail caused by lack proxy configuration for machines behind a proxy #139. Thanks to PeterAlfredLee.

Changes:
o           Update some file from CRLF to LF #141. Thanks to PeterAlfredLee.
o VFS-755:  Update org.apache.httpcomponents:httpclient from 4.5.10 to 4.5.11. Thanks to Gary Gregory.
o VFS-756:  Update org.apache.jackrabbit:jackrabbit-standalone-components from 2.19.6 to 2.21.3. Thanks to Gary Gregory.
o VFS-754:  Update Apache Commons Compress from 1.19 to 1.20. Thanks to Gary Gregory.
o           Update tests from Apache Commons Lang 3.9 to 3.11. Thanks to Gary Gregory.
o           Update tests from Log4j 2.13.0 to 2.13.3. Thanks to Gary Gregory.
o           Update tests from org.mockito:mockito-core from 3.2.4 to 3.5.13, #131. Thanks to Gary Gregory, Dependabot.
o           Update Apache Commons IO from 2.6 to 2.8.0. Thanks to Gary Gregory.
o           Update site reports from org.apache.bcel:bcel 6.4.1 to 6.5.0. Thanks to Gary Gregory.
o           Update actions/checkout from v1 to v2.3.3 #100, #109, #130. Thanks to Dependabot.
o           Update actions/setup-java from v1.4.0 to v1.4.3 #111, #113, #133. Thanks to Dependabot.
o           Update commons-parent from 50 to 52. Thanks to Gary Gregory.
o           Update checkstyle from 8.27 to 8.36.2 #123, #132. Thanks to Dependabot.
o           Update maven-pmd-plugin from 3.12.0 to 3.13.0 #125. Thanks to Dependabot.
o           Update exec-maven-plugin from 1.6.0 to 3.0.0 #127. Thanks to Dependabot.
o           Update com.puppycrawl.tools:checkstyle 8.36 -> 8.36.1. Thanks to Gary Gregory.
o           Update Apache Commons Net from 3.6 to 3.7.2. Thanks to Gary Gregory.
o           Update JUnit from 4.13 to 4.13.1. Thanks to Gary Gregory.


Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS Project, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS Project website:

http://commons.apache.org/proper/commons-vfs/

Download page: http://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS Project 2.6.0
            RELEASE NOTES
            2020-01-06

The Apache Commons VFS Project team is pleased to announce the release of Apache Commons VFS Project 2.6.0.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

Fixed Bugs:
o           Clean up tests and simplify assertions #76. Thanks to Eitan Adler.
o VFS-750:  Fix backwards incompatibility in AbstractFileObject.getInputStream(). Thanks to Boris Petrov, Gary Gregory.
o VFS-751:  Deprecate org.apache.commons.vfs2.FileUtil for org.apache.commons.vfs2.util.FileObjectUtils. Thanks to Gary Gregory.

Changes:
o           Update JUnit from 4.12 to 4.13. Thanks to Gary Gregory.


Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS Project, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS Project website:

http://commons.apache.org/proper/commons-vfs/

Download page: http://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS 2.5.0
            RELEASE NOTES
            2019-12-24

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.5.0.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

New features:
o VFS-734:  Add functional interface org.apache.commons.vfs2.function.VfsConsumer. Thanks to Gary Gregory.
o VFS-735:  Add org.apache.commons.vfs2.FileSystemManager.close() via AutoCloseable. Thanks to Gary Gregory.
o VFS-736:  Add org.apache.commons.vfs2.VFS.reset(). Thanks to Gary Gregory.
o VFS-742:  Add org.apache.commons.vfs2.FileContent.isEmpty(). Thanks to Gary Gregory.
o VFS-743:  Add org.apache.commons.vfs2.provider.compressed.CompressedFileFileObject.SIZE_UNDEFINED. Thanks to Gary Gregory.
o VFS-687:  Add http5 and http5s providers (#74) Thanks to Woonsan Ko, Gary Gregory.
o VFS-686:  Add webdav4 provider based on the latest Jackrabbit 2.x #52. Thanks to Woonsan Ko, Gary Gregory.
o VFS-738:  Deprecate org.apache.commons.vfs2.FileChangeEvent.getFile() in favor of getFileObject(). Thanks to Gary Gregory.

Fixed Bugs:
o VFS-741:  FileObject#getChildren allows listing of files with known scheme prefix (generalizes VFS-398).
o VFS-726:  getInputStream(int bufferSize) on SftpFileObject effectively ignores buffer size. Thanks to Cornelius Höfig, Gary Gregory.
o VFS-704:  Some providers wrap their input/output streams twice in a BufferedInputStream. Thanks to Boris Petrov, Gary Gregory.
o VFS-727:  Prevented creation of singleton file system manager from providers. Thanks to Michiel Hendriks, Gary Gregory.
o VFS-733:  Parent layer of ZipFileSystem set to null through OnCallRefreshFileObject and DecoratedFileObject.refresh(). Thanks to Falco, Gary Gregory, Bruno P. Kinoshita.
o VFS-739:  Changes to parseUri breaks backward compatibility by throwing NullPointerException in some cases. Thanks to xia0c, Gary Gregory.
o VFS-744:  org.apache.commons.vfs2.FileContent.getByteArray() can throw NegativeArraySizeException for BZip2 files. Thanks to Gary Gregory.
o VFS-590:  SFTP moveTo operation might fail on permission checks even if the operation itself might succeed. #75. Thanks to L, Alex Pearce, Gary Gregory.
o VFS-617:  SFTP isReadable fails if unable to determine group identity. #75. Thanks to Tim Nickels, Joshua Woods, David Johansson, Bernd Eckenfels, Len, Nim Lhûg, Vineet Tyagi, Gopal Warawate, Alex Pearce, Gary Gregory.
o VFS-444:  ResourceFileProvider "res://" failed to obtain FileObject from resolved FileName. Thanks to Walter Eaves, Xavier Dury, Michiel Hendriks, Gary Gregory.

Changes:
o VFS-737:  Update Hadoop from 3.2.0 to 3.2.1. Thanks to Gary Gregory.
o VFS-728:  Update Apache Commons Compress from 1.18 to 1.19. Thanks to Gary Gregory.
o VFS-729:  Upgrade Hadoop to 2.7.4 or later; will use current 3.2.0. Thanks to Michiel Hendriks, Gary Gregory.
o VFS-731:  Update org.apache.httpcomponents:httpclient from 4.5.9 to 4.5.10. Thanks to Gary Gregory.
o VFS-732:  Update org.apache.httpcomponents:httpcore-nio from 4.4.11 to 4.4.12. Thanks to Gary Gregory.
o           Update tests using org.mockito:mockito-core from 3.0.0 to 3.1.0. Thanks to Gary Gregory.
o VFS-749:  Update Apache Commons Parent from 48 to 50. Thanks to Gary Gregory.


Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

http://commons.apache.org/proper/commons-vfs/

Download it from http://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS 2.4.1
            RELEASE NOTES
            2019-08-10    

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.4.1

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

Fixed Bugs:
o VFS-725:  [Local] org.apache.commons.vfs2.FileContent.getLastModifiedTime() is losing milliseconds (always ends in 000). Thanks to Gary Gregory.
o VFS-724:  FileContent#getByteArray() throws IllegalArgumentException: Buffer size <= 0 when file size is 0. Thanks to William R, Gary Gregory.
o           Javadoc fixes. Thanks to Gary Gregory.


Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit http://commons.apache.org/proper/commons-vfs/

Download it from http://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

            Apache Commons VFS 2.4
            RELEASE NOTES

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.4.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

New features:
o VFS-690:  Allow to set key exchange algorithm explicitly. GitHub #32.
o VFS-497:  Ported filters from Commons IO #9. Thanks to Michael Schnell.
o VFS-696:  More efficient comparison in FileExtensionSelector #44. Thanks to Robert DeRose.
o VFS-660:  Expose workaround for connecting to FTP server from different subnets in PASV mode #35. Thanks to Liu Yubao.
o VFS-699:  Add setting for FTP encoding auto-detection #58. Thanks to Boris Petrov.
o VFS-706:  Add ability to specify buffer sizes #59. Thanks to Boris Petrov.
o VFS-609:  SFTP provider doesn't support a private key as byte array #60. Thanks to stevezhuang, Rostislav, Gary Gregory.
o VFS-707:  Update Apache HttpClient from 4.5.7 to 4.5.8. Thanks to Gary Gregory.
o VFS-712:  Add null-safe org.apache.commons.vfs2.util.FileObjectUtils.exists(FileObject). Thanks to Gary Gregory.
o VFS-713:  Add FileObjectUtils.readProperties(FileObject) method to read a .properties file. Thanks to Gary Gregory.
o VFS-715:  Add org.apache.commons.vfs2.FileContent.getByteArray(). Thanks to Gary Gregory.
o VFS-719:  Add methods to get the contents of file objects as strings. Thanks to Gary Gregory.
o VFS-720:  Implement Closeable for RandomAccessContent #66. Thanks to Boris Petrov.
o VFS-721:  Add support for symbolic links for the local file system and add FileObject#isSymbolicLink(). Thanks to Gary Gregory.

Fixed Bugs:
o VFS-694:  Fix inability to start the DefaultFileMonitor after it has been stopped. GitHub PR #55. Thanks to Boris Petrov.
o VFS-696:  SFTP HTTP and SOCKS proxy authentication. GitHub PR #49. Thanks to rayzzed.
o VFS-707:  [SFTP] SftpFileSystem.executeCommand(String, StringBuilder) can leak ChannelExec objects. Thanks to Gary Gregory.
o VFS-709:  [SFTP] SftpFileSystem.getGroupsIds() can initialize underlying data more than once while multithreading. Thanks to Gary Gregory.
o VFS-710:  [SFTP] SftpFileSystem.getUid() can initialize underlying data more than once while multithreading. Thanks to Gary Gregory.
o VFS-711:  [SFTP] SftpFileSystem can initialize underlying Session more than once while multithreading. Thanks to Gary Gregory.
o VFS-662:  [SFTP] SftpFileSystem has Thread-safe issue about idleChannel (#36). Thanks to qxo, Alexey Abashev, Gary Gregory.
o VFS-700:  Some tests fail on Java 11 and above. Thanks to Gary Gregory, Matthias Krueger.
o VFS-716:  Fix AbstractFileName.getURI returning unencoded #-sign #64. Thanks to Boris Petrov.
o VFS-698:  SFTP file attributes are fetched multiple times leading to very slow directory listing; #65. Thanks to David Septimus, Bernd.
o VFS-717:  Update org.apache.httpcomponents:httpclient from 4.5.8 to 4.5.9. Thanks to Gary Gregory.
o VFS-718:  MonitorInputStream should not close the stream in "read" #67. Thanks to Boris Petrov.

Changes:
o VFS-692:  Update Apache Commons Collections from 4.2 to 4.3. Thanks to Gary Gregory.
o VFS-693:  Add support for customizing FTP transfer aborted status codes. GitHub PR #51. Thanks to Boris Petrov, Gary Gregory.
o VFS-702:  Simplify adding files to DefaultFileMonitor #57. Thanks to Boris Petrov.
o VFS-703:  Update Apache Commons Lang from 3.8.1 to 3.9. Thanks to Gary Gregory.
o VFS-722:  Update Apache Commons Collections from 4.3 to 4.4. Thanks to Gary Gregory.
o           Source incompatibility: org.apache.commons.vfs2.FileFilter.accept(FileSelectInfo) now throws checked exception FileSystemException.
o           Public API note: The overridden methods getURI() and getFriendlyURI() in org.apache.commons.vfs2.provider.local.LocalFileName where removed but are implemented in a superclass.
o           Public API note: The overridden method org.apache.commons.vfs2.provider.sftp.SftpFileObject#refresh() was removed but is implemented in a superclass.
o           Public API note: The overridden method org.apache.commons.vfs2.provider.sftp.SftpFileProvider#init() was removed but is implemented in a superclass.


Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit http://commons.apache.org/proper/commons-vfs/

Download it from http://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

              Apache Commons VFS 2.3
                  RELEASE NOTES

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.3.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

New features:
o VFS-677:  [SFTP] Add support for append mode. Thanks to dingxbcn.
o VFS-673:  [SFTP] Support com.jcraft.jsch.ConfigRepository (~/.ssh/config) with SftpFileSystemConfigBuilder and flag to load OpenSSHConfig. Thanks to Oleksandr Lykhonosov.
o VFS-673:  DefaultFileSystemManager should implement AutoCloseable. Thanks to Daniel Banks.
o VFS-637:  Zip files with legacy encoding and special characters let VFS crash. Thanks to Gary Gregory.
o VFS-360:  Add HTTP provider based on HttpComponents HttpClient 4. Thanks to Woonsan Ko.
o VFS-689:  org.apache.commons.vfs2.provider.http.HttpFileObject.getHeadMethod() does not release connection when an exception is thrown. Thanks to Gary Gregory.

Fixed Bugs:
o VFS-645:  VfsClassLoaderTests and JarProviderTestCase fails on Java 9 and up.
o VFS-678:  Fix various LGTM.com code review warnings.
o VFS-652:  PatternFileSelector documentation to describe actual matching against getPath().
o VFS-589:  SFTP moveTo operation hangs if the server does not support SSH channelExec. Thanks to L, Gary Gregory.
o VFS-655:  OSGI MANIFEST.MF "Import-Package" should be ";resolution:=optional" for Maven "optional" dependencies. Thanks to Arnaud MERGEY.
o VFS-657:  FileSelector implementations like FileDepthSelector should throw Exception. Thanks to Elias Putz.
o VFS-614:  MonitorInputStream should not close the stream in read(). Thanks to Boris Petrov, Otto Fowler.
o VFS-667:  org.apache.commons.vfs2.provider.res.ResourceFileProvider.findFile(FileObject, String, FileSystemOptions) should throw a org.apache.commons.vfs2.FileSystemException instead of a NPE when the class loader is null.
o VFS-669:  org.apache.commons.vfs2.util.CombinedResources.loadResources(String) should not throw an NPE for the system class loader is null.
o VFS-675:  NullPointerException at AbstractFileObject.java:221.
o VFS-674:  Cannot close an FTP input stream without an exception. Thanks to Boris Petrov, Gary Gregory.
o VFS-294:  NullPointerException in FtpFileObject.getChildFile(). Thanks to Johannes Scharf.
o VFS-679:  NullPointerException in FtpFileObject.doGetLastModifiedTime(). Thanks to Boris Petrov, Gary Gregory.
o VFS-398:  FtpFileObject.getChildren() fails when a folder contains a file with a colon in the name. Thanks to Otto Fowler.

Changes:
o VFS-650:  Update Apache Commons Compress from 1.15 to 1.16.1.
o VFS-646:  Update Apache Commons Compress from 1.14 to 1.15.
o VFS-653:  Replace use of deprecated APIs in HDFS provider.
o VFS-666:  Update Apache Commons Collections from 4.1 to 4.2.
o VFS-668:  Throw a NPE with a better message when a class loader is null.
o VFS-671:  Update Apache Commons Compress from 1.16.1 to 1.18.
o VFS-680:  Update from Java 7 to Java 8.
o VFS-681:  VFS.setManager should be synchronized; #43. Thanks to Robert DeRose.
o VFS-682:  Throw a org.apache.commons.vfs2.FileSystemException instead of a NullPointerException in org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveName(FileName, String, NameScope).
o VFS-688:  [SFTP] Update jsch from 0.1.54 to 0.1.55.


Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit http://commons.apache.org/proper/commons-vfs/

Download it from http://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

              Apache Commons VFS 2.2
                  RELEASE NOTES

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.2.

Apache Commons VFS is a Virtual File System library.

New features and bug fix release.

Changes in this version include:

New features:
o VFS-628:  Add a file inverter FileSelector: InvertIncludeFileSelector.

Fixed Bugs:
o VFS-189:  Possible NPE in DefaultFileSystemManager.
o VFS-620:  FileObject.moveTo(FileObject) API doesn't work well for a Linux FTP. Thanks to stevezhuang.
o VFS-291:  ZIP archives are not properly closed after unzipping and cannot be deleted until the JVM exists.
o VFS-644:  AbstractFileSystem.streamClosed() always sets openStream count to zero.

Changes:
o VFS-642:  Upgrade to jcifs 1.3.17 Thanks to ilangoldfeld.
o VFS-612:  Update the platform requirement from Java 6 to Java 7.
o VFS-615:  Update Apache Commons Compress from 1.11 to 1.12.
o VFS-629:  Update Apache Commons Compress from 1.12 to 1.13.
o VFS-639:  Update Apache Commons Compress from 1.13 to 1.14.
o VFS-631:  Update from Apache Commons Net 3.5 to 3.6.
o VFS-632:  Update from JCraft jsch for SFTP/SSH from 0.1.53 to 0.1.54.
o VFS-621:  Add API VFS.setManager(FileSystemManager).
o VFS-643:  VFS should not log at the INFO level.

Known Problems:
o VFS-645:  VfsClassLoaderTests fails on Java 9.


Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit http://commons.apache.org/proper/commons-vfs/

Download it from http://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------

              Apache Commons VFS 2.1
                  RELEASE NOTES

The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.1.

Apache Commons VFS is a Virtual File System library.

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.

Changes in this version include:

New features:
o VFS-198:  [http] Make user agent configurable. Thanks to Andrew Franklin, Simon Legner.
o VFS-555:  [hdfs] Add the ability to specify an HDFS configuration file with HdfsFileSystemConfigBuilder.
o           [example] make VFS Shell print version and implement new 'info' command.
o VFS-532:  [FTP] Allow configuring remoteVerificationEnabled on FTPClient instances. Thanks to Gareth Daniel Smith.
o VFS-468:  [FTPS] Add option for KeyManager (and TrustManager) to support FTPS servers that ask for the client certificate for authentication.
o VFS-412:  [FTPS] Add support for command to set the DataChannelProtectionLevel. Thanks to Jose Juan Montiel.
o VFS-442:  [HDFS] Add an HDFS FileSystem Provider. Thanks to Dave Marion.
o VFS-447:  [FTP/FTPS] Update Apache Commons Net to 3.2 from 3.1.
o VFS-445:  Add FileSystemManager.resolveFile(URI) and resolveFile(URL).
o VFS-440:  [SFTP] Stream (e.g. netcat) proxy for Sftp file system (aka ProxyCommand). Thanks to bpiwowar.
o VFS-432:  [HTTP][WebDAV] Allow HTTP follow redirect.
o VFS-431:  FileSystemOption does not implement toString().
o VFS-405:  Get/set the file permissions. Thanks to dwaszak.
o VFS-426:  HTTP URL query string not part of cache key. Thanks to daniel.bergholm.
o VFS-425:  Add API FileObject.isExecutable().
o VFS-421:  [SFTP] Configure a custom Identity Repository. Thanks to bpiwowar.
o VFS-417:  [RAM][Local] Add and implement new API: RandomAccessContent.setLength(long).
o VFS-400:  Add a FileSelector based on regular expressions.
o VFS-254:  Let FileObject and FileContent extend java.io.Closeable. Thanks to mzawirski.
o VFS-252:  [SMB] SmbFileObject does not support setLastModifiedTime while jcifs supports it.
o VFS-313:  [FTP] Configuration does not include option for setting socket timeout. Thanks to bdavis@saintandreas.org.
o VFS-414:  [FTP] Add config API to set the file type.
o VFS-182:  [FTP] Usage of FTP with heterogeneous FTP server (possibility of using Ascii file type).
o VFS-381:  Iterate over a FileObject using the Java "foreach" statement, to provide all descendents of a FileObject.
o VFS-373:  Add FileContent write APIs.
o VFS-372:  Add constructors FileDepthSelector() and FileDepthSelector(int).
o VFS-371:  Add FileObject API deleteAll().
o VFS-370:  Add a FileExtensionSelector class.
o VFS-367:  Add APIs FileObject isFile(), FileObject isFolder(), and FileName isFile().

Fixed Bugs:
o VFS-424:  Fix StandardFileSystemManager class loading so it works in a OSGi environment.
o VFS-490:  [vfsclassloader] Do not open folders with .jar extension. Adds tests.
o VFS-582:  [tests] revert rename of getTestDirectoryFile to make test classes more compatible for external providers.
o VFS-480:  Make startup of SoftRefsFileCache cleaner thread work and less racy to avoid leaks.
o VFS-549:  Use File.seperator instead of getProperty("file.separator").
o VFS-567:  [ftp] Ignore exceptions while QUIT/disconnect. Thanks to Antonio Petrelli.
o VFS-572:  [sftp] better documentation for knownhosts file option. Thanks to Sandra Parsick.
o VFS-574:  Ensure FileOpertionProviders are closed. Adds some testcases.
            The error code for missing operations exceptions corrected: vfs.operation/operation-not-supported.error
o VFS-279:  [local] Avoid ClassCastException when replicating local files while OnCall caching is active. Thanks to Didier Earith, Simon Legner.
o VFS-297:  [sftp] VSF fails to reuse FileSystem instances if FileSystemOptions contain
            an array as value. Reported for SFTP using identities. Thanks to Kirill Safonov, Jimmy Praet.
o VFS-202:  [http] Allow URLs responding with 405 to HEAD requests. Thanks to Sergey Vladimirov, Simon Legner.
o VFS-490:  [hdfs] Make OSGi package imports for hdfs resolution=optional.
            Removed all scopes from dependency management.
o VFS-560:  [http] avoid initial HEAD request to root of HttpFileSystem as it might be wrong context.
o VFS-236:  [smb] Allow SMB to be used with no authentication. Thanks to Matt Casters.
o VFS-564:  Make some loggers static. Thanks to Dmitry Konstantinov.
o VFS-557:  [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.
o VFS-558:  Make moveTo() and getParent() work with CacheStrategy.ON_CALL.
            In case of FTP Provider it would lead otherwise to an UnsupportedOperationException.
o           [sandbox] RACRandomAccessFile is now in org.apache.commons.vfs2.util package (so sandbox has only one overlapping package).
o VFS-552:  [sandbox] include vfs-providers.xml in JAR for dynamic registration of mime and smb providers.
o VFS-551:  Javadoc: make it clear that DefaultCryptor is only an obfuscation function. Thanks to David Camilo Espitia Manrique.
o VFS-309:  DefaultFileContent will remove thread data whenever possible to avoid leaks.
o VFS-487:  DefaultFileMonitor detects recreated files. Thanks to Dave Marion.
o VFS-523:  [HDFS] Make HdfsFileObject.equal use system hashcode/equals instead of
            wrongly comparing file path only. Thanks to Roger Whitcomb.
o VFS-544:  [Virtual] Allow virtual file systems and virtual file system provider
            to be closed, to avoid memory leak.
o VFS-142:  Use ThreadLocal.remove() to clean out FileContentThreadData objects. Thanks to Ryan Boettcher.
o VFS-545:  Make DefaultFilesCache remove reference to filesystem when it is cleared (closed).
o VFS-521:  [Ram][Tests] Make RAM provider test pass on Java 8
            (JDK-8042377, self-suppression not permitted, MonitorOutputStream#close()).
o VFS-338:  [Local][Tests] Avoid IndexOutOfBoundsException when validating local file URIs. Thanks to Daniel R..
o VFS-489:  [tests] ProviderWriteTests#testListener does not fail cleanly. Thanks to Bernd Eckenfels.
o VFS-486:  DefaultFileMonitor sleeps for twice the specified delay when checkPerRun > 0. Thanks to Sam Haldane.
o VFS-482:  Wrong assertion messages in RAM provider test case.
o VFS-460:  Dependency to commons-compress set as optional.
o VFS-464:  StaticUserAuthenticator should return only requested authentication data.
o VFS-461:  [FTP/FTPS] ConfigBuilder does not consider system properties for the value of SoTimeout and Encoding.
o VFS-458:  [FTPS] Provider missed functionality and bug fixes already available for the FTP provider.
o VFS-452:  [HTTP] HttpFileObject read/write attributes should reflect underlying FileSystem capabilities. Thanks to Jean-Marc Borer.
o VFS-285:  AbstractFileObject.getChildren() may corrupt its internal state if a filename
            can not be resolved. Thanks to Kirill Safonov.
o VFS-450:  [HDFS] HDFSFileSystem.resolveFile() does not honor CacheStrategy.ON_RESOLVE. Thanks to Dave Marion.
o VFS-448:  commons-vfs 2.0 JAR has flawed OSGi MANIFEST.MF.
o VFS-439:  StaticUserAuthenticator usage example wrong. Thanks to pensecit.
o VFS-437:  [FTP] StackOverFlowError getting the type of a directory with a symbolic link to a parent directory with the same name. Thanks to denniszhu, danttran, jpowang.
o VFS-435:  FileSystemConfigBuilder does not use prefix for some system property lookups. Thanks to george scott.
o VFS-434:  FileSystemException should reuse IOException's chained exception.
o VFS-433:  [WebDAV] Message "vfs.provider.webdav/propfind.error" is not defined.
o VFS-430:  The SoftRefFilesCache class logs clear text password. Thanks to antonin.stefanutti.
o VFS-429:  Remove extra FileSystem ivar in AbstractFileObject subclasses with generics.
o VFS-427:  [HTTP] NPE on HttpFileObject.getContent().getContentInfo(). Thanks to awelynant.
o VFS-406:  [RAM] resize throws ArrayOOBE when shrinking in size. Thanks to mp1.
o VFS-353:  [FTP] Client should call logout before disconnecting. Thanks to bergander.
o VFS-408:  CompressedFileFileObject Exception thrown when container file has no extension. Thanks to anilm2@yahoo.com.
o VFS-258:  [SFTP][RAM] Unsafe casting to AbstractFileObject subclasses in doRename(). Thanks to mzawirski.
o VFS-413:  [FTP] No support for FTP servers with non Latin-1 control encoding. Thanks to polivenok.
o VFS-200:  [SFTP] Failure when files are very large.
o VFS-296:  [FTP] FTP socket timeout setting doesn't work if connect hangs. Thanks to andreasp.
o VFS-410:  [SFTP] SftpFileObject getInputStream(long) reads the whole file into memory. Thanks to mstockhammer.
o VFS-407:  [RAM] Reading a RAM FileSystem file fails because it never returns EOF -1. Thanks to mp1.
o VFS-382:  SFTP getChildren() does not fail when called on a file.
o VFS-380:  FTP connect.error message used instead of SFTP connect.error message.
o VFS-378:  Tar error message are missing from resource file.
o VFS-374:  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.
o VFS-355:  The read method of RamFileRandomAccessContent's input stream does not return -1 at eof. Thanks to Miroslav Pokorny.
o VFS-356:  Throw an IOException if an attempt is made to seek to a position before the start of the file.
o VFS-359:  Don't delete a RamFileObject if it is open. Thanks to Miroslav Pokorny.
o VFS-352:  ZipFileSystem now uses an internal Map as a cache for all the files in the zip archive.
o VFS-351:  Chain the SftpException in the FileSystemException. Thanks to John Backstrand.
o VFS-325:  Allow # character in file names. Thanks to Larry Reeve.
o VFS-335:  Use atomic variables in MonitorInputStream.
o VFS-364:  Check the href in the response for just a path in addition to a full uri.

Changes:
o VFS-607:  Update Apache Commons Compress from 1.10 to 1.11.
o VFS-608:  Update Apache Commons Net from 3.4 to 3.5.
o VFS-530:  [hdfs] Use stable Apache Hadoop 2.6 dependencies. Thanks to Dave Marion.
o VFS-601:  Update Apache Commons Net from 3.3 to 3.4.
o VFS-602:  Update Apache Commons IO from 2.4 to 2.5.
o VFS-579:  Update Jsch from 0.1.51 to 0.1.53.
o VFS-542:  Update Jsch from 0.1.50 to 0.1.51.
o VFS-578:  Update Apache Commons Compress from 1.9 to 1.10.
o VFS-541:  Update Apache Commons Compress from 1.6 to 1.9.
o VFS-540:  Update Apache Commons Logging from 1.1.3 to 1.2.
o VFS-539:  Update Apache Commons Lang from 3.1 to 3.3.2.
o VFS-526:  [HDFS][Tests] Support HDFS testing on Windows (but keep profile "no-hdfs" enabled on Windows VFS-529).
o VFS-453:  [HTTP][WEBDAV] Add file system options for connect and socket timeout. Thanks to Jiri Syrovy.
o VFS-167:  [FTP] Allow Proxy support to file system options. Thanks to Jimmy Praet.
o VFS-520:  Make Javadoc compatible with Java 8 tool.
o VFS-518:  Documentation of FileSystemOptions should be more helpful. Thanks to Roland Illig.
o VFS-500:  VFSClassLoader.findResources missing. Thanks to Bernd Eckenfels.
o VFS-514:  [tests] PermissionsTests leaves unclean test directory. Thanks to Bernd Eckenfels.
o VFS-501:  Hide passwords from log/console output. Thanks to Yves Schumann.
o VFS-496:  Resource translation issues. Thanks to Bernd Eckenfels.
o VFS-494:  [SFTP] No support for SFTP servers with non Latin-1 file name encoding. Thanks to Allen Xudong Cheng.
o VFS-368:  [SFTP] Documentation implies that "userDirIsRoot" defaults to true. Thanks to Brendan Long.
o VFS-265:  [FTP] Set user dir as root dir by default. Thanks to Scott Bjerstedt.
o VFS-484:  [SFTP] Update Jsch to 0.1.50 from 0.1.49.
o VFS-507:  Update to Apache Commons Collection 4.1 from 3.2.1 and use generics.
o VFS-476:  Update Apache Commons Logging to 1.1.3 from 1.1.2.
o VFS-475:  Update Apache Commons Net to 3.3 from 3.2.
o VFS-506:  [Tar][Bzip2] Update Apache Commons Compress to 1.6 from 1.5.
o VFS-471:  Update to Apache Commons Compress 1.5.
o VFS-283:  [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.
o VFS-463:  FileSytemConfigBuilder supports system properties for the value of enum-based configuration entries.
o VFS-462:  [FTPS] Deprecate FtpsFileSystemConfigBuilder.setFtpsType and FtpsFileSystemConfigBuilder.getFtpsType
            in favor of FtpsFileSystemConfigBuilder.setFtpsMode and FtpsFileSystemConfigBuilder.getFtpsMode which
            use new enum FtpsMode instead.
o VFS-459:  [FTP/FTPS] Sent commands and the received answer is logged at debug level.
o VFS-457:  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
o VFS-456:  Use org.bouncycastel:bcprov-jdk16 instead of org.bouncycastle:bcprof-jdk15on since Java 1.6 is required.
o VFS-415:  Update VFS requirement to Java 1.6.
o VFS-418:  Update to Apache Commons Compress 1.4.1.
o VFS-321:  AbstractFileObject sometimes uses getFileSystem() and sometimes references "fs" field directly. Thanks to sebb.
o VFS-327:  UriParser.canonicalizePath possible NPE for filenameParser. Thanks to sebb.
o VFS-416:  [SFTP] Update Jsch to version 0.1.49 from 0.1.47.
o VFS-395:  [POM] Remove maven-scm-* dependencies.
o VFS-411:  [SFTP] Update Jsch to version 0.1.47 from 0.1.46.
o VFS-409:  Update Apache Commons Compress to 1.4 from 1.3.
o VFS-404:  [FTP][FTPS] Update Apache Commons Net to 3.1 from 3.0.1.
o VFS-402:  [WebDAV] Update Apache Jackrabbit 1.5.2 to 1.6.5.
o VFS-401:  Update JSch to 0.1.46 from 0.1.45 for the SFTP provider.
o VFS-392:  Build tests WebDAV file system with an embedded WebDAV server (Apache Jackrabbit).
o VFS-391:  Build tests URL HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
o VFS-390:  Use variable argument list in org.apache.commons.vfs2.util.Messages instead of Object[].
o VFS-389:  Use variable argument lists in FileSystemException instead of Object[]s.
o VFS-388:  Build tests SFTP file system with an embedded SFTP server (Apache MINA).
o VFS-387:  Build tests FTP file system with an embedded FTP server (Apache MINA).
o VFS-386:  Build tests HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
o VFS-385:  Add HTTP status code to HTTP file provider exception messages when available.
o VFS-384:  Update Apache Commons Net to 3.0.1 from 2.2 for FTP and SFTP providers.
o VFS-383:  Update JSch to 0.1.45 from 0.1.42 for the SFTP provider.
o VFS-379:  Replace custom BZIP2 code with Apache Commons Compress 1.3.
o VFS-377:  Replace custom TAR code with Apache Commons Compress 1.3.
o VFS-375:  Upgrade to Apache Commons Compress 1.3 from 1.2.
o VFS-366:  Can't sort a List of FileObject's, FileObject to implement Comparable<FileObject>.
o VFS-341:  Enable logging of JSch using the Commons Logging Log object in SftpClientFactory. Thanks to Rajika Kumarasiri.
o VFS-361:  Upgrade commons collections version to 3.2.1.

Removed:
o VFS-469:  Remove unused dependency to javax.jcr:jcr.

Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html

For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons VFS website:

Visit http://commons.apache.org/proper/commons-vfs/

Download it from http://commons.apache.org/proper/commons-vfs/download_vfs.cgi

-----------------------------------------------------------------------------