我有以下用于演示目的的路线
from("direct:external")
.routeId("external")
.to("http4://www.third-party.com/foo").id("ext");
为了测试,我想 *用direct:端点替换http4:端点 *在路线末尾添加一个模拟:端点进行验证
我添加了以下adviceWithRouteBuilder
context.getRouteDefinition("external").adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
weaveAddLast().to("mock:result");
weaveByToUri(".*http4://.*")
.replace()
.to("direct:foo");
}
});
这个似乎有用,但是如果我改变weave*
语句的顺序,就像这样
public void configure() throws Exception {
weaveByToUri(".*http4://.*")
.replace()
.to("direct:foo");
weaveAddLast().to("mock:result");
}
它给我以下错误
java.lang.IllegalArgumentException:没有匹配的输出:*在路线中:路线(外部)[[从[直接:外部]] - > [管道 - > [[至[直接:FOO]]]]]
我实际上希望得到相同的结果,与订单无关。
答案 0 :(得分:6)
这里要注意的一点是numpy
调用只知道原始的RouteBuilder。因此,当您首先执行weave*
调用时,它会将weaveByUri()
替换为.to("http4://www.third-party.com/foo")
,这恰好是您路线中的最后一个终点。现在,当您执行.to("direct:foo")
调用时,它会查找weaveAddLast()
但找不到它,因为它已被"http4://www.third-party.com/foo"
替换。这导致抛出异常。
因此,假设在"direct:foo"
端点之后还有另一个端点,使其不再是您路由中的最后一个端点,那么"http4..."
应该可以正常工作。例如,如果您的原始路线看起来像这样,它将起作用:
adviceWith()
我应该注意到,我认为这是一个错误,订单无关紧要。