Hi Claus, No it was an error, we store the ftp server address and the remote file name on separate parameters in our front end. At runtime the full camel file:/ and ftp:// are constructed with a set of options we have determined work for our specific atomic ftp uploads and downloads. The client was adding their own '/' as a trailing character on the ftp url and we were not checking for it, we do now.
Thx for that spot, I had not seen it. David ________________________________ From: Claus Ibsen <claus.ib...@gmail.com> To: users@camel.apache.org; David Wynter <david_wyn...@yahoo.com> Sent: Monday, 2 January 2012, 9:39 Subject: Re: Continuation of NPE for FTP endpoint Hi You have 2 slashes on the FTP starting path, eg you have // ftp://u...@service.example.com//? Is that on purpose? On Thu, Dec 29, 2011 at 5:14 PM, David Wynter <david_wyn...@yahoo.com> wrote: > Sorry about that, web browser based email client, sometime I send it > prematurely. > > Here is the trace from my ftp get endpoint NPE > > pool-1-thread-1 DEBUG impl.DefaultComponent - Creating endpoint > uri=[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=somepassword], > path=[u...@service.example.com//], parameters=[{binary=true, > fileName=equity_desc.enc.out, noop=true, passiveMode=true, > password=somepassword}] > pool-1-thread-1 DEBUG impl.DefaultCamelContext - > ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=somepassword > converted to endpoint: > Endpoint[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > by component: org.apache.camel.component.file.remote.FtpComponent@3c214a7a > pool-1-thread-1 DEBUG impl.DefaultComponent - Creating endpoint > uri=[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override], > path=[/C:/SecMaster/vendor_files/bbg_ps_enc/], > parameters=[{fileExist=Override}] > pool-1-thread-1 DEBUG converter.DefaultTypeConverter - Promoting fallback > type converter as a known type converter to convert from: > org.apache.camel.component.file.GenericFileExist to: java.lang.String for the > fallback converter: org.apache.camel.impl.converter.EnumTypeConverter@5705013c > pool-1-thread-1 DEBUG impl.DefaultCamelContext - > file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override converted to > endpoint: > Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override] by > component: org.apache.camel.component.file.FileComponent@2b619bca > pool-1-thread-1 DEBUG processor.DefaultChannel - Initialize channel for > target: 'To[file:/C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override]' > pool-1-thread-1 DEBUG impl.DefaultCamelContext - Warming up route id: route2 > having autoStartup=true > pool-1-thread-1 DEBUG impl.RouteService - Starting services on route: route2 > pool-1-thread-1 DEBUG remote.FtpEndpoint - Created FTPClient [connectTimeout: > 10000, soTimeout: 0, dataTimeout: 30000]: > org.apache.commons.net.ftp.FTPClient@1c1681c > pool-1-thread-1 DEBUG impl.DefaultExecutorServiceStrategy - Created new > scheduled thread pool for source: > FtpConsumer[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > with name: > ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=somepassword. > [poolSize=1]. -> java.util.concurrent.ScheduledThreadPoolExecutor@4f36836c > pool-1-thread-1 INFO remote.FtpEndpoint - Endpoint is configured with > noop=true so forcing endpoint to be idempotent as well > pool-1-thread-1 INFO remote.FtpEndpoint - Using default memory based > idempotent repository with cache max size: 1000 > pool-1-thread-1 DEBUG impl.RouteService - Starting child service on route: > route2 -> > Instrumentation:route[UnitOfWork(Channel[sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override])])] > pool-1-thread-1 DEBUG file.GenericFileProducer - Starting producer: > Producer[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override] > pool-1-thread-1 DEBUG impl.ProducerCache - Adding to producer cache with key: > Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override] > for producer: > Producer[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override] > pool-1-thread-1 DEBUG processor.DefaultErrorHandler - Redelivery enabled: > false on error handler: > DefaultErrorHandler[TraceInterceptor[To[file:/C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override]]] > pool-1-thread-1 DEBUG impl.RouteService - Starting child service on route: > route2 -> > UnitOfWork(Channel[sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override])]) > pool-1-thread-1 DEBUG impl.RouteService - Starting child service on route: > route2 -> > Channel[sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override])] > pool-1-thread-1 DEBUG impl.RouteService - Starting child service on route: > route2 -> > sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override]) > pool-1-thread-1 DEBUG impl.DefaultCamelContext - Route: route2 >>> > EventDrivenConsumerRoute[Endpoint[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > -> > Instrumentation:route[UnitOfWork(Channel[sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override])])]] > pool-1-thread-1 DEBUG impl.DefaultCamelContext - Starting consumer (order: > 1002) on route: route2 > pool-1-thread-1 DEBUG remote.FtpConsumer - Starting consumer: > FtpConsumer[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > pool-1-thread-1 DEBUG impl.ScheduledPollConsumer - Scheduling poll (fixed > delay) with initialDelay: 1000, delay: 500 (milliseconds) for: > Endpoint[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > pool-1-thread-1 DEBUG remote.FtpEndpoint - Parameters for Generic file > process strategy {readLock=none, noop=true, readLockTimeout=20000, > readLockCheckInterval=5000} > pool-1-thread-1 DEBUG remote.FtpEndpoint - Using Generic file process > strategy: > org.apache.camel.component.file.strategy.GenericFileRenameProcessStrategy@73e373de > pool-1-thread-1 INFO impl.DefaultCamelContext - Route: route2 started and > consuming from: > Endpoint[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > pool-1-thread-1 DEBUG processor.DefaultChannel - Initialize channel for > target: 'To[file:/C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override]' > pool-1-thread-1 DEBUG impl.DefaultCamelContext - Warming up route id: route2 > having autoStartup=true > pool-1-thread-1 DEBUG impl.RouteService - Starting services on route: route2 > pool-1-thread-1 DEBUG remote.FtpEndpoint - Created FTPClient [connectTimeout: > 10000, soTimeout: 0, dataTimeout: 30000]: > org.apache.commons.net.ftp.FTPClient@59cc2f42 > pool-1-thread-1 DEBUG impl.DefaultExecutorServiceStrategy - Created new > scheduled thread pool for source: > FtpConsumer[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > with name: > ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=somepassword. > [poolSize=1]. -> java.util.concurrent.ScheduledThreadPoolExecutor@78e941c2 > pool-1-thread-1 DEBUG impl.RouteService - Starting child service on route: > route2 -> > Instrumentation:route[UnitOfWork(Channel[sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override])])] > pool-1-thread-1 DEBUG file.GenericFileProducer - Starting producer: > Producer[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override] > pool-1-thread-1 DEBUG impl.ProducerCache - Adding to producer cache with key: > Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override] > for producer: > Producer[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override] > pool-1-thread-1 DEBUG processor.DefaultErrorHandler - Redelivery enabled: > false on error handler: > DefaultErrorHandler[TraceInterceptor[To[file:/C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override]]] > pool-1-thread-1 DEBUG impl.RouteService - Starting child service on route: > route2 -> > UnitOfWork(Channel[sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override])]) > pool-1-thread-1 DEBUG impl.RouteService - Starting child service on route: > route2 -> > Channel[sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override])] > pool-1-thread-1 DEBUG impl.RouteService - Starting child service on route: > route2 -> > sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override]) > pool-1-thread-1 DEBUG impl.DefaultCamelContext - Route: route2 >>> > EventDrivenConsumerRoute[Endpoint[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > -> > Instrumentation:route[UnitOfWork(Channel[sendTo(Endpoint[file:///C:/SecMaster/vendor_files/bbg_ps_enc/?fileExist=Override])])]] > pool-1-thread-1 DEBUG impl.DefaultCamelContext - Starting consumer (order: > 1003) on route: route2 > pool-1-thread-1 DEBUG remote.FtpConsumer - Starting consumer: > FtpConsumer[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > pool-1-thread-1 DEBUG impl.ScheduledPollConsumer - Scheduling poll (fixed > delay) with initialDelay: 1000, delay: 500 (milliseconds) for: > Endpoint[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > pool-1-thread-1 INFO impl.DefaultCamelContext - Route: route2 started and > consuming from: > Endpoint[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > > ... > > Camel (camel-1) thread #2 - ftp://u...@service.example.com// WARN > remote.RemoteFilePollingConsumerPollStrategy - Consumer > FtpConsumer[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > could not poll endpoint: > Endpoint[ftp://u...@service.example.com//?binary=true&fileName=equity_desc.enc.out&noop=true&passiveMode=true&password=******] > caused by: null > java.lang.NullPointerException > at java.io.File.<init>(Unknown Source) > at org.apache.camel.component.file.GenericFile.getParent(GenericFile.java:277) > at > org.apache.camel.component.file.GenericFile.populateHeaders(GenericFile.java:139) > at > org.apache.camel.component.file.remote.RemoteFile.populateHeaders(RemoteFile.java:38) > at > org.apache.camel.component.file.GenericFile.bindToExchange(GenericFile.java:115) > at > org.apache.camel.component.file.remote.RemoteFileEndpoint.createExchange(RemoteFileEndpoint.java:62) > at > org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:120) > at > org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:138) > at > org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:90) > at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) > at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source) > at java.util.concurrent.FutureTask.runAndReset(Unknown Source) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Unknown > Source) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Unknown > Source) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown > Source) > at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) > at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) > at java.lang.Thread.run(Unknown Source) > Camel (camel-1) thread #3 - ftp://u...@service.example.com// DEBUG > remote.FtpConsumer - Took 1.606 seconds to poll: / -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/