由NotifyBuilder看到的Camel Splitter产生错误的完成交换数量?

时间:2013-04-06 09:19:31

标签: java json apache-camel splitter enterprise-integration

我使用Camel 2.10.3。

假设我有一条类似于以下内容的路线:

from("direct:split")
  .routeId("split-ti-analytics-events")
  .split().method(JsonArraySplitter.class,"split")
  .parallelProcessing()
  .log("Received: ${body}")
  .to("stub:direct:somewhere");

使用NotifyBuilder执行以下操作以断言我的分离器的测试类正在做它应该做的事情。

@Test(description = "Asserts that when we receive a json event that we properly split the " +
            "events if the payload was a json array.")
public void testReceiveTiAnalyticsArrayOfJsonEvents() {
    NotifyBuilder notifier = new NotifyBuilder(context)
      .wereSentTo("stub:direct:somewhere")
      .whenExactlyDone(7)
      .create();
      producerTemplate.sendBody("direct:split", sampleEventsInArrayJsonString);

      assertTrue(notifier.matches(5, TimeUnit.SECONDS));
}

并假设sampleEventsInArrayJsonString是一个类似于:

的json数组
[{},{},{},{},{},{},{}]

json数组中有7个对象元素。

测试将立即失败。但是,测试的输出清楚地显示了7条“收到:{}”的日志消息。

现在,这是有趣的部分......如果我设置了.whenExactlyDone(8),那么NotifyBuilder中的测试就会通过。第8条信息究竟来自哪里?我只想说这个测试是有效的并且称它为一天,因为我知道它至少会从json数组中分离出来的消息(忽略了我没有在NotifyBuilder中验证内容的事实),但我是关注实际上通过不属于的路线发送第8次交换。 NotifyBuilder看到8个通过该路由而不是7个交换的原因是什么?

1 个答案:

答案 0 :(得分:1)

是的,这是Camel中的一个小错误。我已经记录了一张票,并在测试中修了一个工作 https://issues.apache.org/jira/browse/CAMEL-6255