2012-11-30 57 views
2

我试图拦截一条消息来跳过Http请求并继续我的路线。 以下是您可以复制/粘贴以进行试用的课程。骆驼测试使用拦截

使用骆驼测试,骆驼核心,骆驼http4 2.10.2和HttpClient的OSGi的,的HttpCore OSGi的4.2.2

下面是代码:

import org.apache.camel.Exchange; 
import org.apache.camel.Processor; 
import org.apache.camel.builder.AdviceWithRouteBuilder; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.test.junit4.CamelTestSupport; 
import org.junit.Test; 

/** 
* Created with IntelliJ IDEA. 
* User: lleclerc 
* Date: 12-11-28 
* Time: 16:34 
* To change this template use File | Settings | File Templates. 
*/ 
public class IsUseAdviceWithJUnit4Test extends CamelTestSupport { 

    private String providerEndPointURI = "http://stackoverflow.com"; 
    private String timerEndPointURI = "timer://myTimer"; 
    private String mockEndPointURI = "mock:myMock"; 
    private String directEndPointURI = "direct:myDirect"; 
    private boolean messageIntercepted; 

    @Override 
    protected RouteBuilder createRouteBuilder() throws Exception { 

     return new RouteBuilder() { 
      @Override 
      public void configure() throws Exception { 

       from(timerEndPointURI + "?fixedRate=true&delay=1000&period=1000") 
         .to(providerEndPointURI + "?throwExceptionOnFailure=false") 
         .to(mockEndPointURI); 
      } 
     }; 
    } 

    @Test 
    public void testIsUseAdviceWith() throws Exception { 

     messageIntercepted = false; 

     context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() { 
      @Override 
      public void configure() throws Exception { 

       replaceFromWith(directEndPointURI); 

       mockEndpoints(); 

       interceptSendToEndpoint(providerEndPointURI) 
         .skipSendToOriginalEndpoint() 
         .process(new Processor() { 
          @Override 
          public void process(Exchange exchange) throws Exception { 
           messageIntercepted = true; 
           System.out.println("INTERCEPTED"); 
          } 
         }); 
      } 
     }); 

     // we must manually start when we are done with all the advice with 
     context.start(); 

     getMockEndpoint(mockEndPointURI).expectedMessageCount(1); 

     template.sendBody(directEndPointURI, "a trigger"); 

     assertMockEndpointsSatisfied(); 

     assertEquals(true, messageIntercepted); 

     assertNotNull(context.hasEndpoint(directEndPointURI)); 
     assertNotNull(context.hasEndpoint("mock:" + directEndPointURI)); 

     assertNotNull(context.hasEndpoint(mockEndPointURI)); 
    } 

    @Override 
    public boolean isUseAdviceWith() { 
     return true; 
    } 

    @Override 
    public boolean isUseRouteBuilder() { 
     return true; 
    } 
} 

感谢您帮帮我 !

+0

这是关系到使用“http4” ......它更改为“HTTP”,它工作得很好......不知道为什么,这将是尚未虽然 –

+0

我更新了测试当邮件没有被截取时失败,你可以再试一次,http或http4,两者都不起作用...... :( – lleclerc

回答