You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/03/11 09:53:56 UTC

svn commit: r752410 - in /camel/branches/camel-1.x/components: camel-ftp/src/main/java/org/apache/camel/component/file/remote/ camel-ftp/src/test/java/org/apache/camel/component/file/remote/ camel-osgi/src/main/java/org/apache/camel/osgi/

Author: davsclaus
Date: Wed Mar 11 08:53:56 2009
New Revision: 752410

URL: http://svn.apache.org/viewvc?rev=752410&view=rev
Log:
CAMEL-1448: FTP component now delete/move file AFTER it have processed it.

Added:
    camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDoNotDeleteFileIfProcessFailTest.java
      - copied, changed from r752405, camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java
Removed:
    camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDeleteNoWritePermissionTest.java
Modified:
    camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
    camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
    camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java
    camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePostfixTest.java
    camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePrefixTest.java
    camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFileTest.java
    camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java

Modified: camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java?rev=752410&r1=752409&r2=752410&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java (original)
+++ camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpConsumer.java Wed Mar 11 08:53:56 2009
@@ -206,47 +206,56 @@
                 exchange.getIn().setHeader(FileComponent.HEADER_FILE_NAME, relativePath);
             }
 
-            if (deleteFile) {
-                // delete file after consuming
-                if (log.isDebugEnabled()) {
-                    log.debug("Deleteing file: " + ftpFile.getName() + " from: " + remoteServer());
-                }
-                boolean deleted = client.deleteFile(ftpFile.getName());
-                if (!deleted) {
-                    String message = "Can not delete file: " + ftpFile.getName() + " from: " + remoteServer();
-                    throw new FtpOperationFailedException(client.getReplyCode(), client.getReplyString(), message);
-                }
-            } else if (isMoveFile()) {
-                String fromName = ftpFile.getName();
-                String toName = getMoveFileName(fromName, exchange);
+
+            // all success so lets process it
+            getProcessor().process(exchange);
+
+            if (exchange.isFailed()) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Moving file: " + fromName + " to: " + toName);
+                    log.debug("Processing of exchange failed, so cannot do FTP post command such as move or delete: " + exchange);
                 }
+            } else {
+                // after processing then do post command such as delete or move
+                if (deleteFile) {
+                    // delete file after consuming
+                    if (log.isDebugEnabled()) {
+                        log.debug("Deleteing file: " + ftpFile.getName() + " from: " + remoteServer());
+                    }
+                    boolean deleted = client.deleteFile(ftpFile.getName());
+                    if (!deleted) {
+                        String message = "Can not delete file: " + ftpFile.getName() + " from: " + remoteServer();
+                        throw new FtpOperationFailedException(client.getReplyCode(), client.getReplyString(), message);
+                    }
+                } else if (isMoveFile()) {
+                    String fromName = ftpFile.getName();
+                    String toName = getMoveFileName(fromName, exchange);
+                    if (log.isDebugEnabled()) {
+                        log.debug("Moving file: " + fromName + " to: " + toName);
+                    }
 
-                // delete any existing file
-                boolean deleted = client.deleteFile(toName);
-                if (!deleted) {
-                    // if we could not delete any existing file then maybe the folder is missing
-                    // build folder if needed
-                    int lastPathIndex = toName.lastIndexOf('/');
-                    if (lastPathIndex != -1) {
-                        String directory = toName.substring(0, lastPathIndex);
-                        if (!FtpUtils.buildDirectory(client, directory)) {
-                            log.warn("Can not build directory: " + directory + " (maybe because of denied permissions)");
+                    // delete any existing file
+                    boolean deleted = client.deleteFile(toName);
+                    if (!deleted) {
+                        // if we could not delete any existing file then maybe the folder is missing
+                        // build folder if needed
+                        int lastPathIndex = toName.lastIndexOf('/');
+                        if (lastPathIndex != -1) {
+                            String directory = toName.substring(0, lastPathIndex);
+                            if (!FtpUtils.buildDirectory(client, directory)) {
+                                log.warn("Can not build directory: " + directory + " (maybe because of denied permissions)");
+                            }
                         }
                     }
-                }
 
-                // try to rename
-                boolean success = client.rename(fromName, toName);
-                if (!success) {
-                    String message = "Can not move file: " + fromName + " to: " + toName;
-                    throw new FtpOperationFailedException(client.getReplyCode(), client.getReplyString(), message);
+                    // try to rename
+                    boolean success = client.rename(fromName, toName);
+                    if (!success) {
+                        String message = "Can not move file: " + fromName + " to: " + toName;
+                        throw new FtpOperationFailedException(client.getReplyCode(), client.getReplyString(), message);
+                    }
                 }
             }
 
-            // all success so lets process it
-            getProcessor().process(exchange);
         }
     }
 

Modified: camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java?rev=752410&r1=752409&r2=752410&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java (original)
+++ camel/branches/camel-1.x/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpConsumer.java Wed Mar 11 08:53:56 2009
@@ -202,43 +202,51 @@
                 exchange.getIn().setHeader(FileComponent.HEADER_FILE_NAME, relativePath);
             }
 
