Camel 交换身体记录大小

bd1hkmkf  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(123)

场景:

  • CSV文件被发送到我的端点,Pojo将数据转换为java,并将消息发送到我的一个路由,比如说(“direct:consume”)路由,然后处理器处理该文件,操作消息并创建新的输出。

发布日期:

  • 文件只包含代码中断的一行
  • 文件包含多行代码

已尝试:

  • 我试图找到一种方法来确定进入交换的记录量。getIn().getBody()
  • 堆栈溢出时读取
  • 阅读有关Exchange camel文档
  • 在不知道记录数量的情况下检查Java代码中的对象/对象到列表转换

编码:

public void process(Exchange exchange) throws Exception {
    List<Cars> output = new ArrayList<Cars>();
  **List<Wehicle> rows = (List<Wehicle>) exchange.getIn().getBody(); <-- Fails**

    for (Wehicle row: rows) {
        output.add(new Cars(row));
    }

    exchange.getIn().setBody(output);
    exchange.getIn().setHeader("CamelOverruleFileName", "CarEntries.csv");
}

韦希勒

...
@CsvRecord(separator = ",", skipFirstLine = true, crlf = "UNIX")
public class Wehicle {
    @DataField(pos = 1)
    public String CouponCode;

    @DataField(pos = 2)
    public String Price;
}
...

汽车

@CsvRecord(separator = ",", crlf = "UNIX", generateHeaderColumns = true)
public class Cars {
    @DataField(pos = 1, columnName = "CouponCode")
    private String CouponCode;

    @DataField(pos = 2, columnName = "Price")
    private String Price;

    public Cars(Wehicle origin) {
        this.CouponCode = Utilities.addQuotesToString(origin.CouponCode);
        this.Price = origin.Price;
    }
}

输入:

"CouponCode","Price"
"ASD/785", 1900000
"BWM/758", 2000000

问题:

  • 如何创建一个动态列表,无论我得到一个对象还是多个对象?-- exchange.getIn().getBody()返回对象
  • 如何检查 Camel 交换消息中的记录数量?-- exchange.getIn().getBody()没有大小/长度方法
  • 还有别的办法吗?

很久没有用java了,再加上对camel很陌生。

luaexgnf

luaexgnf1#

在重新检查官方文档后,似乎以下更改解决了该问题。
编码:

public void process(Exchange exchange) throws Exception {
    List<Cars> output = new ArrayList<Cars>();
    List records = exchange.getIn().getBody(List.class);
    (List<Wehicle>) rows = (List<Wehicle>) records;

    for (Wehicle row: rows) {
        output.add(new Cars(row));
    }

    exchange.getIn().setBody(output);
    exchange.getIn().setHeader("CamelOverruleFileName", "CarEntries.csv");
   }

相关问题