You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2019/04/02 08:55:35 UTC

[camel] branch master updated: [CAMEL-13389] camel-ftp: Headers for Status/Error Response Code of SFTP Like CamelFtpReplyCode And CamelFtpReplyString For FTP/FTPS

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 04b8cc0  [CAMEL-13389] camel-ftp: Headers for Status/Error Response Code of SFTP Like CamelFtpReplyCode And CamelFtpReplyString For FTP/FTPS
04b8cc0 is described below

commit 04b8cc03a5fe411eda21c102f0455d397bbab658
Author: JiriOndrusek <jo...@redhat.com>
AuthorDate: Tue Apr 2 08:32:32 2019 +0200

    [CAMEL-13389] camel-ftp: Headers for Status/Error Response Code of SFTP Like CamelFtpReplyCode And CamelFtpReplyString For FTP/FTPS
---
 .../component/file/remote/SftpOperations.java      | 30 +++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java
index 0d097d3..d92601c 100644
--- a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java
+++ b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java
@@ -77,6 +77,8 @@ import static org.apache.camel.util.ObjectHelper.isNotEmpty;
 public class SftpOperations implements RemoteFileOperations<SftpRemoteFile> {
     private static final Logger LOG = LoggerFactory.getLogger(SftpOperations.class);
     private static final Pattern UP_DIR_PATTERN = Pattern.compile("/[^/]+");
+    private static final int OK_STATUS = 0;
+    private static final String OK_MESSAGE = "OK";
     private Proxy proxy;
     private SftpEndpoint endpoint;
     private ChannelSftp channel;
@@ -764,8 +766,13 @@ public class SftpOperations implements RemoteFileOperations<SftpRemoteFile> {
                 target.setBody(bos.toByteArray());
             }
 
+
+            createResultHeadersFromExchange(null, exchange);
             return true;
-        } catch (IOException | SftpException e) {
+        } catch (SftpException e) {
+            createResultHeadersFromExchange(e, exchange);
+            throw new GenericFileOperationFailedException("Cannot retrieve file: " + name, e);
+        } catch (IOException e) {
             throw new GenericFileOperationFailedException("Cannot retrieve file: " + name, e);
         } finally {
             // change back to current directory if we changed directory
@@ -843,6 +850,7 @@ public class SftpOperations implements RemoteFileOperations<SftpRemoteFile> {
             channel.get(remoteName, os);
 
         } catch (SftpException e) {
+            createResultHeadersFromExchange(e, exchange);
             LOG.trace("Error occurred during retrieving file: {} to local directory. Deleting local work file: {}", name, temp);
             // failed to retrieve the file so we need to close streams and
             // delete in progress file
@@ -862,6 +870,7 @@ public class SftpOperations implements RemoteFileOperations<SftpRemoteFile> {
             }
         }
 
+        createResultHeadersFromExchange(null, exchange);
         LOG.debug("Retrieve file to local work file result: true");
 
         // operation went okay so rename temp to local after we have retrieved
@@ -981,9 +990,11 @@ public class SftpOperations implements RemoteFileOperations<SftpRemoteFile> {
                 channel.chmod(permissions, targetName);
             }
 
+            createResultHeadersFromExchange(null, exchange);
             return true;
 
         } catch (SftpException e) {
+            createResultHeadersFromExchange(e, exchange);
             throw new GenericFileOperationFailedException("Cannot store file: " + name, e);
         } catch (InvalidPayloadException e) {
             throw new GenericFileOperationFailedException("Cannot store file: " + name, e);
@@ -1133,4 +1144,21 @@ public class SftpOperations implements RemoteFileOperations<SftpRemoteFile> {
         }
         return socket;
     }
+
+    /**
+     * Helper method which gets result code and message from sftpException and puts it into header.
+     * In case that exception is null, it sets successfull response.
+     */
+    private void createResultHeadersFromExchange(SftpException sftpException, Exchange exchange) {
+
+        //if exception is null, it means that result was ok
+        if (sftpException == null) {
+            exchange.getIn().setHeader(FtpConstants.FTP_REPLY_CODE, OK_STATUS);
+            exchange.getIn().setHeader(FtpConstants.FTP_REPLY_STRING, OK_MESSAGE);
+        } else {
+            // store client reply information after the operation
+            exchange.getIn().setHeader(FtpConstants.FTP_REPLY_CODE, sftpException.id);
+            exchange.getIn().setHeader(FtpConstants.FTP_REPLY_STRING, sftpException.getMessage());
+        }
+    }
 }