Как переместить файл в каталог ошибок, если имя файла не совпадает с верблюдом - PullRequest
1 голос
/ 30 сентября 2019

Я хочу переместить файлы в каталог ошибок, если имя файла не соответствует указанному регулярному выражению. У меня есть 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 или, по крайней мере, не работает, как я намереваюсь, чтобы она работала.

1 Ответ

1 голос
/ 01 октября 2019

Вы не можете сделать это, так как файл не принят, и, следовательно, на самом деле не обрабатывается Camel, если вы не включите обработчик ошибок моста на получателе.

Так что вместо этого вы можете использовать фильтр EIPшаблон, после которого вы проверяете имя файла, а затем генерируете исключение в случае сбоя и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...