我在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>
答案 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
的情况下开始。