Apache Camel测试。删除RoutePolicy

时间:2015-04-27 09:03:34

标签: java apache-camel apache-zookeeper

这是Apache Camel路线:

ZooKeeperRoutePolicy routePolicy = new ZooKeeperRoutePolicy("zookeeper:localhost:2181/fuse-example/routePolicy", 1);
from("file:camelInpit").routeId("systemARoute")
                .routePolicy(routePolicy)
                .log(LoggingLevel.ERROR, "Starting route")
                [...]

我想在测试中删除routePolicy,因为测试环境中没有ZooKeeper,但这并不像看起来那么容易

    context.getRouteDefinition("systemARoute").adviceWith(context, new AdviceWithRouteBuilder() {
        @Override
        public void configure() throws Exception {
            replaceFromWith("direct:aaa");
            weaveByType(RouteDefinition.class).selectIndex(1).remove();
        }
    });

weaveById("policy")并设置ID routePolicy(...).id("policy")无效。

如何在测试时动态删除RoutePolicies

3 个答案:

答案 0 :(得分:3)

是不是可以做那样的事情?

from("file:camelInpit").routeId("systemARoute")
                .choice()
                  .when(prodEnvironmentExpression)
                    .routePolicy(routePolicy)
                  .endChoice()
                .end()
                .log(LoggingLevel.ERROR, "Starting route")

答案 1 :(得分:2)

您可以访问原始路由并将其路由策略设置为null

    context.getRouteDefinition("systemARoute").adviceWith(context, new AdviceWithRouteBuilder() {
        @Override
        public void configure() throws Exception {
            getOriginalRoute().setRoutePolicies(null);
        }
    });

但我们应该为此添加流畅的DSL构建器以使其脱颖而出?

答案 2 :(得分:1)

如果将它绑定到上下文,则可以通过使用myPolicy是模拟或不执行任何操作的策略轻松地模拟测试中的策略。

如果你创建一个抽象的MyCamelTestSupport,然后你需要模拟它的所有测试扩展MyCamelTestSupport

,那就更容易了
@Override
protected JndiRegistry createRegistry() throws Exception {
    JndiRegistry jndi = super.createRegistry();
    jndi.bind("myPolicy", myPolicy);
    return jndi;
}