-            if (deleteFile) {
-                // delete file after consuming
-                if (log.isDebugEnabled()) {
-                    log.debug("Deleteing file: " + sftpFile.getFilename() + " from: " + remoteServer());
-                }
-                deleteFile(sftpFile.getFilename());
-            } else if (isMoveFile()) {
-                String fromName = sftpFile.getFilename();
-                String toName = getMoveFileName(fromName, exchange);
+            // all success so lets process it
+            getProcessor().process(exchange);
+
+            if (exchange.isFailed()) {
                 if (log.isDebugEnabled()) {
-                    log.debug("Moving file: " + fromName + " to: " + toName);
+                    log.debug("Processing of exchange failed, so cannot do FTP post command such as move or delete: " + exchange);
                 }
+            } else {
+                // after processing then do post command such as delete or move
+                if (deleteFile) {
+                    // delete file after consuming
+                    if (log.isDebugEnabled()) {
+                        log.debug("Deleteing file: " + sftpFile.getFilename() + " from: " + remoteServer());
+                    }
+                    deleteFile(sftpFile.getFilename());
+                } else if (isMoveFile()) {
+                    String fromName = sftpFile.getFilename();
+                    String toName = getMoveFileName(fromName, exchange);
+                    if (log.isDebugEnabled()) {
+                        log.debug("Moving file: " + fromName + " to: " + toName);
+                    }
 
-                // delete any existing file
-                boolean deleted = deleteFile(toName);
-                if (!deleted) {
-                    // if we could not delete any existing file then maybe the folder is missing
-                    // build folder if needed
-                    int lastPathIndex = toName.lastIndexOf('/');
-                    if (lastPathIndex != -1) {
-                        String directory = toName.substring(0, lastPathIndex);
-                        if (!SftpUtils.buildDirectory(channel, directory)) {
-                            log.warn("Can not build directory: " + directory + " (maybe because of denied permissions)");
+                    // delete any existing file
+                    boolean deleted = deleteFile(toName);
+                    if (!deleted) {
+                        // if we could not delete any existing file then maybe the folder is missing
+                        // build folder if needed
+                        int lastPathIndex = toName.lastIndexOf('/');
+                        if (lastPathIndex != -1) {
+                            String directory = toName.substring(0, lastPathIndex);
+                            if (!SftpUtils.buildDirectory(channel, directory)) {
+                                log.warn("Can not build directory: " + directory + " (maybe because of denied permissions)");
+                            }
                         }
                     }
-                }
 
-                // try to rename
-                try {
-                    channel.rename(fromName, toName);
-                } catch (SftpException e) {
-                    // ignore just log a warning
-                    log.warn("Can not move file: " + fromName + " to: " + toName);
+                    // try to rename
+                    try {
+                        channel.rename(fromName, toName);
+                    } catch (SftpException e) {
+                        // ignore just log a warning
+                        log.warn("Can not move file: " + fromName + " to: " + toName);
+                    }
                 }
             }
-
-            getProcessor().process(exchange);
         }
     }
 

Modified: camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java?rev=752410&r1=752409&r2=752410&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java (original)
+++ camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java Wed Mar 11 08:53:56 2009
@@ -68,6 +68,9 @@
 
         mock.assertIsSatisfied();
 
+        // give time to delete file
+        Thread.sleep(200);
+
         // assert the file is deleted
         File file = new File("./res/home/deletefile/hello.txt");
         file = file.getAbsoluteFile();

Copied: camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDoNotDeleteFileIfProcessFailTest.java (from r752405, camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java)
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDoNotDeleteFileIfProcessFailTest.java?p2=camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDoNotDeleteFileIfProcessFailTest.java&p1=camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java&r1=752405&r2=752410&rev=752410&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDeleteFileTest.java (original)
+++ camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpDoNotDeleteFileIfProcessFailTest.java Wed Mar 11 08:53:56 2009
@@ -20,6 +20,7 @@
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.file.FileComponent;
@@ -28,9 +29,9 @@
 /**
  * Unit test to test consumer.deleteFile option.
  */
-public class FromFtpDeleteFileTest extends FtpServerTestSupport {
+public class FromFtpDoNotDeleteFileIfProcessFailTest extends FtpServerTestSupport {
 
-    private int port = 20022;
+    private int port = 20055;
     private String ftpUrl = "ftp://admin@localhost:" + port + "/deletefile?password=admin&binary=false&consumer.deleteFile=true";
 
     public int getPort() {
@@ -48,7 +49,7 @@
         // test that we can pool and store as a local file
         Endpoint endpoint = context.getEndpoint(ftpUrl);
         Exchange exchange = endpoint.createExchange();
-        exchange.getIn().setBody("Hello World this file will be deleted");
+        exchange.getIn().setBody("Hello World this file will NOT be deleted");
         exchange.getIn().setHeader(FileComponent.HEADER_FILE_NAME, "hello.txt");
         Producer producer = endpoint.createProducer();
         producer.start();
@@ -62,24 +63,33 @@
     }
 
     public void testPollFileAndShouldBeDeleted() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
+        MockEndpoint mock = getMockEndpoint("mock:error");
         mock.expectedMessageCount(1);
-        mock.expectedBodiesReceived("Hello World this file will be deleted");
+        mock.expectedBodiesReceived("Hello World this file will NOT be deleted");
 
         mock.assertIsSatisfied();
 
+        // give time to NOT delete file
+        Thread.sleep(200);
+
         // assert the file is deleted
         File file = new File("./res/home/deletefile/hello.txt");
         file = file.getAbsoluteFile();
-        assertFalse("The file should have been deleted", file.exists());
+        assertTrue("The file should NOT have been deleted", file.exists());
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from(ftpUrl).to("mock:result");
+                errorHandler(deadLetterChannel("mock:error").maximumRedeliveries(2).initialRedeliveryDelay(100));
+
+                from(ftpUrl).process(new Processor() {
+                    public void process(Exchange exchange) throws Exception {
+                        throw new IllegalArgumentException("Forced by unittest");
+                    }
+                });
             }
         };
     }
 
-}
+}
\ No newline at end of file

