Компонент 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.