Hi, 
I was working with something similar to this problem. But I am not able to
capture the exceptions properly. 

Setps:
1. Download the existing file from the FTP
2. Push the file to backup folder and append the file name with current date
3. Push a new file to the FTP which has a complete new file

Here is gist of what I am trying to achieve

in RouteBuilder:
 public void configure() throws Exception {

        onException(Exception.class)
                .log("Exception returned due: ${exception.message}")
                .to(INTERNAL_ERROR_HANDLER_ENDPOINT_URI)
                .to(logError(PACKAGE_NAME))
                .handled(true);

       from(INTERNAL_ERROR_HANDLER_ENDPOINT_URI)
                .log("File error route triggered due to :
${exception?.class}")
                .transform().simple("Error ${exception.message}")
                .bean(responseTranslator, "translateError")
                .end();

       from(ENDPOINT_URI)
                .to(log(PACKAGE_NAME))
                .process(contentBackupProcessor)
                .to(INTERNAL_ENDPOINT_URI)
                .end();

       from(INTERNAL_ENDPOINT_URI)
                .process(requestProcessor)
                .to(ftpHostConfiguration.ftpEndpointForPublishing())
                .bean(responseTranslator, "translate")
                .to(log(PACKAGE_NAME));
    }

ContentBackupProcessor:

       logger.debug("File backup processor called.");
        CamelContext context = exchange.getContext();
        Endpoint ftp =
context.getEndpoint(ftpHostConfiguration.ftpConsumerEndpointForBackupProcessor());
        PollingConsumer consumer = ftp.createPollingConsumer();
        logger.debug("FTP Consumer created for backup");
        Endpoint producerFtp =
context.getEndpoint(ftpHostConfiguration.ftpProducerEndpointForBackupProcessor());
        ProducerTemplate template =
exchange.getContext().createProducerTemplate();
        logger.debug("FTP Producer created for backup");
        consumer.start();
        while(true){
            Exchange result = consumer.receive(5000);
            if(result == null){
                break;
            }
            template.send(producerFtp, result);
        }
        consumer.stop();
    }

And this is how my FTP URL Looks like
URL 1: Consumer URL for downloading the file
ftp://XXXXC@localhost:8899/?password=XXXXC&consumer.bridgeErrorHandler=true&throwExceptionOnConnectFailed=true&maximumReconnectAttempts=0&useList=true&delete=true

URL 2: Producer URL for moving to backup folder and adding current date to
the fileName
ftp://XXXXC@localhost:8899/backup?password=XXXXC&consumer.bridgeErrorHandler=true&throwExceptionOnConnectFailed=true&maximumReconnectAttempts=0&useList=true&fileName=${file:name.noext}_${date:now:yyyyMMdd.hhmmss}.js


ftp://XXXX@localhost:8899/?password=XXXX&consumer.bridgeErrorHandler=true&throwExceptionOnConnectFailed=true&maximumReconnectAttempts=0

Since URL 1 and URL 2 is written inside the processor when exception happens
like unable to connect to FTP, onException is not able to handle that
properly. And the route ends with a lot of stack trace.

Kindly help. This is a bit urgent since we have a service that needs to be
delivered urgently. 

Thanks & Regards
Dilip H Pashupathi



--
View this message in context: 
http://camel.465427.n5.nabble.com/Using-ConsumerTemplate-to-fetch-files-tp3304671p5796783.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to