Modified: camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePostfixTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePostfixTest.java?rev=752410&r1=752409&r2=752410&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePostfixTest.java (original)
+++ camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePostfixTest.java Wed Mar 11 08:53:56 2009
@@ -70,6 +70,9 @@
 
         mock.assertIsSatisfied();
 
+        // give time to delete file
+        Thread.sleep(200);
+
         // assert the file is deleted
         File file = new File("./res/home/movefile/hello.txt.old");
         file = file.getAbsoluteFile();

Modified: camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePrefixTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePrefixTest.java?rev=752410&r1=752409&r2=752410&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePrefixTest.java (original)
+++ camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFilePrefixTest.java Wed Mar 11 08:53:56 2009
@@ -70,6 +70,9 @@
 
         mock.assertIsSatisfied();
 
+        // give time to delete file
+        Thread.sleep(200);
+
         // assert the file is deleted
         File file = new File("./res/home/movefile/done/hello.txt");
         file = file.getAbsoluteFile();

Modified: camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFileTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFileTest.java?rev=752410&r1=752409&r2=752410&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFileTest.java (original)
+++ camel/branches/camel-1.x/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpMoveFileTest.java Wed Mar 11 08:53:56 2009
@@ -70,6 +70,9 @@
 
         mock.assertIsSatisfied();
 
+        // give time to move file
+        Thread.sleep(200);
+
         // assert the file is deleted
         File file = new File("./res/home/movefile/done/sub2/hello.txt.old");
         file = file.getAbsoluteFile();

Modified: camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java?rev=752410&r1=752409&r2=752410&view=diff
==============================================================================
--- camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java (original)
+++ camel/branches/camel-1.x/components/camel-osgi/src/main/java/org/apache/camel/osgi/OsgiLanguageResolver.java Wed Mar 11 08:53:56 2009
@@ -17,11 +17,10 @@
 package org.apache.camel.osgi;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.Component;
-import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.NoSuchLanguageException;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.LanguageResolver;
+import org.apache.camel.util.NoFactoryAvailableException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -83,8 +82,6 @@
         throw new NoSuchLanguageException(name);
     }
 
-    
-
     protected Class getLanaguage(String name) throws Exception {
         return Activator.getLanguage(name);
     }