переименуйте файл в исходном каталоге после успешной отправки в очередь jms, в Spring интеграции. используя ExpressionEvaluatingRequestHandlerAdvice - PullRequest
1 голос
/ 23 декабря 2019

получение следующего исключения.

см. Исходный код ..

@Bean
@InboundChannelAdapter(value = "fileInputChannel", poller = @Poller(fixedDelay = "1000"))
public MessageSource<File> fileReadingMessageSource(@Value("${file.poller.path}") final String path,
        @Value("${file.poller.fileName-pattern}") final String fileExt) {
    CompositeFileListFilter<File> filters = new CompositeFileListFilter<>();
    filters.addFilter(new SimplePatternFileListFilter(fileExt));
    // filters.addFilter(new AcceptOnceFileListFilter<File>());

    FileReadingMessageSource source = new FileReadingMessageSource();
    source.setAutoCreateDirectory(false);
    source.setDirectory(new File(path));
    source.setFilter(filters);
    source.setUseWatchService(true);
    source.setWatchEvents(WatchEventType.CREATE);
    System.out.println(path);
    return source;
}


@Bean
public IntegrationFlow processFile() {
    return IntegrationFlows
                .from("fileInputChannel")           
                .transform(fileToStringTransformer())
                .handle("fileProcessor", "process")//added some data manupilation code and returns Message<String>//
                .log(LoggingHandler.Level.INFO, "process file", m -> m.getHeaders().get("Message_Type"))
                .channel(this.jmsOutboundChannel())

                .get();

}

@Bean
    public IntegrationFlow sendToJmsQueue(JmsTemplate wlsJmsTemplate) {
        return IntegrationFlows.from(this.jmsOutboundChannel())

                .log(LoggingHandler.Level.INFO, "sending to queue", m -> 
                                     m.getHeaders().get("Message_Type"))

                .handle(Jms.outboundAdapter(wlsJmsTemplate).destination(inboundDataQueue), 
                                                                      e -> e.advice(expressionAdvice()))

    }

@Bean
    public Advice expressionAdvice() {
        ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
        advice.setSuccessChannelName("success.input");
        advice.setOnSuccessExpressionString("payload.delete()");
        //advice.setOnSuccessExpressionString("payload.renameTo(new java.io.File(payload.absolutePath + '.Done'))");
        advice.setFailureChannelName("failure.input");
        advice.setOnFailureExpressionString("payload.renameTo(new java.io.File(payload.absolutePath + '.FailedToSend'))");
        advice.setTrapException(true);
        return advice;
    }

1 Ответ

0 голосов
/ 23 декабря 2019

При использовании FileReadingMessageSource, а также при добавлении File в полезную нагрузку файл также добавляется в качестве заголовка FileHeaders.ORIGINAL_FILE, чтобы он был доступен позже в случае преобразования.

Таким образом, вы должны использовать выражения

headers['file_originalFile'].renameTo(new java.io.File(headers['file_originalFile']).absolutePath + '.failed')

и

headers['file_originalFile'].delete()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...