Почему fileNameSet имеет значение null? - PullRequest
0 голосов
/ 28 мая 2018

Я новичок в Talend и создаю компонент, чтобы объединить четыре сообщения в одно.Я использую компонент cFile, который потребляет 4 файла из каталога, затем aggregrator и затем процессор.Код для агрегированного Бина выглядит следующим образом:

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

}

Так что я не получаю причину, почему sysout для fileName равен [null].

1 Ответ

0 голосов
/ 30 мая 2018

Причина получения пустого имени файла в том, что не обновлялся.Код должен быть таким:

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

}

...