2017-10-13 86 views
0

我有一个非常简单的途径:骆驼NotifyBuilder始终返回false

PerfStubRouteBuilder.java

public class PerfStubRouteBuilder extends SpringRouteBuilder { 

    /* (non-Javadoc) 
    * @see org.apache.camel.builder.RouteBuilder#configure() 
    */ 
    @Override 
    public void configure() throws Exception { 
     from("direct:test-aces-input") 
     .log("Creating test Accident Number header") 
     .setHeader("AccidentNumber", simple("AB999999999")) 
     .log("Test Accident Number header created : ${header.AccidentNumber}") 
     .end(); 
    } 
} 

,我如下测试它:

PerfStubRouteBuilderTest.java

public class PerfStubRouteBuilderTest extends CamelTestSupport { 
    @Produce(uri = "direct:test-aces-input") 
    ProducerTemplate template; 

    PerfStubRouteBuilder route = new PerfStubRouteBuilder(); 
    Exchange exch = new DefaultExchange(context); 

    @Override 
    protected RouteBuilder createRouteBuilder() { 
     return route; 
    } 

    @Test 
    public void test_PerfStubRouteBuilder_happyPath_addsAccidentNumberHeaderToExchange() throws Exception { 
     startCamelContext(); 
     NotifyBuilder notify = new NotifyBuilder(context).from("direct:test-aces-input").whenDone(1).filter(header("AccidentNumber").isEqualTo("AB999999999")).create(); 
     template.send(exch); 
     assertTrue(notify.matches(10, TimeUnit.SECONDS)); 
     stopCamelContext(); 
    } 
} 

assertTrue总是会返回为false,所以我怀疑我没有正确使用NotifyBuilder,尽管此时我无法确定。本质上,我想检查交易所是否通过路线,并将实际路线中指定的头添加到交易所。我想要发生的情况是,如果与该标题值组合的交换使其到达路线的末端,则会发生匹配,因此会出现筛选步骤。我想避免在路线末端增加一个端点,例如,通过AdviceWith给出了路线本身的小小和简单程度,似乎有点重量级开始在模拟端点中添加这样的小测试

UPDATE:

试图消除从表达式过滤器部分,留下作为NotifyBuilder NotifyBuilder notify = new NotifyBuilder(context).from("direct:test-aces-input").whenDone(1).create(); ,测试仍然失败

回答

1

创建从端点在测试等

Endpoint endpoint = context.getEndpoint("direct:test-aces-input"); 
Exchange exchange = endpoint.createExchange(); 
template.send(exchange); 
交换

或只是直接使用sendBody

tempalte.sendBody("") 
+0

非常好,第一次工作。在NotifyBuilder中使用默认交换是否存在某种问题? – jbailie1991

+0

它的评论在这里https://github.com/apache/camel/blob/5cdc8ae7e28113f127dfe637460fd4a047623463/camel-core/src/main/java/org/apache/camel/builder/NotifyBuilder.java#L191 – ltsallas