La ruta de Apache Camel se bloquea cuando el archivo se elimina durante el procesamiento

El programa que estoy intentando construir, consume archivos en un recurso compartido de archivos de Windows usando Camel 2.18.5 y otros programas ocasionalmente agregan / modifican / eliminan archivos en la carpeta compartida.

Construyendo una ruta de prueba simple

        from("file:///C:/Temp/from?readLock=changed&readLockCheckInterval=10000&readLockTimeout=0")
            .routeId("SimpleFileRoute")
            .to("file:/C:/Temp/to");

luego, colocando un archivo, test.txt, en la carpeta from, esperando que la ruta haga un archivo test.txt.camelLock y luego eliminando manualmente test.txt antes de que el readLockCheckInterval haya pasado, hará que la ruta se cuelgue indefinidamente sin lanzar un excepción o procesamiento de otros archivos.

"cambiado" parece ser el único readLock apropiado para la situación.

¿Hay alguna manera de hacer que la ruta arroje una excepción, limpie el archivo de bloqueo y continúe consumiendo archivos?

Editar: el seguimiento de la pila del hilo que parece ser la ruta es la siguiente:

Daemon Thread [Camel (camel-1) thread #2 - file:///C:/Temp/from] (Suspended)    
Thread.sleep(long) line: not available [native method]  
FileChangedExclusiveReadLockStrategy.sleep() line: 104  
FileChangedExclusiveReadLockStrategy.acquireExclusiveReadLock(GenericFileOperations<File>, GenericFile<File>, Exchange) line: 90    
GenericFileRenameProcessStrategy<T>(GenericFileProcessStrategySupport<T>).begin(GenericFileOperations<T>, GenericFileEndpoint<T>, Exchange, GenericFile<T>) line: 64    
GenericFileRenameProcessStrategy<T>.begin(GenericFileOperations<T>, GenericFileEndpoint<T>, Exchange, GenericFile<T>) line: 37  
FileConsumer(GenericFileConsumer<T>).processExchange(Exchange) line: 362    
FileConsumer(GenericFileConsumer<T>).processBatch(Queue<Object>) line: 223  
FileConsumer(GenericFileConsumer<T>).poll() line: 187   
FileConsumer(ScheduledPollConsumer).doRun() line: 174   
FileConsumer(ScheduledPollConsumer).run() line: 101 
Executors$RunnableAdapter<T>.call() line: 511   
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>(FutureTask<V>).runAndReset() line: 308   
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.access$301(ScheduledThreadPoolExecutor$ScheduledFutureTask) line: 180    
ScheduledThreadPoolExecutor$ScheduledFutureTask<V>.run() line: 294  
RejectableScheduledThreadPoolExecutor(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker) line: 1142   
ThreadPoolExecutor$Worker.run() line: 617   
Thread.run() line: 745  
Respuesta 1

Tengo que descargar muchas páginas web y voy a usar HttpURLConnection para hacerlo porque es muy conveniente. Sin embargo, no quiero usar descargas basadas en hilos. Deseo usar async ...

Tengo dos listas y tengo que crear un mapa a partir de ellas. Uno, estoy iterando en bucle y segundo, quería ser arrojado por una secuencia y luego recolectar en el mapa, pero no tengo idea de cómo usar los recopiladores ...

Estoy preparando una prueba de carga para un servicio web y casi he terminado, pero tengo un problema. En este momento tengo algunos oyentes, por ejemplo, gráficos, uno para muestras exitosas y otro solo para fallas. ...

Estoy tratando de tomar el texto masculino femenino de este botón de opción, pero me da una excepción de puntero nulo, y estoy atascado en cada punto de tratar de arreglar eso, ya sea almacenando el texto como otro ...