<?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 Release Notes</title>
    <author email="dev@commons.apache.org">Apache Commons Developers</author>
  </properties>

  <body>
    <release version="2.8.1" date="2021-MM-DD" description="Maintenance release. Requires Java 8.">
      <!-- FIXES -->
      <action type="fix" dev="ggregory" due-to="Boris Petrov">
        VFS.close(): Set `instance` to `null` after closing it; #163.
      </action>
      <action type="fix" dev="ggregory" due-to="Boris Petrov">
        Fix closing the files cache after warning that not all components have been closed; #165.
      </action>
      <action type="fix" dev="ggregory" due-to="Boris Petrov, Gary Gregory, Max Kellermann">
        Fix NPE when closing a stream from a different thread #167. See also #166.
      </action>
      <action type="fix" dev="ggregory" issue="VFS-798" due-to="XenoAmess, Gary Gregory">
        IllegalArgumentException: Bad escape for Chinese characters in FileObject path #168.
      </action>
      <!-- UPDATES  -->
      <action type="update" dev="ggregory" due-to="Arturo Bernal">
        Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #164.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update Log4j 2.14.0 -> 2.14.1.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update Maven Surefire from 2.19.1 to 3.0.0-M5.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Port internal embedded HTTP asynchronous file server used in tests from  from Apache HttpComponents HttpCore/HttpClient 4.x to 5.0.x.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Only use reflection VFS.createFileSystemManager(String) if the FileSystemManager is not a subclass of AbstractFileSystem.
      </action>
      <action type="update" dev="ggregory" due-to="Arturo Bernal">
        Simplify if conditions #170.
      </action>
      <action type="update" dev="ggregory" due-to="Arturo Bernal">
        Redundant local variable #171.
      </action>
      <action type="update" issue="VFS-804" dev="ggregory" due-to="Arturo Bernal">
        Fix and Refine Javadoc #174.
      </action>
    </release>
    <release version="2.8.0" date="2021-03-06" description="Feature and maintenance release. Requires Java 8.">
