Apache Camel - 带有过滤器的List Aggregator

时间:2016-08-25 01:17:03

标签: json apache-camel

我正在开发一个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)"之前应用过滤器,这样我就不必包含在列表中然后过滤掉了吗?感谢您的回复!!

0 个答案:

没有答案