Компонент Camel s3 не удаляет файлы из корзины с использованием процессора

Пробуем очень простой верблюжий маршрут:

from("aws-s3://javatutorial1232boomiau?amazonS3Client=#s3client&deleteAfterRead=true&fileName=My2.jsp").process(Empty2).log(LoggingLevel.INFO, "Replay Message Sent to file:s3out ${in.header.CamelAwsS3Key}")
            .to("stream:out");

Я использую verion 2.20.2 (последний на сегодня). Файл не удаляется из корзины. Я провел некоторое исследование, и, судя по всему, обмену, переданному методу processCommit, не хватает заголовков. Заголовки, которые он ищет, - это название и ключ

String bucketName = exchange.getIn().getHeader(S3Constants.BUCKET_NAME, String.class);
String key = exchange.getIn().getHeader(S3Constants.KEY, String.class);

Я также попытался файл to("file://Users/user/out.txt") также не удаляется, и заголовки, по-видимому, принадлежат компоненту файла.

РЕДАКТИРОВАТЬ:

Я заметил, что если я удаляю.processor(Empty2), файл удаляется из корзины. Процессор не выполняет никакой работы:

@Override
public void process(Exchange exchange) throws Exception {

    Object body = exchange.getIn().getBody();
    System.out.println("1: "+body);
    Object body2 = exchange.getOut().getBody();
    System.out.println("2: "+body2);     
}

Так почему бы это работать без него, а не с процессором? Как мне обработать сообщение, если процессор не может быть использован?

1 ответ

Как указал Клаус, использование exchange.getOut() создает тело исходящего (пустого) сообщения на бирже. Ни один из заголовков не копируется на биржу, и поэтому все они теряются. Когда дело доходит до processCommit, заголовок для имени корзины и ключ были потеряны.

Поэтому либо не обращайтесь к getOut (), либо скопируйте все заголовки из In в Out.

Другие вопросы по тегам