Apache camel 如何在bindy组件中停止在单个文件中生成多个时间头列?

Apache camel 如何在bindy组件中停止在单个文件中生成多个时间头列?,apache-camel,bindy,Apache Camel,Bindy,您好,我正在使用camel bindy组件处理一个CSV文件,其中我将数据分割为1000行块,并使用每个块生成其标题列,我需要它只使用单个文件生成一次。 我的路线: 还有我的OutputCSV.java pojo @CsvRecord(separator = ",",generateHeaderColumns=true) public class OutputCSV implements Serializable { private static final long serialVersio

您好,我正在使用camel bindy组件处理一个CSV文件,其中我将数据分割为1000行块,并使用每个块生成其标题列,我需要它只使用单个文件生成一次。 我的路线:

还有我的OutputCSV.java pojo

@CsvRecord(separator = ",",generateHeaderColumns=true)
public class OutputCSV implements Serializable {

private static final long serialVersionUID = 1L;

@DataField(pos = 1, required = true)
private String product_id;

@DataField(pos = 2, required = true)
private String product_name;

//Getter and setter
}

我的问题是,我如何使这段代码为单个文件生成一次头文件

每行都有一个标题,因为您处理每一行并附加到文件中。在这种情况下,必须在第一行之后将
generateHeaderColumns
设置为
false
,因为只有文件知道当前行是否为第一行

或者

  • 在封送文件之前,您可以收集文件的全部数据(聚合)(见下文)
  • 或者在文件开头“手动”添加标题,并将
    generateHeaderColumns
    设置为
    false
  • 或者,根本不拆分文件,从
    解组
    获取对象列表(见下文)
  • 对于#1,您必须实现一个收集列表中所有对象的
    聚合策略。有关示例,请参阅并查找
    ArrayListAggregationStrategy.java


    对于#3,
    unmarshal
    的结果是一个地图列表,其中每个地图包含来自1个CSV行的模型对象(在您的情况下,每个地图应该只有1个对象)。然后您的bean可以迭代列表(而不是只处理一行),提取模型对象并将它们收集到一个列表中以再次封送它们。有关更多详细信息,请参阅
    解组
    一节下的

    我做了聚合,但我做错了。你能告诉我如何在DSL中使用聚合来收集所有数据块并一起封送吗?我已经用第三种变体和更多细节扩展了我的答案
    @CsvRecord(separator = ",",generateHeaderColumns=true)
    public class OutputCSV implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @DataField(pos = 1, required = true)
    private String product_id;
    
    @DataField(pos = 2, required = true)
    private String product_name;
    
    //Getter and setter
    }