2015-04-27 62 views
3

这里是Apache的骆驼航线:阿帕奇骆驼测试。删除RoutePolicy

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")并设置编号routePolicy(...).id("policy")没有帮助。

如何在测试时动态删除RoutePolicies

回答

2

您可以访问原来的路线,并将其路由策略为null

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

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

3

难道不可能做那样的事吗?

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

我正在使用'RouteBuilder'。是否可以将测试参数传递给RouteBuilder? –

+0

对不起,我不完全明白你的意思。 – soilworker

+0

据我所知,'prodEnvironmentExpression'应该是一些配置参数,它在测试开始时自动启用。我如何将测试参数传递到路由以使此表达式评估为true? –

1

如果你把它绑定到上下文中,您可以很容易地通过,其中myPolicy是模拟或什么都不做的政策,使政策的模拟测试中的。

甚至更​​容易,如果你让一个抽象MyCamelTestSupport这都不会说,然后所有的测试,其需要嘲笑它延伸MyCamelTestSupport

@Override 
protected JndiRegistry createRegistry() throws Exception { 
    JndiRegistry jndi = super.createRegistry(); 
    jndi.bind("myPolicy", myPolicy); 
    return jndi; 
} 
+0

如何在生产环境中创建ZooKeeperRoutePolicy?正如您目前所看到的,我在代码中创建了它。我应该使用'camelContext.getRegistry()'并将我的策略绑定到Camel JNDI注册表? –

+0

取决于你如何创建它,作为一个独立的,它将是main.bind(),如果要使用ServletContextListener,你需要创建一个SimpleRegistry(put)或InitialContext(bind)并创建一个新的DefaultCamelContext( arg)其中arg是SimpleRegistry或InitialContext。 – J2B

+0

我在使用Blueprint的Apache Karaf OSGI容器中运行Camel。 –