当前位置: 首页 > 知识库问答 >
问题:

骆驼交换身体记录大小

耿建弼
2023-03-14

脚本:

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

问题:

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

尝试:

  • 试图找到一种方法来确定交易记录的数量。getIn()。getBody()
  • 阅读stackoverflow
  • 阅读有关exchange的文档
  • 在不知道记录数量的情况下,检查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

问题:

  • 如何创建动态调用列表,无论我得到的是一个对象还是多个对象?——交换getIn()。getBody()返回对象

很长一段时间没有使用java了,加上对camel来说是个新手。

共有1个答案

寇桐
2023-03-14

在重新检查官方文件后,以下更改似乎解决了这个问题。

代码:

    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");
   }
 类似资料:
  • 我已经创建了一个服务代理。 代理(请求类型为)和实际服务(请求类型。)之间有一个处理器。 进入< code > process(Exchange Exchange)方法的交换体属于< code>TypeA。 我能够使用下面的代码行访问数据 现在,我想将此信息更改为。 我使用下面的代码添加主体。 我得到了 现在,我想使用调用真正的服务,它来自。 我尝试进入处理器,但出现以下异常 真正的Web服务没有

  • 我有一个简单的路线,看起来像这样: CXF 配置也非常简单: 此简单路由失败,出现以下异常 这是消息历史记录,表明它在

  • 我试图在Apache Camel中实现以下路径:endpoint1接收消息。路由向endpoint2(清除主体)发起请求。转换器通过使用endpoint2的结果来转换endpoint1的主体,以输入消息。 我尝试了以下几点: 问题是,该主体被消息endpoint2覆盖。我正在考虑将消息体备份到属性中。但什么是最佳实践?

  • 我有一条骆驼路线,如下所示。 bean方法顾名思义,分别将body设置为“Hello”和“World”。 我还设置了onException子句,如下所示: 假设,我将一条消息放在队列“开始”上,正文为“测试消息”。在第一个杜米豆中成功处理后,我在第二个杜米豆中抛出一个运行时异常。我希望看到实际的消息或(原始消息内容完好无损,即“测试消息”)被发送到我的死信队列。 但是,死信队列上的消息内容是“He

  • 希望你有时间回答我的问题。在过去的几天里,我一直在阅读关于Camel的文章,并设法将一切都设置好并运行起来。现在,我碰到了一个棘手的部分:)。基本上,我在运行时使用Java定义一个路由,并将路由配置放在DB中。路线是可行的,信息从一边流向另一边。但是,当异常发生时,我想知道异常发生在哪里(在哪个路由endpoint之间),在DB中存储当前的交换主体(对进一步处理有用的进行中的消息),由用户更新消息

  • 我正在设置路由1中骆驼交换的属性。我正在尝试在拆分器内的第二条路由中更新该属性。但是在拆分器的第二次迭代中,我得到的是我在路由1中设置的原始值,而不是新的更新值。下面是我正在尝试的示例。。 豆子里面: 为什么不更新属性?甚至我也试着在标题中设置。同样的结果。非常感谢。