【问题标题】:Camel Bindy - split() not workingCamel Bindy - split() 不工作
【发布时间】:2017-04-04 06:20:45
【问题描述】:

我正在使用 Bindy 和 Camel 来处理 CSV 文件。

以下代码,从 csv 中获取解组的 bean 列表运行良好。

 from("ftp://blabla.com:21/InPut?password=bla&move=done&sortBy=file:name")
.unmarshal(bindy)
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
                    Message in = exchange.getIn();
                    Map<String, Object> modelMap = (Map<String, Object>) in.getBody();
                    System.out.println(modelMap.size());
                    int i = 0;
                }
            });

但是当我尝试这个时:

from("ftp://blabla.com/InPut?password=bla&move=done&sortBy=file:name")
.unmarshal(bindy)
.split(body())
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
                    Message in = exchange.getIn();
                    ArrayList<HashMap<String, Object>> list = (ArrayList<HashMap<String, Object>>) in.getBody();
                    System.out.println(list.size());
                    int i = 0;
                }
            });

拆分的答案是空的,没有什么可处理的。

你知道为什么会这样吗?

感谢和问候

吉尔

**** 解决方案 ***** 感谢您的反馈。如果案例 1 运行良好,让我得到一个地图列表,对于案例 2,我必须先逐行处理它,然后再解组。在这种情况下,主体包含 POJO。

此代码有效:

 .split(body().tokenize("\n"))
 .unmarshal(bindy)
 .process(new Processor() {
                public void process(Exchange exchange) throws Exception {
                    Message in = exchange.getIn();
                    Employee emp = (Employee) in.getBody();
                    System.out.println(emp);

                }
            });

感谢您的帮助

吉尔

【问题讨论】:

  • 你认为你使用 HashMap 的 ArrayList 并投射 body 可能会导致这个失误吗?
  • 我什至不输入process方法,因为结果是空的。所以到目前为止没有演员表
  • 在拆分前尝试对消息进行标记。 .split(body().tokenize(',')) 另请注意,split 在早期版本的 Camel 中曾经是 splitter
  • 谢谢。我会尝试,但是在解组之后,身体现在必须包含一个 Hahmap 列表。这是我不分裂时得到的。所以此时标记化可能为时已晚
  • 您是否想让您的处理器处理大小为 1 的 ArrayList,其中包含大小为 1 的 HashMap?

标签: csv apache-camel bindy


【解决方案1】:

感谢您的反馈。如果案例 1 运行良好并让我获得地图列表,对于案例 2,我必须先逐行处理它,然后再解组。在这种情况下,主体包含 POJO。

此代码有效:

 .split(body().tokenize("\n"))
 .unmarshal(bindy)
 .process(new Processor() {
                public void process(Exchange exchange) throws Exception {
                    Message in = exchange.getIn();
                    Employee emp = (Employee) in.getBody();
                    System.out.println(emp);

                }
            });

感谢您的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多