Я хочу переместить файлы в каталог ошибок, если имя файла не соответствует указанному регулярному выражению. У меня есть RegexFileFilter<T>
класс, который реализует GenericFileFilter<T>
. Это метод accept.
public boolean accept(GenericFile<T> file) {
Matcher matcher = getFileNameRegexp().matcher(file.getFileName());
boolean matches = matcher.matches();
if (!matches) {
log.error("File named [{}] is not imported because it doesn't matches the expected pattern: [{}].", file.getFileName(), getFileNameRegexp().pattern());
}
return matches;
}
Проблема состоит в том, что если совпадения = false
, файл будет взят еще раз, когда планировщик перезапустит его. Я попытался вызвать исключение после ошибки журнала
throw new PatternSyntaxException("File name doesn't match expected pattern ", getFileNameRegexp().toString(), -1);
И создал конфигурацию, которая должна переместить файл в errorLocation, если выбрасывается исключение PatternSyntaxException
onException(PatternSyntaxException.class)
.useOriginalMessage()
.handled(true)
.to(getFTPErrorLocation());
Проблема заключается в том, что когда ябросить исключение Camel lib будет использовать это исключение и исключить файл, выдавший это исключение. Есть ли способ обойти это или, возможно, другой способ использовать исключение для перемещения файла?
Я также попытался добавить его в формате URI &scheduler=spring&scheduler.cron=0+0/1+*+*+*+?&readLock=rename&move=processed&disconnect=true&filter=#fileFilter&exclude=.*(\.GL1025\.).*&move=error
Но это не помогло. Любые предложения?
Редактировать
Вот моя часть маршрута.
public void configure() {
addFileAlreadyProcessedExceptionHandler();
addEmptyFileExceptionHandler();
addFailedFileTransformationExceptionHandler();
addFailedFileNamePatternExceptionHandler();
addTransactionProcessExceptionHandler();
addFileDownloadRoute();
from(getLocalFileSystemDownloadLocation())
.onCompletion()
.bean(CreditCardImportLogServiceBean.class)
.process(fileImportStatisticProcessor)
.end()
.transacted()
.routeId(getRouteId())
.bean(CreditCardStatusServiceBean.class)
.to(xsltProcess)
.process(transactionCounterProcessor)
.split(xPathBuilder)
.convertBodyTo(String.class, "ISO-8859-1")
.unmarshal(jaxb)
.bean(ImportLogProcessor.class)
.bean(CurrencyCodeServiceBean.class)
.bean(CCTransactionConverterProcessor.class)
.bean(CreditCardTypeMapperServiceBean.class)
.bean(CreditCardImporterServiceBean.class);
}
protected void addFileDownloadRoute() {
from(getFtpConfiguration())
.routeId(getDownloadRouteId())
.transacted()
.to(getLocalFileSystemDownloadLocation());
}
protected void addFailedFileNamePatternExceptionHandler() {
onException(PatternSyntaxException.class)
.useOriginalMessage()
.handled(true)
.to(getFTPErrorLocation());
}
Все остальные исключения работают правильно,только часть, которая не работает, является addFailedFileNamePatternExceptionHandler
или, по крайней мере, не работает, как я намереваюсь, чтобы она работала.