作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Camel 中使用 ZipAggregationStrategy
创建 zip 文件并且需要根据调用交换中设置的自定义属性来设置输出文件名。但是,我在 zip 聚合后收到的交换不包含我的任何属性。
我的一般流程是:
List
的Bean zip 文件内容aggregator
使用ZipAggregationStrategy
,基于example在 Camel 文档中。在步骤 3. 之后,我希望根据我在步骤 1. 中在交换上设置的属性来动态命名 zip,但交换仅包含 Camel 属性( CamelFileExchangeFile
以及 zip 文件的路径等)因为 aggregate()
正在创建一个新的交易所:
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
File zipFile;
Exchange answer = oldExchange;
// ...
DefaultEndpoint endpoint = (DefaultEndpoint) newExchange.getFromEndpoint();
answer = endpoint.createExchange();
answer.addOnCompletion(new DeleteZipFileOnCompletion(zipFile));
// ...
genericFile.bindToExchange(answer);
// ...
return answer;
}
最佳答案
我猜这是一个错误。聚合策略应保留这些属性,而不是删除这些属性。我打开了一个 Jira 问题,希望能解决这个问题:CAMEL-7555 .
作为解决方法,扩展 ZipAggregationStrategy
并覆盖 aggregate
:
public class MyZipAggregationStrategy extends ZipAggregationStrategy {
@Override
public Exchange aggregate(final Exchange oldExchange, final Exchange newExchange) {
final Exchange answer = super.aggregate(oldExchange, newExchange);
answer.setProperty("myZipName", newExchange.getProperty("myZipName")); // Hack!!
return answer;
}
}
使用MyZipAggregationStrategy
,如下所示:
public class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() {
from("file:zipper/in?include=.*.xml&noop=true")
.process(new Processor() {
@Override
public void process(final Exchange exchange) throws Exception {
exchange.setProperty("myZipName", "messages.zip");
}
})
.aggregate(new MyZipAggregationStrategy())
.constant(true)
.completionFromBatchConsumer()
.eagerCheckCompletion()
.setHeader(Exchange.FILE_NAME, simple("${property.myZipName}")) // setting ZIP file name
.to("file:zipper/out");
}
}
关于java - 如何使用 Camel 的 ZipAggregationStrategy 访问调用交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24473035/
我正在 Camel 中使用 ZipAggregationStrategy 创建 zip 文件并且需要根据调用交换中设置的自定义属性来设置输出文件名。但是,我在 zip 聚合后收到的交换不包含我的任何属
我是一名优秀的程序员,十分优秀!