Camel Bindy CSV - 将多个排队的JSON有效负载解组到具有单个标题行的文件中

时间:2014-02-19 04:06:54

标签: json csv rabbitmq apache-camel bindy

我有一个用例,我通过Camel中的队列(RabbitMQ)接收随机消息(带有JSON有效负载),我需要将这些JSON有效负载转换为CSV格式以存储在文件中。我所拥有的主要是工作,但是当我尝试将“generateHeaderColumns = true”添加到我所拥有的POJO上的@CsvRecord注释中时,我得到了为每个“行”重复的列标题。例如,请考虑Camel中的以下路由:

from("rabbitmq://localhost:5672/testexchange?routingKey=create")
    .unmarshal().json(JsonLibrary.Jackson, MyModel.class)
    .marshal().bindy(BindyType.Csv, MyModel.class)
    .to("file://c:/ftproot?fileName=export.$simple{date:now:MM.dd.yyyy}.csv&fileExist=Append")

以下是MyModel.class POJO:

import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
import org.apache.camel.dataformat.bindy.annotation.DataField;

@CsvRecord(separator=",", crlf="UNIX", generateHeaderColumns=true)
public class MyClass
{
    @DataField(pos = 1, columnName="System ID")
    private String identifier;

    @DataField(pos = 2, columnName="Full Name")
    private String name;

    public void setIdentifier(String identifier)
    {
        this.identifier = identifier;
    }

    public String getIdentifier()
    {
        return identifier;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    } 
}

但是,如果我将多个JSON有效负载发送到队列,我最终会得到以下结果:

System ID,Full Name
208557,Linus Van Pelt
System ID,Full Name
273053,Charlie Brown
System ID,Full Name
206541,Lucy Van Pelt
System ID,Full Name
279876,Sally Brown 

当我查看Bindy的代码时,它有什么意义,因为unmarshal步骤不知道最终结果是文件...但是如何让生成的文件具有CSV记录是否已解组,但只有一行“标题”列?还有其他方法可以做到这一点吗?换句话说,我如何使用队列接收随机消息,但文件最终会像这样结束?

System ID,Full Name
208557,Linus Van Pelt
273053,Charlie Brown
206541,Lucy Van Pelt
279876,Sally Brown

0 个答案:

没有答案