Camel s3组件未使用处理器

时间:2018-01-31 06:36:40

标签: amazon-s3 apache-camel apache-camel-aws

尝试一种非常简单的骆驼路线:

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);

我还尝试过(“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 个答案:

答案 0 :(得分:1)

正如Claus指出的那样,使用exchange.getOut()在交换机上创建传出(空)消息体。没有标题被复制到交易所,因此它们都丢失了。当涉及到processCommit时,桶名和密钥的标题已丢失。

因此要么不访问getOut(),要么将所有标题从In复制到Out。