Apache Camel:Weave在Split中不起作用。为什么?

时间:2012-04-17 15:52:46

标签: spring unit-testing split apache-camel

我在Spring中有以下XML DSL上下文定义:

<beans>
    <camelContext>
        <route>
            <from uri="direct:foo"/>
            <split parallelProcessing="true">
                <simple>${body}</simple>
                <to uri="direct:bar"/>
            </split>
        </route>
    </camelContext>
</beans>

在我的测试中,我试图编织direct:bar端点,如下所示:

context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

    @Override
    public void configure() throws Exception {
        weaveByToString(".*direct:bar.*").replace().to("mock:bar");
    }
});

这成功了。但是当路由开始时,会抛出一个异常,说org.apache.camel.NoSuchBeanException: No bean could be found in the registry for: direct:bar

为什么?

可能是骆驼不支持编织内部分裂?

注意:以下XML一切正常:

<beans>
    <camelContext>
        <route>
            <from uri="direct:dummy"/>
            <to uri="direct:bar"/>
        </route>

        <route>
            <from uri="direct:foo"/>
            <split parallelProcessing="true">
                <simple>${body}</simple>
                <to uri="direct:dummy"/>
            </split>
        </route>
    </camelContext>
</beans>

1 个答案:

答案 0 :(得分:0)

我无法使用Camel 2.7描述的用例重现您的错误。这是我的测试通过:

@Test
public void test() throws Exception {

    context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

        @Override
        public void configure() throws Exception {
            weaveByToString(".*direct:bar.*").replace().to("mock:bar");
        }
    });

    MockEndpoint mock = getMockEndpoint("mock:bar");
    mock.expectedMessageCount(1);

    template.sendBody("direct:foo", "this is a test");

    assertMockEndpointsSatisfied();
}

使用camel:run启动路线也可以在不抛出NoSuchBeanException的情况下开始。