Julien Béti created NET-717: ------------------------------- Summary: FTPClient: Encapsulate completePendingCommand in returned outputstream Key: NET-717 URL: https://issues.apache.org/jira/browse/NET-717 Project: Commons Net Issue Type: Improvement Components: FTP Reporter: Julien Béti
Most store / retrieve methods in {{FTPClient}} class requires a call to {{completePendingCommand}} method in order to make sure that the operation completed successfully, and allow additional operations to go on. This is clearly documented, but often lead to clumsy code as 99% of the time we just need to know if the file operation executed successfully or not (and in some case, the {{completePendingCommand}} is simply forgotten leading to, as documented, unexpected behavior of subsequent commands. The idea would be to return a {{FilterOutputStream}} / {{FilterInputStream}} that would encapsulates the returned {{OutputStream}}/{{InputStream}} returned by methods that need a subsequent call to {{completePendingCommand}}. These filter implementations would call the {{completePendingCommand}} method on {{close}}, throwing an {{IOException}} if it returns false. {code:java} package org.apache.commons.net.ftp; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; public class FTPOutputStream extends FilterOutputStream { private final FTPClient ftpClient; public FTPOutputStream(OutputStream out, FTPClient ftpClient) { super(out); this.ftpClient = ftpClient; } @Override public void close() throws IOException { super.close(); if(!ftpClient.completePendingCommand()) { throw new IOException("FTP Client was unable to complete pending command"); } } } {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)