<!--       <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 -->
      <!-- FIXES -->
      <action issue="VFS-783" dev="ggregory" due-to="satish-csi, Michael Osipov, Woonsan Ko, Gary Gregory" type="fix">
        Based on WEBDAV4 vs. WEBDAV4S set back-end http scheme #118.
      </action>
      <action issue="VFS-783" dev="ggregory" due-to="satish-csi, Woonsan Ko, Gary Gregory" type="fix">
        Proper http scheme setting on webdav/webdav2 with unit tests #143.
      </action>
      <action issue="VFS-783" dev="ggregory" due-to="Gary Gregory" type="fix">
        [SFTP] SftpFileSystem.executeCommand() should use UTF-8 instead of the platform default.
      </action>
      <action dev="ggregory" due-to="Max Kellermann" type="fix">
        FileContentThreadData: lazy ArrayList initialization to save memory #155.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        Fix possible ClassCastException in DefaultFileSystemManager.freeUnusedResources().
      </action>
      <action issue="VFS-748" dev="ggregory" due-to="PeterAlfredLee, Gary Gregory" type="fix">
        TarProvider Incorrectly marks file IMAGINARY after garbage collection with WeakRefFilesCache, #97.
      </action>
      <action issue="VFS-794" dev="ggregory" due-to="Gary Gregory" type="fix">
        Fix file resource leak in CombinedResources (properties file) which keeps the Commons VFS jar file open.
      </action>
      <action dev="ggregory" due-to="Max Kellermann, Bruno P. Kinoshita, Gary Gregory" type="fix">
        Rework SoftRefFilesCache locking part 1 #158.
      </action>
      <action issue="VFS-785" dev="ggregory" due-to="satish bhor, Michael Osipov, Gary Gregory" type="fix">
        [HTTP4][HTTP5] Credentials conflict when root and proxy hosts are same name but different ports, #120.
      </action>
      <action dev="ggregory" due-to="Max Kellermann, Gary Gregory, Florent Guillaume, Bruno P. Kinoshita, Bernd" type="fix">
        Rework SoftRefFilesCache locking #154.
      </action>
      <action issue="VFS-782" dev="ggregory" due-to="satish-csi, Gary Gregory" type="fix">
        Pass correct proxy authentication credentials #117.
      </action>
      <!-- ADDS -->
      <action dev="ggregory" due-to="Boris Petrov, Gary Gregory" type="add">
        Add ability to remove a provider from DefaultFileSystemManager #149.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add and use VFS.close().
      </action>
      <action dev="ggregory" due-to="Gary Gregory, xiaqingyun" type="add">
        [FTP] Add support for ControlKeepAliveReplyTimeout and ControlKeepAliveTimeout.
      </action>
      <action dev="ggregory" due-to="Gary Gregory, Michael Graham" type="add">
        [FTP] Tests can be configured with a custom FTP server command factory.
      </action>
      <action issue="VFS-257" dev="ggregory" due-to="Andrew Franklin, Michael Graham, Gary Gregory" type="add">
        [FTP] Add support for MDTM to get more accurate last modified times.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.setDataTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.getConnectTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.getDataTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [FTP] Add FtpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP] Add HttpFileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP] Add HttpFileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP] Add HttpFileSystemConfigBuilder.getConnectionTimeout(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP] Add HttpFileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [SFTP] Add SftpFileSystemConfigBuilder.setConnectTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [SFTP] Add SftpFileSystemConfigBuilder.setSessionTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [SFTP] Add SftpFileSystemConfigBuilder.getConnectTimeout(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [SFTP] Add SftpFileSystemConfigBuilder.getSessionTimeout(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP4] Add Http4FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP4] Add Http4FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP4] Add Http4FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP4] Add Http4FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP5] Add Http5FileSystemConfigBuilder.setConnectionTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP5] Add Http5FileSystemConfigBuilder.setSoTimeout(FileSystemOptions, Duration) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP5] Add Http5FileSystemConfigBuilder.getConnectionTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        [HTTP5] Add Http5FileSystemConfigBuilder.getSoTimeoutDuration(FileSystemOptions) and deprecate Integer version.
      </action>
      <action dev="ggregory" due-to="PMD, Gary Gregory" type="add">
        Add AbstractFileSystem.AbstractFileSystem() for Serializable subclasses (PMD).
      </action>
      <!-- UPDATES -->
      <action dev="ggregory" due-to="PeterAlfredLee" type="update">
        Modify some code use for-each loop and stream API #142.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="update">
        Simplify some String tests in method Os#determineOsFamily #147.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.mockito:mockito-core 3.5.13 -> 3.8.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.apache.jackrabbit:jackrabbit-* 2.21.3 -> 2.21.5.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump actions/checkout from v2.3.3 to v2.3.4 #144.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update tests from Log4j 2.13.3 to 2.14.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update com.puppycrawl.tools:checkstyle 8.36.2 -> 8.41.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update maven-checkstyle-plugin 3.1.1 -> 3.1.2.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.apache.httpcomponents:httpcore-nio 4.4.13 -> 4.4.14.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee, Gary Gregory" type="update">
        Modify some calls of method Collection.toArray #145.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons.japicmp.version 0.14.3 -> 0.15.3.
      </action>
      <action dev="ggregory" due-to="Arturo Bernal" type="update">
        Minor Improvements, #152, #156, #160.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons.spotbugs.version 4.1.4 -> 4.2.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons.spotbugs.impl.version 4.1.3 -> 4.2.0.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump actions/cache from v2 to v2.1.4 #159.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons-net:commons-net 3.7.2-> 3.8.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update junit 4.13.1 -> 4.13.2.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update maven-pmd-plugin 3.13.0 -> 3.14.0.
      </action>
      <action issue="VFS-795" dev="kinow" due-to="Max Kellermann" type="update">
        Code improvements for SoftRefFilesCache (simplify loop, use isEmpty, ...).
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update commons-lang3 3.11 -> 3.12.0.
      </action>
    </release>
    <release version="2.7.0" date="2020-10-26" description="Feature and maintenance release. Requires Java 8.">
      <action issue="VFS-753" dev="ggregory" due-to="John Webb, Gary Gregory" type="fix">
        NumberFormatException in SftpFileSystem::getUId.
      </action>
      <action issue="VFS-779" dev="ggregory" due-to="Gary Gregory" type="fix">
        Possible null pointer dereference in org.apache.commons.vfs2.impl.DefaultFileReplicator.close() due to return value of called method.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.isDisableDetectExecChannel(FileSystemOptions) and setDisableDetectExecChannel(FileSystemOptions, boolean).
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add org.apache.commons.vfs2.FileSystemConfigBuilder.toBooleanObject(boolean).
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        org.apache.commons.vfs2.provider.VfsComponent now implements java.io.Closeable.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Modify some loop using stream API #96.
      </action>
      <action issue="VFS-757" dev="ggregory" due-to="ddg-igh" type="add">
        [SFTP] Configure whether exec detection is enabled #80.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="add">
        Add proxy config for some HTTP/HTTPS test #108.
      </action>
      <action issue="VFS-780" dev="ggregory" due-to="Wuchte" type="fix">
        SftpFileSystem returns null channel and produce NPE - fix get… #110.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="add">
        Fix some test error when JVM's default language is not US en #107.
      </action>
      <action issue="VFS-788" dev="ggregory" due-to="satish bhor" type="fix">
        [webdav/webdav4] Jackrabbit1 and jackrabbit2 modules getting same OSGi symbolic name.
      </action>
      <action issue="VFS-787" dev="ggregory" due-to="satish bhor" type="add">
        Allow users to set proxy schemes like http/https #122.
      </action>
      <action issue="VFS-786" dev="ggregory" due-to="satish bhor" type="add">
        Allow users to set custom keystore types like JCEKS, PKCS12 #121.
      </action>
      <action issue="VFS-624" dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Fix for read() in constructors of LocalFileRandomAccessContent and RamFileRandomAccessContent #93.
      </action>
      <action issue="VFS-769" dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Fix .tgz and .tbz2 createFileSystem fails #94
      </action>
      <action issue="VFS-664" dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Fix for file names with exclamation mark can not be read #95.
      </action>
      <action issue="VFS-777" dev="ggregory" due-to="Bing-ok, Gary Gregory" type="fix">
        NoSuchMethodError due to multiple versions of commons-codec:commons-codec:jar.
      </action>
      <action issue="VFS-570" dev="ggregory" due-to="garpinc, Gary Gregory" type="add">
        Add HDFS write support #114.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        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
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        FileObject.getURL() returns an illegal URL when a it should escape a space.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add FileObject.getURI().
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="add">
        Add FileObject.getPath().
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Fix test fail caused by lack proxy configuration for machines behind a proxy #139.
      </action>
      <action dev="ggregory" due-to="PeterAlfredLee" type="fix">
        Modify some code use try-with-resources #138.
      </action>
      <!-- UPDATES -->
      <action dev="ggregory" due-to="PeterAlfredLee" type="update">
        Update some file from CRLF to LF #141.
      </action>
      <!-- UPDATES -->
      <action issue="VFS-755" dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.apache.httpcomponents:httpclient from 4.5.10 to 4.5.11.
      </action>
      <action issue="VFS-756" dev="ggregory" due-to="Gary Gregory" type="update">
        Update org.apache.jackrabbit:jackrabbit-standalone-components from 2.19.6 to 2.21.3.
      </action>
      <action issue="VFS-754" dev="ggregory" due-to="Gary Gregory" type="update">
        Update Apache Commons Compress from 1.19 to 1.20.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update tests from Apache Commons Lang 3.9 to 3.11.
      </action>
      <action issue="VFS-768" dev="ggregory" due-to="ddg-igh, Gary Gregory" type="add">
        Update Apache httpclient 4.5.11 to 4.5.13 and httpclient5 5.0-beta7 to 5.0.3.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update tests from Log4j 2.13.0 to 2.13.3.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">
        Update tests from org.mockito:mockito-core from 3.2.4 to 3.5.13, #131.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Update Apache Commons IO from 2.6 to 2.8.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update site reports from org.apache.bcel:bcel 6.4.1 to 6.5.0.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/checkout from v1 to v2.3.3 #100, #109, #130.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/setup-java from v1.4.0 to v1.4.3 #111, #113, #133.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update commons-parent from 50 to 52.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update checkstyle from 8.27 to 8.36.2 #123, #132.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update maven-pmd-plugin from 3.12.0 to 3.13.0 #125.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update exec-maven-plugin from 1.6.0 to 3.0.0 #127.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update com.puppycrawl.tools:checkstyle 8.36 -> 8.36.1.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Net from 3.6 to 3.7.2.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update JUnit from 4.13 to 4.13.1.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update FindBugs to SpotBugs 4.1.3.
      </action>
    </release>
    <release version="2.6.0" date="2020-01-06" description="Feature and maintenance release.">
      <action dev="ggregory" due-to="Eitan Adler" type="fix">
        Clean up tests and simplify assertions #76.
      </action>
      <action issue="VFS-750" dev="ggregory" due-to="Boris Petrov, Gary Gregory" type="fix">
        Fix backwards incompatibility in AbstractFileObject.getInputStream().
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update JUnit from 4.12 to 4.13.
      </action>
      <action issue="VFS-751" dev="ggregory" due-to="Gary Gregory" type="fix">
        Deprecate org.apache.commons.vfs2.FileUtil for org.apache.commons.vfs2.util.FileObjectUtils.
      </action>
    </release>
    <release version="2.5.0" date="2019-12-24" description="Feature and maintenance release.">
      <action issue="VFS-741" dev="ecki" type="fix">
        FileObject#getChildren allows listing of files with known scheme prefix (generalizes VFS-398).
      </action>
      <action issue="VFS-726" dev="ggregory" type="fix" due-to="Cornelius Höfig, Gary Gregory">
        getInputStream(int bufferSize) on SftpFileObject effectively ignores buffer size.
      </action>
      <action issue="VFS-704" dev="ggregory" type="fix" due-to="Boris Petrov, Gary Gregory">
        Some providers wrap their input/output streams twice in a BufferedInputStream.
      </action>
      <action issue="VFS-727" dev="ggregory" type="fix" due-to="Michiel Hendriks, Gary Gregory">
        Prevented creation of singleton file system manager from providers.
      </action>
      <action issue="VFS-444" dev="ggregory" type="fix" due-to="Walter Eaves, Xavier Dury, Michiel Hendriks, Gary Gregory">
        ResourceFileProvider "res://" failed to obtain FileObject from resolved FileName.
      </action>
      <action issue="VFS-728" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Compress from 1.18 to 1.19.
      </action>
      <action issue="VFS-729" dev="ggregory" type="update" due-to="Michiel Hendriks, Gary Gregory">
        Upgrade Hadoop to 2.7.4 or later; will use current 3.2.0.
      </action>
      <action issue="VFS-731" dev="ggregory" type="update" due-to="Gary Gregory">
        Update org.apache.httpcomponents:httpclient from 4.5.9 to 4.5.10.
      </action>
      <action issue="VFS-732" dev="ggregory" type="update" due-to="Gary Gregory">
        Update org.apache.httpcomponents:httpcore-nio from 4.4.11 to 4.4.12.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests using org.mockito:mockito-core from 3.0.0 to 3.1.0.
      </action>
      <action issue="VFS-734" dev="ggregory" type="add" due-to="Gary Gregory">
        Add functional interface org.apache.commons.vfs2.function.VfsConsumer.
      </action>
      <action issue="VFS-735" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.FileSystemManager.close() via AutoCloseable.
      </action>
      <action issue="VFS-736" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.VFS.reset().
      </action>
      <action issue="VFS-737" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Hadoop from 3.2.0 to 3.2.1.
      </action>
      <action issue="VFS-733" dev="ggregory" type="fix" due-to="Falco, Gary Gregory, Bruno P. Kinoshita">
        Parent layer of ZipFileSystem set to null through OnCallRefreshFileObject and DecoratedFileObject.refresh().
      </action>
      <action issue="VFS-738" dev="ggregory" type="add" due-to="Gary Gregory">
        Deprecate org.apache.commons.vfs2.FileChangeEvent.getFile() in favor of getFileObject().
      </action>
      <action issue="VFS-739" dev="ggregory" type="fix" due-to="xia0c, Gary Gregory">
        Changes to parseUri breaks backward compatibility by throwing NullPointerException in some cases.
      </action>
      <action issue="VFS-686" dev="ggregory" type="add" due-to="Woonsan Ko, Gary Gregory">
        Add webdav4 provider based on the latest Jackrabbit 2.x #52.
      </action>
      <action issue="VFS-742" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.FileContent.isEmpty().
      </action>
      <action issue="VFS-743" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.provider.compressed.CompressedFileFileObject.SIZE_UNDEFINED.
      </action>
      <action issue="VFS-744" dev="ggregory" type="fix" due-to="Gary Gregory">
        org.apache.commons.vfs2.FileContent.getByteArray() can throw NegativeArraySizeException for BZip2 files.
      </action>
      <action issue="VFS-687" dev="ggregory" type="add" due-to="Woonsan Ko, Gary Gregory">
        Add http5 and http5s providers (#74)
      </action>
      <action issue="VFS-590" dev="ggregory" type="fix" due-to="L, Alex Pearce, Gary Gregory">
         SFTP moveTo operation might fail on permission checks even if the operation itself might succeed. #75.
      </action>
      <action issue="VFS-617" dev="ggregory" type="fix" due-to="Tim Nickels, Joshua Woods, David Johansson, Bernd Eckenfels, Len, Nim Lhûg, Vineet Tyagi, Gopal Warawate, Alex Pearce, Gary Gregory">
         SFTP isReadable fails if unable to determine group identity. #75.
      </action>
      <action issue="VFS-749" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Parent from 48 to 50.
      </action>
    </release>
    <release version="2.4.1" date="2019-08-10" description="Bug fix release.">
      <action issue="VFS-725" dev="ggregory" type="fix" due-to="Gary Gregory">
        [Local] org.apache.commons.vfs2.FileContent.getLastModifiedTime() is losing milliseconds (always ends in 000).
      </action>
      <action issue="VFS-724" dev="ggregory" type="fix" due-to="William R, Gary Gregory">
        FileContent#getByteArray() throws IllegalArgumentException: Buffer size &lt;= 0 when file size is 0.
      </action>
      <action                 dev="ggregory" type="fix" due-to="Gary Gregory">
        Javadoc fixes.
      </action>
    </release>
    <release version="2.4" date="2019-07-12" description="Feature and maintenance release.">
      <action issue="VFS-690" dev="ggregory" type="add">
        Allow to set key exchange algorithm explicitly. GitHub #32.
      </action>
      <action issue="VFS-692" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Collections from 4.2 to 4.3.
      </action>
      <action issue="VFS-693" dev="ggregory" type="update" due-to="Boris Petrov, Gary Gregory">
        Add support for customizing FTP transfer aborted status codes. GitHub PR #51.
      </action>
      <action issue="VFS-694" dev="ggregory" type="fix" due-to="Boris Petrov">
        Fix inability to start the DefaultFileMonitor after it has been stopped. GitHub PR #55.
      </action>
      <action issue="VFS-696" dev="ggregory" type="fix" due-to="rayzzed">
        SFTP HTTP and SOCKS proxy authentication. GitHub PR #49.
      </action>
      <action issue="VFS-497" dev="ggregory" type="add" due-to="Michael Schnell">
        Ported filters from Commons IO #9.
      </action>
      <action issue="VFS-696" dev="ggregory" type="add" due-to="Robert DeRose">
        More efficient comparison in FileExtensionSelector #44.
      </action>
      <action issue="VFS-660" dev="ggregory" type="add" due-to="Liu Yubao">
        Expose workaround for connecting to FTP server from different subnets in PASV mode #35.
      </action>
      <action issue="VFS-699" dev="ggregory" type="add" due-to="Boris Petrov">
        Add setting for FTP encoding auto-detection #58.
      </action>
      <action issue="VFS-702" dev="ggregory" type="update" due-to="Boris Petrov">
        Simplify adding files to DefaultFileMonitor #57.
      </action>
      <action issue="VFS-703" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Lang from 3.8.1 to 3.9.
      </action>
      <action issue="VFS-706" dev="ggregory" type="add" due-to="Boris Petrov">
        Add ability to specify buffer sizes #59.
      </action>
      <action issue="VFS-609" dev="ggregory" type="add" due-to="stevezhuang, Rostislav, Gary Gregory">
        SFTP provider doesn't support a private key as byte array #60.
      </action>
      <action issue="VFS-707" dev="ggregory" type="add" due-to="Gary Gregory">
        Update Apache HttpClient from 4.5.7 to 4.5.8.
      </action>
      <action issue="VFS-707" dev="ggregory" type="fix" due-to="Gary Gregory">
        [SFTP] SftpFileSystem.executeCommand(String, StringBuilder) can leak ChannelExec objects.
      </action>
      <action issue="VFS-709" dev="ggregory" type="fix" due-to="Gary Gregory">
        [SFTP] SftpFileSystem.getGroupsIds() can initialize underlying data more than once while multithreading.
      </action>
      <action issue="VFS-710" dev="ggregory" type="fix" due-to="Gary Gregory">
        [SFTP] SftpFileSystem.getUid() can initialize underlying data more than once while multithreading.
      </action>
      <action issue="VFS-711" dev="ggregory" type="fix" due-to="Gary Gregory">
        [SFTP] SftpFileSystem can initialize underlying Session more than once while multithreading.
      </action>
      <action issue="VFS-662" dev="ggregory" type="fix" due-to="qxo, Alexey Abashev, Gary Gregory">
        [SFTP] SftpFileSystem has Thread-safe issue about idleChannel (#36).
      </action>
      <action issue="VFS-700" dev="ggregory" type="fix" due-to="Gary Gregory, Matthias Krueger">
        Some tests fail on Java 11 and above.
      </action>
      <action issue="VFS-712" dev="ggregory" type="add" due-to="Gary Gregory">
        Add null-safe org.apache.commons.vfs2.util.FileObjectUtils.exists(FileObject).
      </action>
      <action issue="VFS-713" dev="ggregory" type="add" due-to="Gary Gregory">
        Add FileObjectUtils.readProperties(FileObject) method to read a .properties file.
      </action>
      <action issue="VFS-715" dev="ggregory" type="add" due-to="Gary Gregory">
        Add org.apache.commons.vfs2.FileContent.getByteArray().
      </action>
      <action issue="VFS-716" dev="ggregory" type="fix" due-to="Boris Petrov">
        Fix AbstractFileName.getURI returning unencoded #-sign #64.
      </action>
      <action issue="VFS-698" dev="ggregory" type="fix" due-to="David Septimus, Bernd">
        SFTP file attributes are fetched multiple times leading to very slow directory listing; #65.
      </action>
      <action issue="VFS-717" dev="ggregory" type="fix" due-to="Gary Gregory">
        Update org.apache.httpcomponents:httpclient from 4.5.8 to 4.5.9.
      </action>
      <action issue="VFS-718" dev="ggregory" type="fix" due-to="Boris Petrov">
        MonitorInputStream should not close the stream in "read" #67.
      </action>
      <action issue="VFS-719" dev="ggregory" type="add" due-to="Gary Gregory">
        Add methods to get the contents of file objects as strings.
      </action>
      <action issue="VFS-720" dev="ggregory" type="add" due-to="Boris Petrov">
        Implement Closeable for RandomAccessContent #66.
      </action>
      <action issue="VFS-721" dev="ggregory" type="add" due-to="Gary Gregory">
        Add support for symbolic links for the local file system and add FileObject#isSymbolicLink().
      </action>
      <action issue="VFS-722" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Apache Commons Collections from 4.3 to 4.4.
      </action>
      <!-- Source code notes -->
      <action dev="ggregory" type="update">
        Source incompatibility: org.apache.commons.vfs2.FileFilter.accept(FileSelectInfo) now throws checked exception FileSystemException.
      </action>
      <action dev="ggregory" type="update">
        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.
      </action>
      <action dev="ggregory" type="update">
        Public API note: The overridden method org.apache.commons.vfs2.provider.sftp.SftpFileObject#refresh() was removed but is implemented in a superclass.
      </action>
      <action dev="ggregory" type="update">
        Public API note: The overridden method org.apache.commons.vfs2.provider.sftp.SftpFileProvider#init() was removed but is implemented in a superclass.
      </action>
    </release>
    <release version="2.3" date="2019-02-01" description="Feature and maintenance release.">
      <action issue="VFS-645" dev="ggregory" type="fix">
		VfsClassLoaderTests and JarProviderTestCase fails on Java 9 and up.
      </action>
      <action issue="VFS-678" dev="ecki" type="fix">
        Fix various LGTM.com code review warnings.
      </action>
      <action issue="VFS-652" dev="ecki" type="fix">
        PatternFileSelector documentation to describe actual matching against getPath().
      </action>
      <action issue="VFS-650" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.15 to 1.16.1.
      </action>
      <action issue="VFS-646" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.14 to 1.15.
      </action>
      <action issue="VFS-589" dev="ggregory" type="fix" due-to="L, Gary Gregory">
        SFTP moveTo operation hangs if the server does not support SSH channelExec.
      </action>
      <action issue="VFS-653" dev="ggregory" type="update">
        Replace use of deprecated APIs in HDFS provider.
      </action>
      <action issue="VFS-655" dev="ggregory" type="fix" due-to="Arnaud MERGEY">
        OSGI MANIFEST.MF "Import-Package" should be ";resolution:=optional" for Maven "optional" dependencies.
      </action>
      <action issue="VFS-657" dev="ggregory" type="fix" due-to="Elias Putz">
        FileSelector implementations like FileDepthSelector should throw Exception.
      </action>
      <action issue="VFS-614" dev="ggregory" type="fix" due-to="Boris Petrov, Otto Fowler">
        MonitorInputStream should not close the stream in read().
      </action>
      <action issue="VFS-666" dev="ggregory" type="update">
        Update Apache Commons Collections from 4.1 to 4.2.
      </action>
      <action issue="VFS-667" dev="ggregory" type="fix">
        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.
      </action>
      <action issue="VFS-668" dev="ggregory" type="update">
        Throw a NPE with a better message when a class loader is null.
      </action>
      <action issue="VFS-669" dev="ggregory" type="fix">
        org.apache.commons.vfs2.util.CombinedResources.loadResources(String) should not throw an NPE for the system class loader is null.
      </action>
      <action issue="VFS-671" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.16.1 to 1.18.
      </action>
      <action issue="VFS-675" dev="ggregory" type="fix">
        NullPointerException at AbstractFileObject.java:221.
      </action>
      <action issue="VFS-680" dev="ggregory" type="update">
        Update from Java 7 to Java 8.
      </action>
      <action issue="VFS-681" dev="ggregory" type="update" due-to="Robert DeRose">
        VFS.setManager should be synchronized; #43.
      </action>
      <action issue="VFS-674" dev="ggregory" type="fix" due-to="Boris Petrov, Gary Gregory">
        Cannot close an FTP input stream without an exception.
      </action>
      <action issue="VFS-682" dev="ggregory" type="update">
        Throw a org.apache.commons.vfs2.FileSystemException instead of a NullPointerException in org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveName(FileName, String, NameScope).
      </action>
      <action issue="VFS-294" dev="ggregory" type="fix" due-to="Johannes Scharf">
        NullPointerException in FtpFileObject.getChildFile().
      </action>
      <action issue="VFS-679" dev="ggregory" type="fix" due-to="Boris Petrov, Gary Gregory">
        NullPointerException in FtpFileObject.doGetLastModifiedTime().
      </action>
      <action issue="VFS-398" dev="ggregory" type="fix" due-to="Otto Fowler">
        FtpFileObject.getChildren() fails when a folder contains a file with a colon in the name.
      </action>
      <action issue="VFS-688" dev="ggregory" type="update">
        [SFTP] Update jsch from 0.1.54 to 0.1.55.
      </action>
      <action issue="VFS-677" dev="ggregory" type="add" due-to="dingxbcn">
        [SFTP] Add support for append mode.
      </action>
      <action issue="VFS-673" dev="ggregory" type="add" due-to="Oleksandr Lykhonosov">
        [SFTP] Support com.jcraft.jsch.ConfigRepository (~/.ssh/config) with SftpFileSystemConfigBuilder and flag to load OpenSSHConfig.
      </action>
      <action issue="VFS-673" dev="ggregory" type="add" due-to="Daniel Banks">
        DefaultFileSystemManager should implement AutoCloseable.
      </action>
      <action issue="VFS-637" dev="ggregory" type="add" due-to="Gary Gregory">
        Zip files with legacy encoding and special characters let VFS crash.
      </action>
      <action issue="VFS-360" dev="ggregory" type="add" due-to="Woonsan Ko">
        Add HTTP provider based on HttpComponents HttpClient 4.
      </action>
      <action issue="VFS-689" dev="ggregory" type="add" due-to="Gary Gregory">
        org.apache.commons.vfs2.provider.http.HttpFileObject.getHeadMethod() does not release connection when an exception is thrown.
      </action>
    </release>
    <release version="2.2" date="2017-10-06" description="Feature and maintenance release.">
      <action issue="VFS-642" dev="pschumacher" type="update" due-to="ilangoldfeld">
        Upgrade to jcifs 1.3.17
      </action>
      <action issue="VFS-189" dev="kinow" type="fix">
        Possible NPE in DefaultFileSystemManager.
      </action>
      <action issue="VFS-628" dev="ggregory" type="add">
        Add a file inverter FileSelector: InvertIncludeFileSelector.
      </action>
      <action issue="VFS-612" dev="ggregory" type="update">
        Update the platform requirement from Java 6 to Java 7.
      </action>
      <action issue="VFS-615" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.11 to 1.12.
      </action>
      <action issue="VFS-629" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.12 to 1.13.
      </action>
      <action issue="VFS-639" dev="ggregory" type="update">
        Update Apache Commons Compress from 1.13 to 1.14.
      </action>
      <action issue="VFS-631" dev="ggregory" type="update">
        Update from Apache Commons Net 3.5 to 3.6.
      </action>
      <action issue="VFS-632" dev="ggregory" type="update">
        Update from JCraft jsch for SFTP/SSH from 0.1.53 to 0.1.54.
      </action>
      <action issue="VFS-621" dev="ggregory" type="update">
        Add API VFS.setManager(FileSystemManager).
      </action>
      <action issue="VFS-643" dev="ggregory" type="update">
        VFS should not log at the INFO level.
      </action>
      <action issue="VFS-620" dev="ggregory" type="fix" due-to="stevezhuang">
        FileObject.moveTo(FileObject) API doesn't work well for a Linux FTP.
      </action>
      <action issue="VFS-291" dev="ggregory" type="fix">
        ZIP archives are not properly closed after unzipping and cannot be deleted until the JVM exists.
      </action>
      <action issue="VFS-644" dev="ggregory" type="fix">
        AbstractFileSystem.streamClosed() always sets openStream count to zero.
      </action>
    </release>
    <release version="2.1" date="2016-05-19" 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>
