我正在开发一个Apache Camel项目来加载数据和Webservice,并从中构建一个文件。从服务获取数据并加载到CSV文件的基本工作正常。但是由于服务的限制,我必须从服务响应中过滤我的数据。
由于我对Apache骆驼的了解有限,我试过这个。
from("direct:start")
.setHeader(Exchange.HTTP_METHOD, constant("GET"))
.setHeader(Exchange.HTTP_URI, simple(URL))
.setHeader("Authorization", simple(KEY))
.to(URL)
.unmarshal(listJacksonDataFormat)
//START - FILTER
.split(body())
.filter().method(DiagnosticDateFilter.class, "diagnosedAfterLastRun")
.aggregate(constant(true), new GroupedBodyAggregationStrategy())
.completionTimeout(1000)
//END - FILTER
.marshal(bindyCsvDataFormat)
.to("file:" + FILELOC);
//此过滤器检查Webservice JSON Array响应中的一个值,并确定在聚合期间是否需要将模型对象添加到输出列表。
public static class DiagnosticDateFilter {
public boolean diagnosedAfterLastRun(@Body Feed feed) {
return true;
}
}
公共类GroupedBodyAggregationStrategy实现了AggregationStrategy {
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
Object newBody = newExchange.getIn().getBody();
ArrayList<Object> list = null;
if (oldExchange == null) {
list = new ArrayList<Object>();
list.add(newBody);
newExchange.getIn().setBody(list);
return newExchange;
} else {
list = oldExchange.getIn().getBody(ArrayList.class);
list.add(newBody);
return oldExchange;
}
}
“过滤”和“聚合”之后的某些原因,我在交换中丢失数据并且路由完成而不创建文件。
还有更好的方法吗?也可以在".unmarshal(listJacksonDataFormat)"
之前应用过滤器,这样我就不必包含在列表中然后过滤掉了吗?感谢您的回复!!