Class FileTransferProtocolSSLClient

  • All Implemented Interfaces:
    org.ikasan.connector.base.command.TransactionalResource, org.ikasan.connector.basefiletransfer.net.FileTransferClient, FileTransferProtocol

    public class FileTransferProtocolSSLClient
    extends java.lang.Object
    implements FileTransferProtocol

    This class provides the basic functionality of an FTP SSL client based on Apache's commons-net library. Some of the basic functionality is wrapped to provide FileTransferProtocolClient specific exceptions, or to provide the functionality required by a framework component.

    TODO This has a good deal of similar code to SFTP client, might be able to get some common code out of that
    Author:
    Ikasan Development Team
    • Constructor Summary

      Constructors 
      Constructor Description
      FileTransferProtocolSSLClient​(boolean active, java.lang.String remoteHostname, java.lang.String localHost, java.lang.Integer maxRetryAttempts, java.lang.String password, java.lang.Integer remotePort, java.lang.String username, java.lang.String systemKey, java.lang.Integer connectionTimeout, java.lang.Integer soTimeout, java.lang.Integer dataTimeout, boolean FTPS, java.lang.Integer ftpsPort, java.lang.String ftpsProtocol, boolean ftpsIsImplicit, java.lang.String ftpsKeyStoreFilePath, java.lang.String ftpsKeyStoreFilePassword)
      Constructor
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void cd​(java.lang.String targetPath)  
      void connect()
      Connect to the FTP server
      void deleteRemoteDirectory​(java.lang.String directoryPath, boolean recurse)  
      void deleteRemoteFile​(java.lang.String filename)  
      void disconnect()
      Disconnect
      void echoConfig()
      Method used to log the configuration information used to initialise the client.
      void ensureConnection()  
      org.ikasan.connector.basefiletransfer.net.BaseFileTransferMappedRecord get​(java.lang.String filePath)  
      void get​(java.lang.String filePath, java.io.OutputStream outputStream)
      OutputStream is closed by the caller
      void get​(java.lang.String filePath, java.io.OutputStream outputStream, int resume, long offset)  
      org.ikasan.connector.basefiletransfer.net.BaseFileTransferMappedRecord get​(org.ikasan.connector.basefiletransfer.net.ClientListEntry clientListEntry)  
      java.io.InputStream getAsInputStream​(java.lang.String filePath)  
      java.io.InputStream getContentAsStream​(org.ikasan.connector.basefiletransfer.net.ClientListEntry entry)  
      boolean isConnected()
      Method that tests if the underlying library is valid and connected.
      void login()
      login to the FTP server
      java.util.List<org.ikasan.connector.basefiletransfer.net.ClientListEntry> ls​(java.lang.String path)
      Method used to get a list of all files and directories in the target path including the "." and ".." directories.
      void mkdir​(java.lang.String newPath)
      Utility method for mkdir(String newDirPath, boolean force) that defaults the force parameter to true.
      void put​(java.lang.String name, byte[] content)  
      void putWithOutputStream​(java.lang.String fileName, java.io.InputStream inputStream)
      FTP Put using an output stream form an input stream.
      java.lang.String pwd()  
      void rename​(java.lang.String currentPath, java.lang.String newPath)  
      void validateConstructorArgs()
      All constructor arguments are essential, so use this method to validate them before attempting connection
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • FileTransferProtocolSSLClient

        public FileTransferProtocolSSLClient​(boolean active,
                                             java.lang.String remoteHostname,
                                             java.lang.String localHost,
                                             java.lang.Integer maxRetryAttempts,
                                             java.lang.String password,
                                             java.lang.Integer remotePort,
                                             java.lang.String username,
                                             java.lang.String systemKey,
                                             java.lang.Integer connectionTimeout,
                                             java.lang.Integer soTimeout,
                                             java.lang.Integer dataTimeout,
                                             boolean FTPS,
                                             java.lang.Integer ftpsPort,
                                             java.lang.String ftpsProtocol,
                                             boolean ftpsIsImplicit,
                                             java.lang.String ftpsKeyStoreFilePath,
                                             java.lang.String ftpsKeyStoreFilePassword)
        Constructor
        Parameters:
        active - Whether we are active or passive mode
        remoteHostname - The remote hostname
        localHost - the local host
        maxRetryAttempts - The maximum amount of retries
        password - The password to connect with
        remotePort - The remote port to connect to
        username - The username
        systemKey - The system key
        connectionTimeout - connection timeout
        soTimeout - Socket timeout in ms after getting a connection
        dataTimeout - Data connection timeout in ms after opening a socket
        FTPS - Whether use FTPS or not, default false
        ftpsPort - FTPS port
        ftpsProtocol - FTPS protocol - SSL TSL
        ftpsIsImplicit - FTPS implicit or explicit
        ftpsKeyStoreFilePassword - keyStore password
        ftpsKeyStoreFilePath - keyStore of FTPSClient for client authentication
    • Method Detail

      • validateConstructorArgs

        public void validateConstructorArgs()
                                     throws org.ikasan.connector.basefiletransfer.net.ClientInitialisationException
        All constructor arguments are essential, so use this method to validate them before attempting connection
        Specified by:
        validateConstructorArgs in interface FileTransferProtocol
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientInitialisationException - if any of the required parameters are invalid
      • connect

        public void connect()
                     throws org.ikasan.connector.basefiletransfer.net.ClientConnectionException
        Connect to the FTP server
        Specified by:
        connect in interface FileTransferProtocol
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientConnectionException - Exception thrown when we can't connect
      • login

        public void login()
                   throws org.ikasan.connector.basefiletransfer.net.ClientConnectionException
        login to the FTP server
        Specified by:
        login in interface FileTransferProtocol
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientConnectionException - Exception thrown when we can't connect
      • isConnected

        public boolean isConnected()
        Method that tests if the underlying library is valid and connected.
        Specified by:
        isConnected in interface FileTransferProtocol
        Returns:
        true if fully connected, false otherwise
      • disconnect

        public void disconnect()
        Disconnect
        Specified by:
        disconnect in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
      • echoConfig

        public void echoConfig()
        Method used to log the configuration information used to initialise the client.
        Specified by:
        echoConfig in interface FileTransferProtocol
      • ensureConnection

        public void ensureConnection()
                              throws javax.resource.ResourceException
        Specified by:
        ensureConnection in interface org.ikasan.connector.base.command.TransactionalResource
        Throws:
        javax.resource.ResourceException
      • cd

        public void cd​(java.lang.String targetPath)
                throws org.ikasan.connector.basefiletransfer.net.ClientCommandCdException
        Specified by:
        cd in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandCdException
      • deleteRemoteDirectory

        public void deleteRemoteDirectory​(java.lang.String directoryPath,
                                          boolean recurse)
                                   throws org.ikasan.connector.basefiletransfer.net.ClientException,
                                          org.ikasan.connector.basefiletransfer.net.ClientCommandLsException
        Specified by:
        deleteRemoteDirectory in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientException
        org.ikasan.connector.basefiletransfer.net.ClientCommandLsException
      • deleteRemoteFile

        public void deleteRemoteFile​(java.lang.String filename)
                              throws org.ikasan.connector.basefiletransfer.net.ClientException
        Specified by:
        deleteRemoteFile in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientException
      • get

        public org.ikasan.connector.basefiletransfer.net.BaseFileTransferMappedRecord get​(org.ikasan.connector.basefiletransfer.net.ClientListEntry clientListEntry)
                                                                                   throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        get in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • get

        public org.ikasan.connector.basefiletransfer.net.BaseFileTransferMappedRecord get​(java.lang.String filePath)
                                                                                   throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        get in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • get

        public void get​(java.lang.String filePath,
                        java.io.OutputStream outputStream)
                 throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        OutputStream is closed by the caller
        Specified by:
        get in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Parameters:
        filePath - The path to the file that we're getting
        outputStream - The stream we're getting the file with
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException - Exception if we could not get the file
      • get

        public void get​(java.lang.String filePath,
                        java.io.OutputStream outputStream,
                        int resume,
                        long offset)
                 throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        get in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • getAsInputStream

        public java.io.InputStream getAsInputStream​(java.lang.String filePath)
                                             throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        getAsInputStream in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • getContentAsStream

        public java.io.InputStream getContentAsStream​(org.ikasan.connector.basefiletransfer.net.ClientListEntry entry)
                                               throws org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
        Specified by:
        getContentAsStream in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandGetException
      • ls

        public java.util.List<org.ikasan.connector.basefiletransfer.net.ClientListEntry> ls​(java.lang.String path)
                                                                                     throws org.ikasan.connector.basefiletransfer.net.ClientCommandLsException,
                                                                                            java.net.URISyntaxException
        Method used to get a list of all files and directories in the target path including the "." and ".." directories.
        Specified by:
        ls in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Parameters:
        path - The (directory) path to list.
        Returns:
        A ClientListEntry typed List
        Throws:
        java.net.URISyntaxException - If a malformed URI is created
        org.ikasan.connector.basefiletransfer.net.ClientCommandLsException - If the directory listing fails (i.e. path not a directory or path not found)
      • put

        public void put​(java.lang.String name,
                        byte[] content)
                 throws org.ikasan.connector.basefiletransfer.net.ClientCommandPutException
        Specified by:
        put in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandPutException
      • putWithOutputStream

        public void putWithOutputStream​(java.lang.String fileName,
                                        java.io.InputStream inputStream)
                                 throws org.ikasan.connector.basefiletransfer.net.ClientCommandPutException,
                                        org.ikasan.connector.basefiletransfer.net.ClientCommandLsException,
                                        org.ikasan.connector.basefiletransfer.net.ClientCommandMkdirException
        FTP Put using an output stream form an input stream.
        Specified by:
        putWithOutputStream in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Parameters:
        fileName - Name of the file we're putting
        inputStream - Stream we're putting the file with
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandPutException - Exception if we can't put
        org.ikasan.connector.basefiletransfer.net.ClientCommandLsException - Exception if we can't lista directory
        org.ikasan.connector.basefiletransfer.net.ClientCommandMkdirException - Exception if we can't make a directory
      • pwd

        public java.lang.String pwd()
                             throws org.ikasan.connector.basefiletransfer.net.ClientCommandPwdException
        Specified by:
        pwd in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandPwdException
      • rename

        public void rename​(java.lang.String currentPath,
                           java.lang.String newPath)
                    throws org.ikasan.connector.basefiletransfer.net.ClientCommandRenameException
        Specified by:
        rename in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandRenameException
      • mkdir

        public void mkdir​(java.lang.String newPath)
                   throws org.ikasan.connector.basefiletransfer.net.ClientCommandMkdirException
        Utility method for mkdir(String newDirPath, boolean force) that defaults the force parameter to true.
        Specified by:
        mkdir in interface org.ikasan.connector.basefiletransfer.net.FileTransferClient
        Parameters:
        newPath - The new path to create
        Throws:
        org.ikasan.connector.basefiletransfer.net.ClientCommandMkdirException - Exception if we can't make a directory