使用驼峰过滤器时无法访问测试中的路由元素

问题描述 投票:0回答:1

我的骆驼路线定义如下:

  from(source).routeId("source processor")       
                .filter(liabilityMessageFilter)
                .log(LoggingLevel.INFO, LOGGER, "Some log")
                .process("myMessageProcessor");

我有一个测试来检查路线定义:

@Test
public void myTest() {
    ModelCamelContext mcc = camelContext.adapt(ModelCamelContext.class);
    final List<RouteDefinition> routeDefinitions = mcc.getRouteDefinitions();
  

    assertThat(((LogDefinition) routeDefinitions.get(0).getOutputs().get(1)).getMessage(), is("some log"));
}

问题是

routeDefinitions.get(0).getOutputs()
仅返回过滤器对象,而不返回其余对象。但是,如果我更改过滤器的顺序并登录路由定义,它就可以工作。我无法使用上面给定的路由定义到达路由元素的其余部分?原因是什么?我是否做错了什么?

例如:如果我没有过滤器,

routeDefinitions.get(0).getOutputs()
返回日志和流程元素。

apache-camel spring-camel
1个回答
0
投票

filter()
就像一段代码,一直适用到
end()
发生,或者直到路线结束。

所以过滤器是路由定义的唯一输出。然后,过滤器有两个自己的“嵌套”输出。

Definition = routeDefinitions.get(0)

Filter = <Definition>.getOutputs().get(0)

Log = <Filter>.getOutputs().get(0)
Process = <Filter>.getOutputs().get(1)
© www.soinside.com 2019 - 2024. All rights reserved.