<?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.10.0" date="2021-MM-DD" description="Maintenance release. Requires Java 8.">
      <!-- FIX -->
      <action type="fix" dev="ggregory" due-to="Seth Falco">
        Replace package.html with package-info.java #206. 
      </action>
      <action type="fix" issue="VFS-807" dev="ggregory" due-to="Gary Gregory, L">
        LocalFile.doGetOutputStream(boolean) for an existing file no longer truncates the file.
      </action>
      <action type="fix" dev="ggregory" due-to="wodencafe">
        (doc) Update the Javadoc link to not lead to 404. #218.
      </action>
      <action type="fix" issue="VFS-810" dev="ggregory" due-to="Jan Aelbrecht, Gary Gregory">
        Percent encoded backslashes in authority of URLs aren't allowed for WebDav.
      </action>
      <action type="fix" issue="VFS-793" dev="ggregory" due-to="Vitali Nashkevich, Gary Gregory">
        GenericFileName.getURI() returns invalid URI.
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Fix typos in error messages.
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        LocalFile: Fix exception message "Unknown message with code" and use an actual message code.
      </action>
      <action type="fix" issue="VFS-778" dev="ggregory" due-to="zhouwenqing, Gary Gregory">
        SFTP channel isn't returned to the pool when SftpFileObject.doGetOutputStream throws an exception. #215.
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Fix OSGi "Unused Import-Package instructions".
      </action>
      <action type="fix" issue="VFS-813" dev="ggregory" due-to="Andrey Turbanov, Gary Gregory">
        NullPointerException needs a better message in SftpClientFactory when connect with private key.
      </action>
      <action type="fix" issue="VFS-811" dev="ggregory" due-to="Woonsan Ko, Gary Gregory">
        Javadoc API links are broken in the commons-vfs project site #227.
      </action>
      <action type="fix" issue="VFS-812" dev="ggregory" due-to="XenoAmess, Gary Gregory">
        Don't throw FileSystemException when closing file content output stream using a BufferedOutputStream #228.
      </action>
      <action type="fix" issue="VFS-814" dev="ggregory" due-to="Luke Wood, Gary Gregory">
        FtpFileObject: re-fetch MDTM after refresh #238.
      </action>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal">
        Simplify conditions and avoid extra checks #253.
      </action>
      <action type="fix" dev="ggregory" due-to="Boris Petrov, Gary Gregory">
        Refactor AbstractFileObject#getOutputStream() #151.
      </action>
      <action type="fix" issue="VFS-770" dev="ggregory" due-to="Thomas BELOT, PeterAlfredLee, Gary Gregory">
        FileSystemManager.createFileSystem(FileObject) fails on Gzip files. #92.
      </action>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal">
        Simplify/remove redundant operations. #258.
      </action>      
      <action type="fix" dev="ggregory" due-to="Tobias Gierke, Gary Gregory">
        SFTP: Memory leak because AbstractFileProvider#findFileSystem.
      </action>
      <action type="fix" dev="ggregory" due-to="Marc Wrobel">
        Fix typos #275, #276, #277.
      </action>
      <action type="fix" dev="ggregory" due-to="Marc Wrobel">
        Fix links in Javadoc and documentations #284.
      </action>
      <action type="fix" dev="ggregory" due-to="Mark van der Walle, Gary Gregory">
        [SFTP] Handle the case where a user does not have any groups #280.
      </action>
      <action type="fix" dev="ggregory" due-to="ymenager">
        hadoop-hdfs-client is not set as optional #291.
      </action>
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Seth Falco">
        Add vscode files to gitignore #205.
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        Add DefaultFileMonitor.setDelay(Duration), getDelayDuration() and deprecate setDelay(long), getDelay().
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        DefaultFileMonitor implements AutoCloseable.
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        Add FalseFileFilter.INSTANCE and deprecate FalseFileFilter.FALSE.
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        Add TrueFileFilter.INSTANCE and deprecate TrueFileFilter.TRUE.
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        FileSystemOptions implements Comparable.
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        Add RandomAccessMode.from(AccessMode) and toAccessModes().
      </action>
      <action type="add" dev="ggregory" due-to="Gary Gregory">
        Extract the layer separator character constant into LayeredFileName.LAYER_SEPARATOR.
      </action>
      <action type="add" dev="ggregory">
        Add github/codeql-action.
      </action>
      <action issue="VFS-821" type="add" dev="ggregory" due-to="Marc Wrobel, Gary Gregory">
        Deprecate FileSelector#traverseDescendents in favor of traverseDescendants.
      </action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump actions/cache from 2.1.6 to 3.0.8 #221, #249.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump actions/checkout from 2.3.4 to 3.0.2 #217, #220, #245.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump actions/setup-java from 2 to 3.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot">
        Bump jakarta.mail from 1.6.7 to 2.0.1 #200.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump commons.animal-sniffer.version from 1.19 to 1.21.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump com.puppycrawl.tools:checkstyle from 8.44 to 9.3 #211.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump com.github.spotbugs:spotbugs from 4.3.0 to 4.7.2 #216, #269.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">
        Bump spotbugs-maven-plugin from 4.3.0 to 4.7.2.0, #229, #236. #264, #282.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump jackrabbit2.version from 2.21.7 to 2.21.12 #219, #289.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump org.apache.httpcomponents.client5:httpclient5 from 5.1 to 5.1.3.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">
        Bump org.apache.mina:mina-core from 2.1.4 to 2.1.6.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump maven-pmd-plugin from 3.14.0 to 3.19.0 #223, #294, #304.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump net.sourceforge.pmd:pmd-* from 6.36.0 to 6.49.0 #208, #247, #256, #261, #266, #270, #283.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">
        Bump org.mockito:mockito-core from 3.11.2 to 4.8.0 #263, #292, #308.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">
        Bump maven-javadoc-plugin from 3.3.0 to 3.4.1, #293.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump biz.aQute.bnd:biz.aQute.bndlib from 5.3.0 to 6.3.1.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump commons.japicmp.version from 0.15.3 to 0.16.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory, John Patrick, Dependabot" type="update">
        Replace JUnit 4.13.2 with 5.9.1 #281, #306.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump org.apache.httpcomponents:httpcore-nio 4.4.14 -> 4.4.15.
      </action>
      <action dev="ggregory" due-to="Gary Gregory, Dependabot" type="update">
        Bump Apache Log4j 2.14.1 to 2.19.0 [Tests] #226, #230, #305.
      </action>
      <action dev="ggregory" due-to="XenoAmess" type="update">
        Bump ftpserver-core from 1.1.1 to 1.1.2 #235.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump hadoop.version from 3.3.1 to 3.3.4 #246, #262, #290.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump slf4j.version from 1.7.26 to 1.7.36 #244.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump commons-parent from 52 to 54 #302.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump org.ow2.asm:asm from 9.2 to 9.3.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump commons.jacoco.version from 0.8.7 to 0.8.8.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump commons.surefire.version from 3.0.0-M5 to 3.0.0-M7.
      </action>
    </release>
    <release version="2.9.0" date="2021-06-16" description="Maintenance release. Requires Java 8.">
      <!-- ADDS -->
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Add and use FileOperationProvider.EMPTY_ARRAY.
      </action>      
      <!-- 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>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal">
        Minor changes #185.
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Port internal embedded HTTP asynchronous file server used in tests from Apache HttpComponents HttpCore/HttpClient 4.x to 5.0.x.
      </action>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal">
        Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #164.
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Only use reflection VFS.createFileSystemManager(String) if the FileSystemManager is not a subclass of AbstractFileSystem.
      </action>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal">
        Simplify if conditions #170.
      </action>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal">
        Redundant local variable #171.
      </action>
      <action type="fix" issue="VFS-804" dev="ggregory" due-to="Arturo Bernal">
        Fix and Refine Javadoc #174.
      </action>
      <action type="fix" issue="VFS-784" dev="ggregory" due-to="satish-csi, Michael Osipov, Gary Gregory">
        SSL Connection failing with http4 provider with squid proxy nginx combination.
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Remove checked exception from method signatures that do not throw them. This maintains binary compatibility but not source compatibility.
        - org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder.setUserAuthenticator(FileSystemOptions, UserAuthenticator)
        - org.apache.commons.vfs2.impl.DefaultFileSystemManager.setBaseFile(File)
        - org.apache.commons.vfs2.provider.LayeredFileNameParser.extractRootName(StringBuilder)
        - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setCompression(FileSystemOptions, String)
        - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setConfigRepository(FileSystemOptions, ConfigRepository)
        - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setIdentities(FileSystemOptions, File...)
        - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setIdentityInfo(FileSystemOptions, IdentityInfo...)
        - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setIdentityProvider(FileSystemOptions, IdentityProvider...)
        - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setIdentityRepositoryFactory(FileSystemOptions, IdentityRepositoryFactory)
        - org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder.setKnownHosts(FileSystemOptions, File)
        - org.apache.commons.vfs2.provider.local.LocalFile.LocalFile(LocalFileSystem, String, AbstractFileName)
        - org.apache.commons.vfs2.provider.local.LocalFile.doGetType()
        - org.apache.commons.vfs2.provider.tar.TarFileObject.TarFileObject(AbstractFileName, TarArchiveEntry, TarFileSystem, boolean)
        - org.apache.commons.vfs2.provider.tar.TarFileSystem.createTarFileObject(AbstractFileName, TarArchiveEntry)
        - org.apache.commons.vfs2.provider.zip.ZipFileObject.ZipFileObject(AbstractFileName, ZipEntry, ZipFileSystem, boolean)
        - org.apache.commons.vfs2.provider.http4.Http4FileProvider.createHttpClientContext()
        - org.apache.commons.vfs2.provider.http5.Http5FileProvider.createHttpClientContext()
        - org.apache.commons.vfs2.provider.http4.Http4FileObject.getInternalURI()
        - org.apache.commons.vfs2.provider.http5.Http5FileObject.getInternalURI()
      </action>
      <action type="fix" issue="VFS-805" dev="ggregory" due-to="Claus Stadler, Gary Gregory">
        HTTP seek always exhausts response #186.
      </action>
      <action type="fix" issue="VFS-805" dev="ggregory" due-to="Max Kellermann, Mark Thomas, Bernd, Gary Gregory">
        SftpFileObject: Add synchronized to methods that read or write the thread-unsafe instance variable of type com.jcraft.jsch.SftpATTRS.
      </action>
      <action type="fix" issue="VFS-759" dev="ggregory" due-to="Woonsan Ko">
        WebDAV providers should be loaded only when commons-vfs2-jackrabbit* jars are available #84
      </action>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal">
        Simplify conditions and avoid extra checks #187.
      </action>
      <action type="fix" issue="VFS-803" dev="ggregory" due-to="Arturo Bernal">
        Simplify if as some conditions are covered by others #173.
      </action>
      <!-- UPDATES  -->
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump Log4j 2.14.0 -> 2.14.1.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump Maven Surefire from 2.19.1 to 3.0.0-M5.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory" >
        Bump net.sourceforge.pmd:pmd-* from 6.32.0 to 6.36.0 #191.
      </action>
      <action dev="ggregory" due-to="Dependabot, Gary Gregory" type="update">
        Bump checkstyle from 8.41 to 9.2 #175.
      </action>
      <action dev="ggregory" due-to="Boris Petrov" type="update">
        Bump actions/setup-java to v2 #177.
      </action>
      <action dev="ggregory" due-to="Dependabot, Gary Gregory" type="update">
        Bump mockito-core from 3.8.0 to 3.11.2 #178.
      </action>
      <action dev="ggregory" due-to="Gary Gregory, Dependabot" type="update">
        Bump commons-io from 2.8.0 to 2.11.0 #197.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump actions/cache from 2.1.4 to 2.1.6 #183.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump jackrabbit2.version from 2.21.5 to 2.21.6 #180.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump commons.jacoco.version from 0.8.6 to 0.8.7.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump hadoop.version 3.3.0 to 3.3.1.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump asm from 9.1 to 9.2 #194.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump commons-compress from 1.20 to 1.21 #195.
      </action>
      <action dev="ggregory" due-to="Dependabot" type="update">
        Bump httpclient5 from 5.0.3 to 5.1 #196.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump commons.spotbugs.version from 4.2.2 to 4.3.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump commons.spotbugs.impl.version from 4.2.2 to 4.3.0.
        Workaround https://github.com/spotbugs/spotbugs/issues/1539
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump commons.felix.version from 5.1.1 to 5.1.2.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump biz.aQute.bndlib.version from 5.1.2 to 5.3.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Bump commons.javadoc.version from 3.2.0 to 3.3.0.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="update">
        Update from to javax.mail:mail 1.4.7 to com.sun.mail:jakarta.mail 1.6.7.
      </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 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.separator 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 FileOperationProviders 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">
        FileSystemConfigBuilder 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.bouncycastle: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 descendants 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 website.
      </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>
