Apache camel 为什么fileNameSet为空?

Apache camel 为什么fileNameSet为空?,apache-camel,jms,java-7,talend,filenameset,Apache Camel,Jms,Java 7,Talend,Filenameset,我是Talend的新手,我正在创建一个bean,将四条消息聚合为一条。我使用的是cfilecomponent,它使用目录中的4个文件,然后是aggregator和processor。聚合Bean的代码如下所示: package beans; import java.util.HashSet; import java.util.Set; import org.apache.camel.Exchange; import org.apache.camel.processor.aggregate.A

我是Talend的新手,我正在创建一个bean,将四条消息聚合为一条。我使用的是cfilecomponent,它使用目录中的4个文件,然后是aggregator和processor。聚合Bean的代码如下所示:

package beans;

import java.util.HashSet;
import java.util.Set;

import org.apache.camel.Exchange;
import org.apache.camel.processor.aggregate.AggregationStrategy;

public class AggregateBody implements AggregationStrategy{

public Exchange aggregate(Exchange oldEx, Exchange newEx) {
    Set<String> fileNameSet =  new HashSet<String>();
    Set<String> bodySet =  new HashSet<String>();
    if(oldEx==null){
        fileNameSet.add((String) newEx.getIn().getHeader("fileName"));
        bodySet.add(newEx.getIn().getBody(String.class));
        newEx.setProperty("fileName",fileNameSet);
        System.out.println(fileNameSet);

        newEx.setProperty("body",bodySet);
        System.out.println(bodySet);
        return newEx;
    }

    oldEx.getProperty("fileName",fileNameSet);
    fileNameSet.add((String) oldEx.getIn().getHeader("fileName"));
    oldEx.setProperty("fileName",fileNameSet);
    System.out.println(fileNameSet);

    oldEx.getProperty("body",bodySet);
    bodySet.add(oldEx.getIn().getBody(String.class));
    oldEx.setProperty("body",bodySet);
    return oldEx;
}
packagebean;
导入java.util.HashSet;
导入java.util.Set;
导入org.apache.camel.Exchange;
导入org.apache.camel.processor.aggregate.AggregationStrategy;
公共类AggregateBody实现了AggregationStrategy{
公共交易所合计(旧交易所、新交易所){
Set fileNameSet=newhashset();
Set bodySet=新的HashSet();
如果(oldEx==null){
添加((字符串)newEx.getIn().getHeader(“文件名”);
add(newEx.getIn().getBody(String.class));
setProperty(“文件名”,fileNameSet);
System.out.println(文件名集);
newEx.setProperty(“body”,bodySet);
系统输出打印LN(车身套件);
返回newEx;
}
getProperty(“文件名”,fileNameSet);
添加((字符串)oldEx.getIn().getHeader(“文件名”);
setProperty(“fileName”,fileNameSet);
System.out.println(文件名集);
oldEx.getProperty(“body”,bodySet);
add(oldEx.getIn().getBody(String.class));
oldEx.setProperty(“body”,bodySet);
返回oldEx;
}
}


因此,我没有得到sysout for fileName为[null]的原因。

得到null fileName的原因是,没有更新。代码应如下所示:

package beans;

import java.util.ArrayList;
import java.util.List;

import org.apache.camel.Exchange;
import org.apache.camel.processor.aggregate.AggregationStrategy;

public class AggregateBody implements AggregationStrategy {

@SuppressWarnings("unchecked")
public Exchange aggregate(Exchange oldEx, Exchange newEx) {
    List<String> fileNameSet = new ArrayList<String>();
    List<String> bodySet = new ArrayList<String>();
    if (oldEx == null) {
        fileNameSet.add((String) newEx.getIn().getHeader("CamelFileName"));
        newEx.setProperty("CamelFileName", fileNameSet);
        bodySet.add(newEx.getIn().getBody(String.class));
        newEx.setProperty("body", bodySet);
        return newEx;
    }

    fileNameSet = (List<String>) oldEx.getProperty("CamelFileName", fileNameSet);
    bodySet = (List<String>) oldEx.getProperty("body", bodySet);

    fileNameSet.add((String) newEx.getIn().getHeader("CamelFileName"));

    bodySet.add(newEx.getIn().getBody(String.class));
    oldEx.setProperty("CamelFileName", fileNameSet);
    oldEx.setProperty("body", bodySet);
    return oldEx;
}
packagebean;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.camel.Exchange;
导入org.apache.camel.processor.aggregate.AggregationStrategy;
公共类AggregateBody实现了AggregationStrategy{
@抑制警告(“未选中”)
公共交易所合计(旧交易所、新交易所){
List fileNameSet=new ArrayList();
List bodySet=new ArrayList();
如果(oldEx==null){
添加((字符串)newEx.getIn().getHeader(“CamelFileName”);
setProperty(“CamelFileName”,文件名集);
add(newEx.getIn().getBody(String.class));
newEx.setProperty(“body”,bodySet);
返回newEx;
}
fileNameSet=(List)oldEx.getProperty(“CamelFileName”,fileNameSet);
bodySet=(列表)oldEx.getProperty(“body”,bodySet);
添加((字符串)newEx.getIn().getHeader(“CamelFileName”);
add(newEx.getIn().getBody(String.class));
setProperty(“CamelFileName”,文件名集);
oldEx.setProperty(“body”,bodySet);
返回oldEx;
}

}

我从未使用过Talend,但在Apache Camel中,它是header
CamelFileName
,而不是
fileName
newEx.getIn().getHeader(“CamelFileName”)
@Bedla收到了,谢谢